2012-08-25 64 views
0

我想在單擊提交按鈕後記住特定輸入的值?目的是,如果在用戶註冊一個帳戶,並遇到像電子郵件存在的錯誤或密碼不匹配我想保留的值,如名稱,年齡等的時刻這裏是我的代碼,我該怎麼辦?任何幫助或建議?謝謝我想記住提交按鈕被點擊後的特定輸入的值?

<?php 
     session_start(); 
     $errflag = false; 
     $errmsg = array(); 
     if(isset($_SESSION['errmsg'])&&is_array($_SESSION['errmsg'])&&count($_SESSION['errmsg'])>0){ 
      foreach($_SESSION['errmsg'] as $msg){ 
       echo $msg; 
      } 
      unset($_SESSION['errmsg']); 
     } 
     ?> 
     <form method="post"> 
      <table> 
      <tr> 
       <td>Last Name:</td><td><input id="txtfield" type="text" name="lname" autofocus="autofocus" required="required"></td> 
      </tr> 
      <tr> 
       <td>First Name:</td><td><input id="txtfield" type="text" name="fname" required="required"></td> 
      </tr> 
      <tr> 
       <td>E-mail:</td><td><input id="txtfield" type="email" name="email" required="required"></td> 
      </tr> 
      <tr> 
       <td>Password:</td><td><input id="txtfield" type="password" name="pass" pattern=".{6,}" required="required"></td> 
      </tr> 
      <tr> 
       <td>Re-type:</td><td><input id="txtfield" type="password" name="rpass" pattern=".{6,}" required="required"></td> 
      </tr> 
      <tr> 
       <td></td><td><input id="btn" type="submit" name="register" value="Register"></td> 
      </tr> 
      </table> 
     </form> 
     <?php 
     include 'functions/functions.php'; 
     if(isset($_POST['register'])){ 
      $result=ValidateEmail($_POST['email']); 
      if($result){ 
       $errmsg[] = '<p id="error"><img src="img/error.png" alt="error">This email address is already in use.</p>'; 
       $errflag = true; 
      } 
      if($_POST['pass']!=$_POST['rpass']){ 
       $errmsg[] = '<p id="error"><img src="img/error.png" alt="error">Passwords does not match.</p>'; 
       $errflag = true; 
      } 
      if($errflag){ 
       session_regenerate_id(); 
       $_SESSION['errmsg'] = $errmsg; 
       session_write_close(); 
       $errflag = false; 
       header('location: register.php'); 
       exit(); 
      } 
      else { 
       $user = array('lname'=>$_POST['lname'],'fname'=>$_POST['fname'],'email'=>$_POST['email'],'pass'=>$_POST['pass']); 
       RegisterUser($user); 
       session_regenerate_id(); 
       $errmsg[] = '<p id="success"><img src="img/success.png" alt="success">Your account is now active. You may now login.</p>'; 
       $_SESSION['errmsg'] = $errmsg; 
       session_write_close(); 
       header('location: index.php'); 
       exit(); 
      } 
     } 
     ?> 
+0

是,如下回答說,其最好送一個AJAX請求將返回某種驗證。不需要「記住」值,因爲您不會更改頁面,而是通過AJAX向另一個頁面發送請求,如果響應爲真(或任何您想驗證的值),則可以繼續。 –

+0

任何樣本或鏈接,因爲我不熟悉阿賈克斯:( –

+0

@SuiGo已在下面的答案中添加了一個例子,基本指南阿賈克斯。 – amitchhajer

回答

0
<form method="post"> 
    <input id="txtfield" type="text" name="lname" autofocus="autofocus" required="required" Value=<?php $lname ?>/> 

已經回發到同一頁。你現在可以做的是類似於:

$lname = ""; //and all the other fields 
$fname = ""; 
if ($_POST['lname'] == "") 
{ 
    $fname = $_POST['fname'];//and all the other fields 
    //put all the variables back into the form and display an error text 
} 
else 
{ 
    //Lets do the whole form processing and submit here 
} 

換句話說,使用空白變量設置您的輸入字段的所有值。如果發生錯誤,請將所有這些變量設置爲其原始值。

+0

我現在明白了,謝謝它的作品 –

+0

我很高興我會LD幫助:) –

1

使用ajax/javascript檢查密碼是否匹配或用戶名已存在。這樣你就可以在不改變頁面的情況下查詢數據庫。

所以你有填充字段留在那裏。 這裏的小example在W3School

+0

有沒有使用另一種方法任何ajax/js?只是純粹的php ^^謝謝! –

+0

你可以使用Sessions,但是這是非常不推薦的。另一種方法是將提交重定向到所有post變量的同一頁面,如果驗證失敗,把所有的後期變量放回到表格中 –

+0

是回到同一頁面,是另一個更清潔的解決方案,並檢查var的 – amitchhajer

0

根據我的理解,您希望提交的變量在錯誤或缺少提交的情況下再次出現在表單中。

替換該HTML代碼,它應該這樣做:

<form method="post"> 
     <table> 
     <tr> 
      <td>Last Name:</td><td><input id="txtfield" type="text" name="lname" value="<?=$_POST['lname'];?>" autofocus="autofocus" required="required"></td> 
     </tr> 
     <tr> 
      <td>First Name:</td><td><input id="txtfield" type="text" name="fname" value="<?=$_POST['fname'];?>" required="required"></td> 
     </tr> 
     <tr> 
      <td>E-mail:</td><td><input id="txtfield" type="email" name="email" value="<?=$_POST['email'];?>" required="required"></td> 
     </tr> 
     <tr> 
      <td>Password:</td><td><input id="txtfield" type="password" name="pass" pattern=".{6,}" required="required"></td> 
     </tr> 
     <tr> 
      <td>Re-type:</td><td><input id="txtfield" type="password" name="rpass" pattern=".{6,}" required="required"></td> 
     </tr> 
     <tr> 
      <td></td><td><input id="btn" type="submit" name="register" value="Register"></td> 
     </tr> 
     </table> 
    </form> 
+0

爲什麼這不起作用?在文本框中顯示<?= $ _ POST ['lname'];?> –

+0

在我看來你使用的是localhost。用下面的代碼替換這些值:<?php echo $ _POST ['lname'];?>,<?php echo $ _POST ['fname'];?>,<?php echo $ _POST ['email'];?> – user1494855

+0

是的,它仍然表示未定義的索引.. :( –

相關問題