2012-06-27 230 views
1

我制作了注册表格,您必须输入所有个人信息。 现在,当您提交并且出现一些错误时,它会将所有表单都清空,因此您必须重新填充所有内容。我如何防止这种情况发生并让所有事物都保持在原来的位置(除密码也许)验证后PHP表格为空

这是我的代码:

<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"); 
?> 

提前感谢!

+0

您没有任何这些字段的“价值” – jprofitt

+0

请尝试JavaScript它会帮助您验证页面 – Jalpesh

回答

4

可以呼应贴值,如:

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

这样做与其他输入。

+0

这确实有窍门!谢谢! –

2

您必须将值从表单动作传递回页面。

一旦它们在页面上可用,就会将它们设置为值。例如:

在你的PHP这是做验证,设置

$emailEntered = $_POST['email']; 
在窗体

然后,回显值:

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

您必须设置字段的值用户输入的值,所以像

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

而不是要回history.go(-1)(如果你的用户不使用javascript,你将不会再生成包含表单的页面,也就是说,将HTML代码放在一个名为form.php的文件中,并在出错时包含该文件:

include ('form.php'); 

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

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

而且,在你的表格,请执行以下操作:

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

这样,你会得到以前的值,如果有的话。请注意0​​。这可能不足以防止SQL注入。由于您使用的是MySQL,因此请使用mysql_real_escape_string

0

浏览器不保存您的数据,因此您需要再次输入收到的数据。

<?php 
$email = isset($_POST['email']) ? $_POST['email'] : ''; 
?> 
<td><input type="text" ... name="email" value="<?php echo $email; ?>"></td> 

你可以做得更复杂,但我希望你能明白。 不要忘记从$ _POST接收卫生值!

0

您可以使用会话变量:在页面

<?php 
session_start(); 

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

的beggining形式

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

同所有

,然后$查询之前

$_SESSION["achternaam"] = $achternaam; 

在年底如果成功,你必须重置变量

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

而是经过一些服务器端错误重装值,你可以使用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

我不确定这会适用于您,但通常我的表单的操作位于同一页面上,所以当出现错误时,我会将值回送到值属性中。因为这不是你的情况,你可以改变行动,在同一页面,而做这样的事情在页面:

<?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. 
} 
?> 

设定值:

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

或者,它可能会因工作在你的配置:

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

这将是S和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>