Wie kan mij helpen met het vinden van de fout in het onderstaande script ( aanmelden.php ), zodra ik op registreren klik krijg ik wit beeld. Ik denk persoonlijk dat de fout zit in het activatie gedeelte maar kan het niet vinden, ik hoop dat iemand mij hier mee kan helpen.

<?PHP
Ob_Start();
Include("includes/include.php");
Design_Boven("Nieuw Account");

If($_POST['submit']){

$Bestaat = @Mysql_Num_Rows(Mysql_Query("SELECT gebruikersnaam FROM `users` WHERE gebruikersnaam='".$_POST['gebruikersnaam']."'"));
$Bestaat_IP = @Mysql_Num_Rows(Mysql_Query("SELECT gebruikersnaam FROM `users` WHERE ip='".$_SERVER['REMOTE_ADDR']."'"));

If(Strlen($_POST['gebruikersnaam']) < 5 OR Strlen($_POST['gebruikersnaam']) > 30){
Echo Top("U bent iets vergeten in te vullen");

Echo "Je hebt geen (geldige) gebruikersnaam ingevuld, een gebruikersnaam moet minimaal 5 tekens lang zijn en heeft een maximale lengte van 30 tekens!<br /><br />

<a href='' onclick'history.go(-1);'>Ga terug</a>";

Echo Bottom();
}ElseIf($Bestaat_IP != 0){
Echo Top("Er is al een account met dit IP adres");

Echo "Er is al een account met dit IP adres, om valsspelen tegen te gaan is het maar mogelijk 1 account per netwerk aan te maken.!<br /><br />

<a href='' onclick'history.go(-1);'>Ga terug</a>";

Echo Bottom();
}ElseIf($Bestaat != 0){
Echo Top("Gebruikersnaam bezet");

Echo "De gekozen gebruikersnaam is al in gebruik, kies een andere!<br /><br />

<a href='' onclick'history.go(-1);'>Ga terug</a>";

Echo Bottom();
}ElseIf(Strlen($_POST['wachtwoord1']) < 5){
Echo Top("U bent iets vergeten in te vullen");

Echo "Je hebt geen (geldige) wachtwoord ingevuld, een wachtwoord moet minimaal 5 tekens lang zijn!<br /><br />

<a href='' onclick'history.go(-1);'>Ga terug</a>";

Echo Bottom();
}ElseIf($_POST['wachtwoord1'] != $_POST['wachtwoord2']){
Echo Top("De wachtwoorden komen niet overeen");

Echo "Je hebt geen gelijke wachtwoorden ingevuld!<br /><br />

<a href='' onclick'history.go(-1);'>Ga terug</a>";

Echo Bottom();

}ElseIf(!ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$", $_POST['email'])){

Echo Top("U bent iets vergeten in te vullen");

Echo "Je hebt geen (geldige) emailaders ingevuld!<br /><br />

<a href='' onclick'history.go(-1);'>Ga terug</a>";

Echo Bottom();
}ElseIf(Ereg("^--",$_POST['prijs'])){
Echo Top("Kies een prijs");

Echo "Je bent vergeten een prijs in te vullen!<br /><br />

<a href='' onclick'history.go(-1);'>Ga terug</a>";

Echo Bottom();
}Else{
function hash( $aantal ) {
$keys = Array(
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
1, 2, 3, 4, 5, 6, 7, 8, 9, 0
);
$hash = NULL;
for( $i = 0; $i <= $aantal; $i++ ) {
$hash = $keys[ rand(0, 50) ];
}
return $hash;

}

$Activatie = hash( 7 );

Mysql_Query("INSERT INTO `users`
(`gebruikersnaam`,
`wachtwoord`,
`emailadres`,
`prijs`,
`datum`,
`activatie`,
`ip`,
`ref`)
VALUES
('".$_POST['gebruikersnaam']."',
'".md5($_POST['wachtwoord1'])."',
'".$_POST['email']."',
'".$_POST['prijs']."',
'".Time()."',
'".$Activatie."',
'".$_SERVER['REMOTE_ADDR']."',
'".$_POST['ref']."')
") OR DIE(Mysql_Error());


Echo Top("Je bent succesvol aangemeld");

Echo "De registratie is succesvol verlopen, er is een activatie e-mail onderweg naar <i>".$_POST['email']."</i> Voor je kunt inloggen dien je op de activatielink te klikken!<br /><br />
Je kunt al wel vast beginnen met verkopen, dit omdat de activatie mail lang onderweg is. Je link is: http://www.Pistol.nl/koop.php?dealer=".urlencode($_POST['gebruikersnaam']).";! Succes!";

Echo Bottom();


//Headers
$to = $_POST['email'];
$subject = "Aanmelding Pistol.nl";
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1" . "\r\n";
$headers .= "From: Pistol.nl - Aanmelding <[email protected]>" . "\r\n";
$headers .= "X-Mailer: PHP v".phpversion(). "\r\n";
$Bericht = '<table width="410" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td style="padding-left: 6px; padding-right: 6px;">
<table width="400" border="0" cellspacing="0" cellpadding="0">
<tr>

<td valign="top" style="padding-left: 5px;">
<table width="538" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><a href="http://www.Pistol.nl"><img alt="" src="http://www.Pistol.nl/mail/images/header.jpg"; width="538" height="113" border="0" /></a></td>
</tr>
<tr>
<td style="padding-top: 4px;"><table width="538" border="0" cellspacing="0" cellpadding="0">
<tr>
<td background="http://www.Pistol.nl/mail/images/content-boven.jpg"; style="width: 538px; height: 28px; color: #FFFFFF; font-weight: bold; text-transform: uppercase; font-size: 13px; padding-left: 8px; font-family: Tahoma;">
Welkom
</td>
</tr>
<tr>
<td background="http://www.Pistol.nl/mail/images/content-background.jpg"; style="padding-top: 5px; padding-left: 8px; padding-bottom: 4px; padding-right: 6px; margin: 13px; font-family: Tahoma; color: #9C1F1F; font-size: 11px; font-weight: bold;">
Beste '.$_POST['gebruikernaam'].'<br />Allereerst bedankt voor het aanmelden op Pistol.nl.
Om te kunnen spelen volg de aanwijzingen hieronder.
</td>
</tr>
<tr>
<td><img alt="" src="http://www.Pistol.nl/mail/images/content-onder.jpg"; width="538" height="7" /></td>
</tr>
</table>
</td>
</tr>
<tr>
<td style="padding-top: 4px;"><table width="538" border="0" cellspacing="0" cellpadding="0">
<tr>
<td background="http://www.Pistol.nl/mail/images/content-boven.jpg"; style="width: 538px; height: 28px; color: #FFFFFF; font-weight: bold; text-transform: uppercase; font-size: 13px; padding-left: 8px; font-family: Tahoma;">
Activeer je account!
</td>
</tr>
<tr>
<td background="http://www.Pistol.nl/mail/images/content-background.jpg"; style="padding-top: 5px; padding-left: 8px; padding-bottom: 4px; padding-right: 6px; margin: 13px; font-family: Tahoma; color: #9C1F1F; font-size: 11px; font-weight: bold;">
Voordat je kan inloggen op Pistol.nl dien je je account eerst te activeren.<br /><br />

<a href="http://www.Pistol.nl/activeer.php?user='.$_POST['gebruikersnaam'].'&activatie='.$Activatie.'">Activeer je account</a><br /><br />

Met vriendelijke groet,<br />
Pistol.nl
</td>
</tr>
<tr>
<td><img alt="" src="http://www.Pistol.nl/mail/images/content-onder.jpg"; width="538" height="7" /></td>
</tr>
</table>
</td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td style="text-align: right; padding-right: 6px; height: 17px; padding-top: 4px; margin: 13px; font-family: Tahoma; color: #9C1F1F; font-size: 11px; font-weight: bold;">
Copyright 2006 <a style="color: #9C1F1F; text-decoration: none;" href="http://www.Pistol.nl">Pistol.nl</a>; // Design: <a style="color: #9C1F1F; text-decoration: none;" href="http://www.zooney.nl"; target="_blank">Zooney.nl</a> // Beheer: <a style="color: #9C1F1F; text-decoration: none;" href="http://www.proan.nl"; target="_blank">Proan.nl</a>
</td>
</tr>
</table>';
mail($to, $subject, $Bericht, $headers);
}

}Else{

Echo "<form method='POST' action=''>";

Echo Top("Nieuw Account");

Echo "Voor je kans kunt maken op de Ipod Nano moet je je eigen eerst aanmelden. Nadat je je eigen aangemeld hebt ontvang je een persoonlijke link om Pistolen te verkopen. Op de <a href='faq.php'>FAQ</a> vind je meer informatie over de persoonlijke link.";

Echo Bottom();

Echo Top("Persoonlijke gegevens");

Echo "<table>
<tr>
<td>Gebruikersnaam:</td>
<td><input type='text' name='gebruikersnaam' value='' /></td>
<td><small>Hiermee dient u straks in te loggen</small></td>
</tr>
<tr>
<td>Wachtwoord:</td>
<td><input type='password' name='wachtwoord1' value='' /></td>
<td></td>
</tr>
<tr>
<td>Wachtwoord:</td>
<td><input type='password' name='wachtwoord2' value='' /></td>
<td><small>Ter controle</small></td>
</tr>
<tr>
<td>Emailadres:</td>
<td><input type='text' name='email' value='' /></td>
<td><small>Hier wordt een activatiemail naartoe gestuurd</small></td>
</tr>
</table>";
Echo Bottom();

Echo Top("Kies je prijs");
Echo "<table>
<tr>
<td>Favoriete prijs:</td>
<td>
<select name='prijs'>
<option>-- Kies je prijs --</option>
<option>Ipod Nano</option>
<option>150 euro</option>
</select>
</td>
</tr>
</table><input type='hidden' value='".$_GET['ref']."' name='ref' />";
Echo Bottom();

If($_GET['ref']){

Echo Top("Refferal");
Echo "Je bent refferal van <u>".$_GET['ref']."</u> <a title='Refferal: Degene van wie je refferal bent ontvangt per verkoop van jou &euro; 50,-'><b>?</b></a>";
Echo Bottom();
}

Echo Top("Aanmelden");
Echo "<input class='button' type='submit' name='submit' value='Aanmelden' />";
Echo Bottom();

Echo "</form>";

}

Design_Onder();
Ob_End_Flush();
?>
Even wat kanttekeningen:

- Plaats bovenaan:


<?php
error_reporting(E_ALL);
ini_set("display_errors",1);
?>

- Haal de ob_start(); weg. Dit is nergens voor nodig.
- Haal de @ voor de variabelen en functies weg, je wilt fouten niet verstoppen en onderdrukken.
- ereg_*() functie is depricated en het gebruik van deze functie wordt dan ook afgeraden, gebruik liever preg_*(). Deze werkt een stukje sneller en beter.
- Ik mis hier en daar goede foutafhandeling, met name mijn de mail()-functie en de mysql_queries. Je wilt immers weten of een querie gelukt is of niet, en dat ga je niet zelf bedenken. In een foutafhandeling gebruik je nooit die() als er daarna output zal plaatsvinden. Zoals je layout. Je layout wordt hierdoor vaak niet correct weergegeven, en je hele script stopt dus, ook eventuele PHP-scripts daarna. Iets wat onwenselijk is dus.
- Beveilig je GET/POST/COOKIE waardes in je querie met mysql_real_escape_string. Doe je dit niet, dan heb je kans om gehacked te worden, doordat mensen je query kunnen manipuleren. Je data is altijd 'je lief'.
- Die ob_end_flush() is ook nergens voor nodig.

En nog een paar opmerkingen:
Wat wil je bereiken om dubbele IP's te blokkeren. Er zijn veel netwerken waar meerdere personen achter een enkel IP-adres zitten, dus je sluit nieuwe leden buiten.
Beter laat je dat gewoon toe, en kijk je vanuit je administratie-paneel of er dubbele leden zijn, en controlleer je gewoon welke volgens jouw een kloon-account zijn. Veel logischer.

Waarom gebruik je een layout in tables? Dat is niet bepaald flexibel. Verdiep je eens in CSS, divjes en semantiek.

Reageren