2012-06-27 4 views
1

J'ai fait un formulaire d'enregistrement où vous devez mettre toutes vos informations personnelles. Maintenant, lorsque vous soumettez et que vous obtenez des erreurs, tous les formulaires sont vides, vous devez donc tout remplir à nouveau. Comment puis-je empêcher cela et laisser tout rester là où il se trouvait? (Sauf le mot de passe peut-être)Formulaire PHP vide après validation

Voici mon code:

<html> 
<head> 
    <title>Westpop</title> 
    <link rel="stylesheet" href="opmaak.css"> 
</head> 
<body> 
<fblack> 
<div id="header"><a href="Index.php"></a></div> 

<div id="registreer"> 
<table cellpadding="5" align="center"> 
<th colspan="2" align="left">Registeren</th> 
<form name="registreren" method="post" action="registreer.php"> 
<tr> 
    <td><fblackbold>Inloggegevens:<fblackbold></td> 
</tr> 

<tr> 
    <td>Email</td> 
    <td><input type="text" size="50" placeholder="[email protected]" name="email"></td> 
</tr> 
<tr> 
    <td>Wachtwoord</td> 
    <td><input type="password" size="50" placeholder="min. 8 tekens, 1 hoofdletter, 1 cijfer" name="wachtwoord"></td> 
</tr> 
<tr> 
    <td><fblackbold>Persoonlijke gegevens:<fblackbold></td> 
</tr> 
<tr> 
    <td>Voornaam</td> 
    <td><input type="text" size="50" placeholder="" name="voornaam" ></td> 
</tr> 
<tr> 
    <td>Achternaam</td> 
    <td><input type="text" size="50" placeholder="" name="achternaam"></td> 
</tr> 
<tr> 
    <td>Geboorte Datum</td> 
    <td><input type="hidden" size="8" name="action" value="submitform" /> 
    <input type="text" size="50" placeholder="jjjj-mm-dd" name="geboortedatum"></td> 

</tr> 
<tr> 
    <td>Geslacht</td> 
    <td>M<input type="radio" size="50" value="m" name="geslacht"> 
    V<input type="radio" size="50" value="v" name="geslacht"></td> 

</tr> 
<tr> 
    <td>Adres</td> 
    <td><input type="text" size="50" placeholder="Straat 00" name="adres"></td> 
</tr> 
<tr> 
    <td>Woonplaats</td> 
    <td><input type="text" size="50" placeholder="" name="woonplaats"></td> 
</tr> 

<tr> 
    <td>Telefoonnummer</td> 
    <td><input type="text" size="50" placeholder="min. 9 tekens" name="telefoonnummer"></td> 
</tr> 
<tr> 
    <td>Functie</td> 
    <td><select name="functie"> 
<option value="catering">Catering</option> 
<option value="muziekpodia">Muziek en podia</option> 
<option value="vervoerovernachten">Vervoer en overnachten</option> 
<option value="logistiekbeveiliging">Logistiek en beveiliging</option> 
<option value="diversen">Diversen</option> 
</select></td> 
</tr> 
<tr align="right"> 
    <td></td> 
    <td><input type="reset" value="Wissen"><input type="submit" name="verzenden" value="Verzenden"></td> 
