Ik heb een registratieformulier gemaakt.

Kenmerken:
Controle van alle invoervelden met reguliere expressies
Wachtwoord generator
bevestigingsemail

Ik hoor graag op en aanmerkingen verbeteringen, enz.

<?php
if (!IsSet($_POST["submit"]))
{
ShowForm();
}
else
{
HandleForm();
}
function ShowForm( $voorletter="", $tussenvoegsel="", $naam="", $straat="", $huisnr="",$postcode="", $woonplaats="", $tel="", $email="", $user="", $mail_list="")
{//Toon het formulier met eventueel de ingevulde waarden
echo "<table>";
echo "<form action=\"$_SERVER[PHP_SELF]\" method=\"post\">";
echo "<tr><td>Voorletters (max3)</td><td><input type=\"text\" name=\"voorletter\" value=\"$voorletter\"></td></tr>";
echo "<tr><td>Tussenvoegsel</td><td><input type=\"text\" name=\"tussenvoegsel\" value=\"$tussenvoegsel\"></td></tr>";
echo "<tr><td>Naam</td><td><input type=\"text\" name=\"naam\" value=\"$naam\"></td></tr>";
echo "<tr><td>Straat</td><td><input type=\"text\" name=\"straat\" value=\"$straat\"></td></tr>";
echo "<tr><td>Huisnr.</td><td><input type=\"text\" name=\"huisnr\" value=\"$huisnr\"></td></tr>";
echo "<tr><td>Postcode</td><td><input type=\"text\" name=\"postcode\" value=\"$postcode\"></td></tr>";
echo "<tr><td>Woonplaats</td><td><input type=\"text\" name=\"woonplaats\" value=\"$woonplaats\"></td></tr>";
echo "<tr><td>Telefoonnr.</td><td><input type=\"text\" name=\"tel\" value=\"$tel\"></td></tr>";
echo "<tr><td>Email</td><td><input type=\"text\" name=\"email\" value=\"$email\"></td></tr>";
echo "<tr><td>Gebruikersnaam</td><td><input type=\"text\" name=\"user\" value=\"$user\"></td></tr>";
echo "<tr><td>Ik wil op de mailinglist</td><td>Ja <input type=\"radio\" name=\"mail_list\" value=\"ja\"> Nee <input type=\"radio\" name=\"mail_list\" value=\"nee\"CHECKED></td></tr>";
echo "<tr><td>Druk op verzenden</td><td><input type=\"submit\" name =\"submit\" value=\"verzenden\"></td></tr>";
echo "</table>";
}
function HandleForm()
{//initialiseer foutvariabelen
$fout=FALSE;
$voorletter_fout=FALSE;
$tussenvoegsel_fout=FALSE;
$naam_fout=FALSE;
$straat_fout=FALSE;
$huisnr_fout=FALSE;
$postcode_fout=FALSE;
$woonplaats_fout=FALSE;
$tel_fout=FALSE;
$email_fout=FALSE;
$user_fout=FALSE;
$mail_list_fout=FALSE;
$user_fout=FALSE;
// Controleer of de ingevulde gegevens goed zijn
if (!ereg('^[A-Za-z.]+$', $_POST["voorletter"]))
{
$fout=TRUE;
$voorletter_fout=TRUE;
}
if (!ereg('^[A-Za-z ]*$', $_POST["tussenvoegsel"]))
{
$fout=TRUE;
$tussenvoegsel_fout= TRUE;
}
if (!ereg('^[A-Za-z. -]+$', $_POST["naam"]))
{
$fout=TRUE;
$naam_fout= TRUE;
}
if (!ereg('^[A-Za-z1-9 ]+[a-z]*', $_POST["straat"]))
{
$fout=TRUE;
$straat_fout= TRUE;
}
if (!ereg('^[0-9]+[A-Za-z]*', $_POST["huisnr"]))
{
$fout=TRUE;
$huisnr_fout= TRUE;
}
if (!ereg('^([0-9]{4})([[:space:]]?)([A-Z]{2})$', $_POST["postcode"]))
{
$fout=TRUE;
$postcode_fout= TRUE;
}
if (!ereg('^[A-Za-z ]+$', $_POST["woonplaats"]))
{
$fout=TRUE;
$woonplaats_fout= TRUE;
}
if (!ereg('^[0-9]{10}$', $_POST["tel"]))
{
$fout=TRUE;
$tel_fout= TRUE;
}
if (!ereg('^([0-9a-z]+)([0-9a-z\.-_]+)([@]+)([0-9a-z\.-_]+)\.([0-9a-z]+)', $_POST["email"]))
{
$fout=TRUE;
$email_fout= TRUE;
}
if (!ereg('^[A-Za-z0-9]+$', $_POST["user"]))
{
$fout=TRUE;
$user_fout= TRUE;
}
if (!ereg('^[a-z]{2,3}$', $_POST["mail_list"]))
{
$fout=TRUE;
$mail_list_fout= TRUE;
}
//controle of gebruikersnaam al bestaat
require_once('ooievaar.php');

$sql= "SELECT user FROM Klanten";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result))
{
if ($row["user"]==$_POST["user"])
{
$fout=TRUE;
$username_fout=TRUE;
}
}
mysql_close($db);

if ($fout)
{
//Toon de fout ingevulde waarden
echo ( $fout ? "<li/>Er is een fout opgetreden" : "");
echo ($voorletter_fout ? "<li/>Ongeldige voorletters" : "");
echo ($tussenvoegsel_fout ? "<li/>Ongeldig tussenvoegsel" : "");
echo ($naam_fout ? "<li/>Ongeldige naam" : "");
echo ($straat_fout ? "<li/>Ongeldige straatnaam" : "");
echo ($huisnr_fout ? "<li/>Ongeldige huisnr" : "");
echo ($postcode_fout ? "<li/>Ongeldige postcode" : "");
echo ($woonplaats_fout ? "<li/>Ongeldige woonplaats" : "");
echo ($postcode_fout ? "<li/>Ongeldige tel.nr" : "");
echo ($email_fout ? "<li/>Ongeldige email" : "");
echo ($tel_fout ? "<li/>Ongeldige telefoonnr." : "");
echo ($user_fout ? "<li/>Ongeldige gebruikersnaam" : "");
echo ($username_fout ? "<li/>Deze gebruikersnaam wordt al gebruikt" : "");
ShowForm($_POST['voorletter'], $_POST['tussenvoegsel'], $_POST['naam'], $_POST['straat'],$_POST['huisnr'], $_POST['postcode'],$_POST['woonplaats'], $_POST['tel'], $_POST['email'], $_POST['user']);
}
else//als alles goed is stuur naar database
{
upload();
}
}
function upload()
{// Wachtwoord generator vi password()
$wachtwoord=password();
$ww=md5($wachtwoord);
$voorletter= $_POST["voorletter"];
$tussenvoegsel=$_POST["tussenvoegsel"];
$naam= $_POST["naam"];
$straat= $_POST["straat"];
$huisnr=$_POST["huisnr"];
$postcode= $_POST["postcode"];
$woonplaats= $_POST["woonplaats"];
$tel= $_POST["tel"];
$email= $_POST["email"];
$user= $_POST["user"];
$mail_list=$_POST["mail_list"];
//maak verbinding
require_once('ooievaar.php');
////Schrijf gegevens naar database
$sql = "INSERT INTO Klanten (voorletter, tussenvoegsel, naam, straat,huisnr, postcode, woonplaats, tel, email, user, mail_list, wachtwoord) VALUES ('$voorletter','$tussenvoegsel',' $naam','$straat','$huisnr', '$postcode', ' $woonplaats', '$tel', '$email', '$user','$mail_list', '$ww')";
if (!mysql_query($sql))
{
//Als schrijven naar database is mislukt
echo "Het opsturen van uw gegevens is mislukt";
}
else //Schrijven naar database is gelukt stuur een email ter bevestiging
{
$onderwerp = "Registratie OOIEVAARSSERVICE.nl\n";
$bericht = "U heeft bij Ooievaarsservice.nl geregistreerd.\n
Uw usernaam = "."$user"."\n
Uw wachtwoord = "."$wachtwoord";
$mail = mail($_POST['email'], $onderwerp, $bericht, "FROM:[email protected] \r\n");
if($mail)
echo("Email succesvol verzonden!");
else
echo("Emailen mislukt!");
}
mysql_close($db);
}
//De wachtwoordgenerator
function password()
{
$Password='';
mt_srand((double)microtime()*1000000);
$Password.=substr("bcdfghjklmnpqrstvwxz",mt_rand(0,18),1);
$Password.=substr("aeuy",mt_rand(0,3),1);
$Password.=substr("bcdfghjklmnpqrstvwxz",mt_rand(0,18),1);
$Password.=substr("!#*&",mt_rand(0,4),1);
$Password.=substr("bcdfghjklmnpqrstvwxz",mt_rand(0,18),1);
$Password.=substr("aeuy",mt_rand(0,3),1);
$Password.=substr("bcdfghjklmnpqrstvwxz",mt_rand(0,18),1);
$Password.=substr("23456789",mt_rand(0,7),1);
return $Password;
}
?>
Iets wat mij opvalt en wat ik ook met schade en schande heb moeten leren is het plaatsen van het = teken.

Zet dit nergens aan vast omdat dit dan (is mij verteld) letterlijk eraan vast zit en dus als waar wordt meegenomen.

Voorbeeld:
<?php
$fout=FALSE;
?>

Ik zou erdan van maken:
<?php
$fout = FALSE;
?>
Die function password, kan veel korter. Je hebt 4 keer deze string:
bcdfghjklmnpqrstvwxz

en 2 keer deze:
aeuy

Probeer het eens met deze in een variabele te zetten, en de lengte te bepalen. Dan kan iedereen de gebruikte strings zo aanpassen.

Ik vind iets als dit trouwens veel mooier:
<?php
$tekens=range('a'-'z');
$tekens.=range(0-9)
$tekens.=range('Z'-'A');

$tekens=shuffle($tekens);
$pass="";
for($i=0;$i<8;$i++){
$pass.=$tekens[$i];
}
/* altijd een password van 8 willekeurige tekens. ook acht verschillende, en het kunnen hoofdletters, kleine letters of cijfers zijn.
Ik ben er geen fan van dat er tekens als #, & enz in wachtwoorden worden gebruikt.
*/
echo $pass;
?>
Eventueel een rand erbij gebruiken.
@lissy
dank je voor de input
Ik ben er nog niet tegenaan gelopen.
Misschien omdat ik een editor gebruik met kleuren.
Mijn gevoel zegtr me namelijk dat ik wel eens een = teken heb moeten loshalen met een space.
Maar als je ziet dat de kleur niet goed is en je doet er een spatie tussen, en hij is weer wel goed gaat het eigenlijk zonder dat je er bij stistaat.
Maar ik ga er zeker op letten.

Trouwens ik vind het meestal overzichtelijker staan om ze even los te halen, maar in de hitte van de strijd vergeet je weleens wat hé.
lissy schreef op 21.01.2006 15:48
Zet dit nergens aan vast omdat dit dan (is mij verteld) letterlijk eraan vast zit en dus als waar wordt meegenomen.


Heb ik nog nooit van gehoord en ook nog nooit last van gehad. Het enige is dat het wat duidelijker/makkelijker is te lezen.
@Robert

Bedankt, is zeker een stuk sneller programmeren.
Een enkel speciaal teken vind ik niet zo'n punt.
SanThe schreef op 21.01.2006 16:02
[quote=lissy schreef op 21.01.2006 15:48]Zet dit nergens aan vast omdat dit dan (is mij verteld) letterlijk eraan vast zit en dus als waar wordt meegenomen.


Heb ik nog nooit van gehoord en ook nog nooit last van gehad. Het enige is dat het wat duidelijker/makkelijker is te lezen.[/quote]

Tja... soms onthoud ik wel is wat en echt dit is me verteld.... :-P
Robert schreef op 21.01.2006 15:54
Ik vind iets als dit trouwens veel mooier:
<?php
$tekens=range('a'-'z');
$tekens.=range(0-9)
$tekens.=range('Z'-'A');
?>


Dat mag zo niet hoor. range () geeft een array terug en die kun je niet met . aan elkaar rijgen. Dit moet met array_merge ()
lissy schreef op 21.01.2006 16:06
Tja... soms onthoud ik wel is wat en echt dit is me verteld.... :-P


Het is ook zeker een goede tip. Alleen ik ben het oneens met de 'aan jou vertelde' reden.
Ik zet standaard spaties om het = teken, voor de leesbaarheid.

@Lissy: net deze even getest:

<?php
$fout=false;
echo $fout;
?>

geeft gewoon een leeg scherm. Als hij hem true zou maken zou er 1 moeten verschijnen.
Volgens nl.php.net moet er een , in plaats van een - gebruikt worden bij range()
$array = range('a', 'z');

Reageren