[php]mssql witte pagina

Status
Niet open voor verdere reacties.

NeedForSpeed

Gebruiker
Lid geworden
17 jan 2008
Berichten
245
Ik krijg een witte pagina zodra ik dit van mijn Virtual private server naar mijn MYSQL host kopieer. waarom?

PHP:
<?php
$servername = "Rival Gunz";
$accounttable = "Account";
$logintable = "Login";

$host = "VPS11015\SQLEXPRESS";
$user = "SA";
$pass = "";
$dbname = "GunzDB";

$connect = odbc_connect("Driver={SQL Server};Server={$host}; Database={$dbname}", $user, $pass) or die("Can't connect the MSSQL server.");

function antisql($sql) {
$sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|update|;|#|--|\\\\)/"),"",$sql);
$sql = trim($sql);
$sql = strip_tags($sql);
$sql = addslashes($sql);
return $sql;
}

function gtfo($wut) {
echo "<center><table width='500' cellpadding='5' cellspacing='0' border='0' style='border: 1px ;'>
<tr>
<td align=center width='100%' style='border-bottom: 1px solid black;'></td>
</tr>
<tr>
<td width='100%'><center>$wut</center></td>
</tr>
</table>";
die();
}

function checkemail($address) {
list($local, $host) = explode("@", $address);
$pattern_local = "^([0-9a-z]*([-|_]?[0-9a-z]+)*)(([-|_]?)\.([-|_]?)[0-9a-z]*([-|_]?[0-9a-z]+)+)*([-|_]?)$";
$pattern_host  = "^([0-9a-z]+([-]?[0-9a-z]+)*)(([-]?)\.([-]?)[0-9a-z]*([-]?[0-9a-z]+)+)*\.[a-z]{2,4}$";
$match_local = eregi($pattern_local, $local);
$match_host = eregi($pattern_host, $host);
if($match_local && $match_host) {
return 1;
}
else {
return 0;
}
}

function num_rows(&$rid) {

//We can try it at least, right?
$num= odbc_num_rows($rid);
if ($num >= 0) {
return $num;
}

if (!odbc_fetch_row($rid, 1)) {
odbc_fetch_row($rid, 0);
return 0;
}

if (!odbc_fetch_row($rid, 2)) {
odbc_fetch_row($rid, 0);
return 1;
}

$lo= 2;
$hi= 8192000;

while ($lo < ($hi - 1)) {
$mid= (int)(($hi + $lo) / 2);
if (odbc_fetch_row($rid, $mid)) {
$lo= $mid;
} else {
$hi= $mid;
}
}
$num= $lo;
odbc_fetch_row($rid, 0);
return $num;
}
?>
<html>
<head>
</head>
<body>
<center>
<?php
$ip = antisql($_SERVER['REMOTE_ADDR']);

$query1 = odbc_exec($connect,"SELECT AID FROM $logintable WHERE LastIP = '$ip'");

$i=1;
while (odbc_fetch_row($query1, $i)){
$aid = odbc_result($query1, 'AID');

$query2 = odbc_exec($connect,"SELECT UGradeID FROM $accounttable WHERE AID = '$aid'");
odbc_fetch_row($query2);
$ugradeid = odbc_result($query2, 1);

if ($ugradeid == "253")
{
gtfo("You are banned already.");
}

$i++;
}