</tr> 
</form> 
</table> 
<?php 
if (isset($_POST['action']) && $_POST['action']=='submitform') { 


    $host = "localhost"; 
    $gebruikersnaam = "root"; 
    $wachtwoord = ""; 
    mysql_connect($host, $gebruikersnaam, $wachtwoord); 

    $demooistedatabase = "c5g4westpopintranet"; 
    mysql_select_db($demooistedatabase); 

    $achternaam = $_POST["achternaam"]; 
    $voornaam = $_POST["voornaam"]; 
    $gbdatum = $_POST["geboortedatum"]; 
    $email = $_POST["email"]; 
    $geslacht = $_POST["geslacht"]; 
    $wachtwoord = $_POST["wachtwoord"]; 
    $woonplaats = $_POST["woonplaats"]; 
    $adres = $_POST["adres"]; 
    $telefoonnummer = $_POST["telefoonnummer"]; 
    $functie = $_POST["functie"]; 


    $achternaam = stripslashes($achternaam); 
    $voornaam = stripslashes($voornaam); 
    $gbdatum = stripslashes($gbdatum); 
    $email = stripslashes($email); 
    $geslacht = stripslashes($geslacht); 
    $wachtwoord = stripslashes($wachtwoord); 
    $woonplaats = stripslashes($woonplaats); 
    $adres = stripslashes($adres); 
    $telefoonnummer = stripslashes($telefoonnummer); 
    $functie = stripslashes($functie); 


    $query ="INSERT INTO vrijwilliger (voornaam, achternaam, gbdatum, geslacht, wachtwoord, woonplaats, adres, telefoonnummer, functie, activiteitID, groepID, email) 
       VALUES('$voornaam','$achternaam','$gbdatum','$geslacht','$wachtwoord','$woonplaats','$adres','$telefoonnummer','$functie',null,null,'$email')"; 

$foutloos=true; 


if(preg_match("/^.*(?=.{8,})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$/", $wachtwoord) === 0) 
{ 
echo '<fblack>Wachtwoord moet minstens 8 tekens lang zijn, een kleine letter, grote letter en cijfer bevatten.<br><fblack>'; 
$foutloos = false; 
} 

if(preg_match("/^[0-9]{10}+$/", $telefoonnummer) === 0) 
{ 
echo '<fblack>Het telefoonnummer moet 10 cijfers bevatten.<br><fblack>'; 
$foutloos = false; 
} 


if(preg_match("/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/", $gbdatum) === 0) 
{ 
echo '<fblack>Geboorte datum moet op dit formaat ingevoerd worden: JJJJ-MM-DD<br><fblack>'; 
$foutloos = false; 
} 

if(preg_match("/^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}$/i", $email) === 0) 
{ 
echo '<fblack>Email moet hier op lijken: [email protected]<br><fblack>'; 
$foutloos = false; 
} 


if(preg_match("/^[A-Z][a-zA-Z -]+$/", $voornaam) === 0) 
{ 
echo '<fblack>Voornaam is niet geldig ingevoerd, heeft u een hoofdletter gebruikt?<br><fblack>'; 
$foutloos = false; 
} 


if(preg_match("/^[A-Z][a-zA-Z -]+$/", $achternaam) === 0) 
{ 
echo '<fblack>Achternaam is niet geldig ingevoerd, heeft u een hoofdletter gebruikt?<br><fblack>'; 
$foutloos = false; 
} 


if ($geslacht == '') 
{ 
echo '<fblack>U heeft uw geslacht niet aangegeven.<br><fblack>'; 
$foutloos = false; 
} 


if(preg_match("/^[a-zA-Z]+\ +[0-9]+$/", $adres) === 0) 
{ 
echo '<fblack>Het adres is verkeerd ingevoerd.<br><fblack>'; 
$foutloos = false; 
} 


if(preg_match("/^[a-zA-Z\s]+$/", $woonplaats) === 0) 
{ 
echo '<fblack>De woonplaats is verkeerd ingevoerd.<br><fblack>'; 
$foutloos = false; 
} 

if ($foutloos == true) 
{ 
mysql_query($query) 
or die('<fblack>U staat al in ons systeem<A HREF="javascript:javascript:history.go(-1)"><br><br>Klik hier om terug te gaan</A><fblack>'); 
echo "<fblack>Uw registratie is succesvol verwerkt!<br>Log <a href='login.php' MEDIA=screen>hier</a> in<fblack>"; 
} 
} 
?> 
</div> 
<?php 
include ("html_end.php"); 
?> 

Merci à l'avance!

+0

Vous n'avez pas de «valeur» sur l'un de ces champs – jprofitt

+0

s'il vous plaît essayer le javascript, il vous aidera dans la validation de la page – Jalpesh

Répondre

4

Vous pouvez faire écho la valeur affichée comme:

<input type="text" size="50" placeholder="[email protected]" name="email" value="<?php echo isset($_POST['email']) ? $_POST['email'] : ''; ?>"> 

Faites la même chose avec d'autres entrées.

+0

Cela a fait l'affaire! Je vous remercie! –

2

Vous devez renvoyer les valeurs à la page à partir de votre action de formulaire. Une fois qu'ils sont disponibles sur la page, vous devez les définir comme valeurs. Par exemple:

Dans votre PHP qui est en train de faire la validation, mis

$emailEntered = $_POST['email']; 

ensuite dans votre formulaire, l'écho de la valeur:

<tr> 
    <td>Email</td> 
    <td><input type="text" size="50" placeholder="[email protected]" name="email" value="<?php echo $emailEntered; ?>"></td> 
</tr> 
0

Vous devez définir les valeurs des champs à la valeurs que l'utilisateur entre, donc quelque chose comme

<input type="text" size="50" placeholder="Straat 00" name="adres" value="<?php echo $_POST['adres']; ?>"> 
0

plutôt que de retourner à history.go(-1) (qui ne fonctionnera pas si votre utilisateur n'utilise pas javascript, vous devriez plutôt générer la page contenant le formulaire à nouveau, soit en mettant votre code HTML dans un fichier nommé form.php et en incluant ce fichier en cas de problème:

include ('form.php'); 

if (isset($_POST) { 
    deal_with_post_data(); 

    if (something_wrong()) { 
     include('form.php'); 
    } else { 
     include('proceed.php'); 
    } 
} 

Et, dans votre formulaire, procédez comme suit:

<input type="text" name="foo" value="<?php echo $_POST['foo']; ?>"/> 

de cette façon, vous obtiendrez la valeur précédente, le cas échéant. Par ailleurs, attention aux stripslashes. Cela peut ne pas suffire à empêcher l'injection SQL. Puisque vous utilisez MySQL, utilisez mysql_real_escape_string à la place.

0

Le navigateur n'enregistre pas vos données, vous devez donc remettre les données reçues à votre place. Vous pouvez faire plus complexe, mais j'espère que vous avez compris l'idée. N'oubliez pas les valeurs sanitaze que vous recevez de $ _POST!

0

vous pouvez utiliser des variables de session:

au beggining de la page

<?php 
session_start(); 

//checking if variables are setted 
if !(isset($_SESSION("achternaam")){ 
    $_SESSION["achternaam"]="" 
} 
//same for all fields 

sous forme

<td><input type="text" size="50" placeholder="" name="achternaam" value="<?php echo $_SESSION["achternaam"];?>"></td> 

même à tous

puis avant la requête $ :

$_SESSION["achternaam"] = $achternaam; 

A la fin si le succès vous devez réinitialiser les variables

$_SESSION["achternaam"] = ""; 
1

au lieu de recharger les valeurs après une erreur côté serveur, vous pouvez valider les champs côté client en utilisant javascript

// HTML

// the submit button on page 
<input type="submit" name="verzenden" id= 'verzenden' value="verzenden" onclick='return validate();' /> 

// javascript

<script type='text/javascript'> 
    function validate() 
    { 
    // check for all the text fields if they are null 
    var fname= document.getElementById('firstname'); 
    var lname= document.getElementById('lastname'); 

    if(fname.value == '') 
    { 
    // if the field is null it does not submit page and focus() function means 
    // cursor will be in that textbox 
     alert('Please enter first name'); 
     fname.focus(); 
     return false; 

    } 

    } 
</script> 
0

Je ne suis pas sûr que cela fonctionnera pour vous, mais généralement l'action de mon formulaire était sur la même page, donc quand il y avait une erreur, je renvoyais les valeurs dans les attributs de valeurs. Étant donné que ce n'est pas votre cas, vous pouvez modifier l'action à la même page, et faire quelque chose comme ça dans cette page:

<?php 
if (sizeof($_POST)) { 
    require 'the_action_you_have_now.php'; 
    // If it succeeds, it would redirect to another page and exit, otherwise, just continue, and set a variable with a message that says there's an error. 
} 
?> 

Pour définir des valeurs:

value="<?php print (isset($_POST['email']) ? $_POST['email'] : '');?> 

Ou, il pourrait fonctionner selon sur votre config:

value="<?=(isset($_POST['email']) ? $_POST['email'] : '')?> 

Ce sera différent pour s et s:

<textarea><?php print htmlentities($_POST['comment']); ?></textarea> 

<select> 
<?php 
foreach ($options as $value => $text) { 
    $selected = ($_POST['the_select'] == $value)? "selected='selected'" : ""; 
    print "<option value='$value' $selected>$text</option>"; 
} 
?> 
</select> 
Questions connexes