1

すべての個人情報を入力する必要がある登録フォームを作成しました。送信時にエラーが発生すると、すべてのフォームが空になるため、すべてを再度入力する必要があります。これを防ぎ、すべてを元の状態に保つにはどうすればよいですか? (おそらくパスワードを除く)

これは私のコードです:

<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@provider.com" 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@provider.com<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");
?>

前もって感謝します!

4

8 に答える 8

4

次のように投稿された値をエコーできます。

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

他の入力についても同じことを行います。

于 2012-06-27T12:26:44.540 に答える
2

フォーム アクションから値をページに戻す必要があります。

それらがページで使用可能になったら、それらを値として設定します。例えば:

検証を行っているPHPで、設定します

$emailEntered = $_POST['email'];

次に、フォームで値をエコーし​​ます。

<tr>
    <td>Email</td>
    <td><input type="text" size="50" placeholder="email@provider.com" name="email" value="<?php echo $emailEntered; ?>"></td>
</tr>
于 2012-06-27T12:27:15.870 に答える
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>
于 2012-06-27T12:32:39.363 に答える
0

フィールドの値をユーザーが入力した値に設定する必要があるため、次のようになります。

<input type="text" size="50" placeholder="Straat 00" name="adres" value="<?php echo $_POST['adres']; ?>">
于 2012-06-27T12:27:32.030 に答える
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']; ?>"/>

そうすれば、前の値があればそれを取得できます。

ちなみに、に注意してくださいstripslashes。SQLインジェクションを防ぐのに十分ではないかもしれません。MySQLを使用しているので、mysql_real_escape_string代わりに使用してください。

于 2012-06-27T12:28:25.833 に答える
0

ブラウザはデータを保存しないので、受信したデータを自分で入れ直す必要があります。

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

もっと複雑なこともできますが、アイデアが得られることを願っています。$_POST から受け取った値をサニタイズすることを忘れないでください!

于 2012-06-27T12:29:34.727 に答える
0

セッション変数を使用できます:

ページの先頭に

<?php
session_start();

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

形で

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

みんな同じ

そして $query の前に:

$_SESSION["achternaam"] = $achternaam;

最後に成功した場合は、変数をリセットする必要があります

$_SESSION["achternaam"] = "";
于 2012-06-27T12:31:29.283 に答える
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>
于 2012-06-27T12:33:40.593 に答える