if (isset($_GET['act']) AND $_GET['act'] == "doreg")
{

if (!is_numeric($_POST['age']) OR !checkemail($_POST['email']) OR empty($_POST['username']) OR empty($_POST['password']) OR empty($_POST['email']) OR empty($_POST['name']) OR empty($_POST['age']))
{
gtfo("Something went wrong, try again.");
}

$query1 = odbc_exec($connect, "SELECT AID FROM $accounttable WHERE UserID = '" . antisql($_POST['username']) . "'");
$count1 = num_rows($query1);

if ($count1 >= 1)
{
gtfo("Username in use.");
}

$query2 = odbc_exec($connect, "SELECT AID FROM $accounttable WHERE Email = '" . antisql($_POST['email']) . "'");
$count2 = num_rows($query2);

if ($count2 >= 1)
{
gtfo("Email address in use.");
}

$regdate = date("Y-m-d H:i:s");

$query3 = odbc_exec($connect, "INSERT INTO $accounttable (UserID, UGradeID, PGradeID, RegDate, Email, Age, Name) VALUES ('".antisql($_POST['username'])."', '0', '0', '$regdate', '".antisql($_POST['email'])."', '".antisql($_POST['age'])."', '".antisql($_POST['name'])."')");

$query4 = odbc_exec($connect, "SELECT AID FROM $accounttable WHERE UserID = '" . antisql($_POST['username']) . "'");
odbc_fetch_row($query4);
$aid = odbc_result($query4, 1);

if (!$aid)
{
gtfo("Error, please contact an staff member regarding.");
}

odbc_exec($connect, "INSERT INTO $logintable (UserID, AID, Password) VALUES ('".antisql($_POST['username'])."', '$aid', '".antisql($_POST['password'])."')");

gtfo("Your account has been created.<br><br>
Username: $_POST[username]<br>
Password: $_POST[password]<br><br>
Have fun at $servername!");
}
echo "<table width='350'>
<form action='" . $_SERVER['PHP_SELF'] . "?act=doreg' method='POST'>
<tr>
<td width='50%'><b>Username:</b></td>
<td width='50%'><input type='text' name='username'></td>
</tr>
<tr>
<td width='50%'><b>Password:</b></td>
<td width='50%'><input type='password' name='password'></td>
</tr>
<tr>
<td width='50%'><b>E-mail:</b></td>
<td width='50%'><input type='text' name='email'></td>
</tr>
<tr>
<td width='50%'><b>Name:</b></td>
<td width='50%'><input type='text' name='name'></td>
</tr>
<tr>
<td width='50%'><b>Age:</b></td>
<td width='50%'><input type='text' name='age'></td>
</tr>
<tr>
<td width='50%'><b></b></td>
<td width='50%'><input type='submit' value='Register'></td>
</tr>
</table>";
?>
<br>
</center>
</body>
</html>
 
Laatst bewerkt:
Ik vermoed dat je een witte pagina krijgt omdat je een fout in je script hebt en je geen enkele vorm van foutafhandeling gebruikt.

Begin eens met error_reporting( E_ALL ); bovenaan je script na <?php te zetten. En output bij iedere query mysql_error() als de query geen succes oplevert.
 
Ook bijzonder:

Ik krijg een witte pagina zodra ik dit van mijn Virtual private server naar mijn MYSQL host kopieer. waarom?

Niet alle servers/hosts hebben MSSQL ondersteuning. Voornamelijk Windows hostings, degene die op Linux draaien hebben dit niet voor je.

Heb je sowieso wel ondersteuning voor die database?
 
.... En output bij iedere query mysql_error() als de query geen succes oplevert.

Kleine kanttekening: mijn ervaring is dat het voor de zekerheid altijd handig is om mysql_error() als alles werkt, na je testfase, weer weg te halen. Gewoon omdat dat kan en omdat het in principe niet meer nodig is...

En mocht supersnail niet van plan zijn het te zeggen, denk ook even aan mysq_real_escape_string() ivm SQL-injection
 
Kleine kanttekening: mijn ervaring is dat het voor de zekerheid altijd handig is om mysql_error() als alles werkt, na je testfase, weer weg te halen. Gewoon omdat dat kan en omdat het in principe niet meer nodig is...

Beter nog is om ze te laten staan maar de errors niet naar het scherm te sturen maar naar je email oid en daarnaast de gebruiker een andere fout te tonen.

Het is nooit een goed idee om een script zonder enige vorm van fout-afhandeling live te zetten. Je weet nooit wanneer bijv. een database server offline gaat en je script de soep in loopt, dan is het wel fout om je gebruiker even te zeggen dat ie et later nog eens moet proberen.
 
Ik zou de laatste zijn om te beweren dat je niet aan foutafhandeling moet doen, maar je mysql_error() naar je gebruikers te sturen vind ik ook zo wat, zou eerder gaan voor iets in de zin van:
PHP:
if (mysql_query($bla))
{
echo 'joepie alles ok';
}
else
{
echo 'fail';
$bericht = 'er ging iets fout!';
$bericht .= mysql_error();
mail('mail@mail.nl', 'er ging iets fout op je website!', $bericht);
}
 
Laatst bewerkt:
Ja precies, dat zei ik ook ;) Wel een handig voorbeeld zo.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan