Ik ben nog niet zo heel lang bezig met php en dit is een registratie pagina die ik heb gemaakt met al bestaande scripts en wat tutorials. Nu is het probleem dat hij niet de goede meldingen geeft als bijvoorbeeld je email niet goed is ingevuld of je wachtwoorden niet identiek zijn.

Dit is het script:


<?php     

include ("game/includes/config.php");

$Gebruikersnaam  = $_GET ['nickname'];
$Wachtwoord      = $_GET ['password'];
$Controle        = $_GET ['confirm'];
$Mail            = $_GET ['mail'];
$IP              = $_SERVER['REMOTE_ADDR'];

if (isset($_GET['submit']))

    {
	    $Error = Array (
		"Je mag maar 1 accaunt per IP hebben.",
		"Je hebt niet alle velden ingevult.",
		"Je gebruikersnaam mag alleen uit nummers en cijfers bestaan.",
		"Deze gebruikersnaam is al in gebruik.",
		"Je wachtwoord moet uit minstens 6 tekens bestaan.",
		"De 2 ingevulde wachtwoorden zijn niet identiek.",		
		"Dit is geen geldig E-Mail adres.",		
		"Deze E-Mail is al in gebruik.");
		
		$Nummer = -1;
		$IPControle = mysql_query("SELECT * FROM Leden WHERE IP='$IP'");
		if (mysql_num_rows($IPControle) == 1)
		$Nummer = 0;
		if ($Gebruikersnaam != "" && $Wachtwoord != "" && $Controle != "" && $Mail != "")
		$Nummer = 1;
		if (preg_match('/^[a-zA-Z0-9_\-]+$/',$Gebruikersnaam))
		$Nummer = 2;
		$GebruikersnaamControle = mysql_query("SELECT * FROM Leden WHERE Gebruikersnaam='$Gebruikersnaam'");
		if (mysql_num_rows($GebruikersnaamControle) == 1)
		$Nummer = 3;
		if (strlen($Wachtwoord) >= 6)
		$Nummer = 4;
		if ($Wachtwoord != $Controle)
		$Nummer = 5;
		if (preg_match('/^.+@.+\..+$/',$Mail))
		$Nummer = 6;
		$MailControle = mysql_query("SELECT * FROM Leden WHERE Mail='$Mail'");
		if (mysql_num_rows($MailControle) == 1)
		$Nummer = 7;
		
		$Aanmelden = "INSERT INTO Leden(Gebruikersnaam, Wachtwoord, Datum, IP, Mail) VALUES('$Gebruikersnaam', 'MD5('$Wachtwoord')', 'NOW()', '$IP', '$Mail')";
	}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Aanmelden</title>
</head>
<body>
<center>
<?php

if($Nummer != -1)

    {
	    echo "Aanmelden<br \><br \>";	
		if(isset($Nummer) && $Nummer != -1)
		echo "{$Error[$Nummer]} <br \><br \>";

echo <<<ENDHTML
<form method="get" action="signup.php">
l Gebruikersnaam l<br />
<input name="nickname" type="text" maxlength="16" /><br />
l Wachtwoord l<br />
<input name="password" type="password" maxlength="16" /><br />
l Wachtwoord Herhalen l<br />
<input name="confirm" type="password" maxlength="16" /><br />
l E-Mail l<br />
<input name="mail" type="text" maxlength="64" /><br />
<input name="submit" type="submit" value="Verstuur" />
</form>
ENDHTML;

    }

else

    {
	    echo "Je bent nu aangemeld!";
	}
	
?>
</center>
</body>
</html>


En dit is het in de praktijk:

http://geckodesign.nl/Robin/signup.php

Weet er iemand wat ik fout doe want ik kom er zelf niet meer uit.
Tips zijn ook altijd welkom want ik ben nog niet zo lang bezig.

Alvast Bedankt!
Pas je script even aan en gebruik [ignore]
 en 
[/ignore] tags om je code heen. Om php code zet je uiteraard dit:<?php en ?>Gebruik je knop om dit te doen.

SanThe.
SanThe, geeft aan het edit knopje te gebruiken...dat wil niet zeggen dat je daarna een bericht post en dan er iets in zet, dat valt onder de Bumpers.

Maar het maakt niet uit.

Kun je het niet het beste zo doen ?:


<?php
if(!empty($_POST['Naam']))
{
	$Naam = mysql_real_escape_string($_POST['Naam']);
} else {
	$error = "'Geen Naam ingevuld!";
}
?>


M'n 500ste Post!!...
@Bart
Als dat zo is, moet je even de definitie van Bumpen bekijken. Het is officieel geen bump en mag prima worden gedaan.

Vergeet overigens niet te kijken / controleren aan het eind (op Bart Tuma zijn manier) of $error is geset. Je kan daar ook beter een array van maken, dat is nog handiger werken.
Ik heb het aangepast en nu ziet het er zo uit:

<?php     

include ("game/includes/config.php");

$Gebruikersnaam  = $_GET ['nickname'];
$Wachtwoord      = $_GET ['password'];
$Controle        = $_GET ['confirm'];
$MD5Wachtwoord   = md5($Wachtwoord);
$MD5Controle     = md5($Controle);
$Datum           = date(Y-m-d);
$Mail            = $_GET ['mail'];
$IP              = $_SERVER['REMOTE_ADDR'];

if(!$_GET['submit'])   
    
    {
	
echo <<<ENDHTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Aanmelden</title>
</head>
<body>
<center>
<form method="get" action="aanmelden.php">
l Gebruikersnaam l<br />
<input name="nickname" type="text" maxlength="16" /><br />
l Wachtwoord l<br />
<input name="password" type="password" maxlength="16" /><br />
l Wachtwoord Herhalen l<br />
<input name="confirm" type="password" maxlength="16" /><br />
l E-Mail l<br />
<input name="mail" type="text" maxlength="64" /><br />
<input name="submit" type="submit" value="Verstuur" />
</form>
</center>
</body>
</html>
ENDHTML;

    }

else if ($Gebruikersnaam == "" && $MD5Wachtwoord == "" && $MD5Controle == "" && $Mail == "")

    {
	    echo "Niet alle velden zijn ingevult!";
	}
	
	else

    {
	    if (!preg_match('/^[a-zA-Z0-9_\-]+$/',$Gebruikersnaam))
		
		    {
			    echo "Gebruikersnamen mogen alleen Letters, Cijfers bevatten!";
			}
			
		else
		
		    {
			    $GebruikersnaamControle = mysql_query("SELECT * FROM Leden WHERE Gebruikersnaam='$Gebruikersnaam'");
		        if (mysql_num_rows($GebruikersnaamControle) == 1)
				
				    {
					    echo "Deze Gebruikersnaam is al in gebruik!";
					}
					
				else
				
				    {
					    if (strlen($Wachtwoord) < 6)
						
						    {
							    echo "Het wachtwoord moet minstens 6 tekens bevatten!";
							}
							
						else
						
						    {
							    if ($Wachtwoord != $Controle)
								
								    {
								        echo "De 2 wachtwoorden zijn niet identiek!";
								    }
								
								else
								
								    {
									    if (!preg_match('/^.+@.+\..+$/',$Mail))
										
										    {
											    echo "Dit is geen geldige E-Mail!";
											}
											
										else
										
										    {
											    $MailControle = mysql_query("SELECT * FROM Leden WHERE Mail='$Mail'");
		                                        if (mysql_num_rows($MailControle) == 1)
												
												    {
												        echo "Deze E-Mail is al in gebruik!";
												    }
													
												else
												
												    {
													    $Query = "INSERT INTO Leden(Gebruikersnaam, Wachtwoord, Datum, IP, Mail) VALUES('$Gebruikersnaam', '$MD5Wachtwoord', '$Datum', '$IP', '$Mail')";
	                		                            mysql_query($Query) or die (mysql_error());
														echo "Het aanmelden is gelukt!";
													}
											}
									}
							}
					}
			}    
    }
    
?>


Nu werkt alleen het invoeren van de datum niet.
En als je op de submit button drukt krijg je al je gegevens in je adresbalk te zien, hoe voorkom ik dat?
Robin Benjamins schreef op 31.07.2008 10:45
En als je op de submit button drukt krijg je al je gegevens in je adresbalk te zien, hoe voorkom ik dat?

Geen GET maar POST gebruiken.
<form method="post" action="aanmelden.php">
Heb je ook alle $_GET's in $_POST's veranderd?
Ik was er 1tje vergeten nu doet hij het goed alleen de datum niet, heeft er iemand nog tips?
Als je de fout wilt vinden dan:

Zet dit bovenin je script.
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

// rest
?>

Reageren