2011-01-27 168 views
0

我正在使用表單使用流程頁面來驗證並處理所有信息。如果出現錯誤或缺少信息,則會通知用戶返回並修復該頁面。但是,當他們這樣做時,他們所輸入的所有其他信息並未顯示在字段中。我怎樣才能做到這一點,因此無論他們投入什麼都會顯示。記住輸入歷史記錄

回答

2

,最好的辦法是做在同一頁上驗證,只有重定向到另一個頁面時成功:

<?php 
    if (!empty($_POST['foo'])) { 
     // validate 
     if (/* valid */) { 
      // save data somewhere 
      header('Location: nextpage.php'); 
      exit(); 
     } 
    } 
?> 

<form action="samepage.php"> 
    <input name="foo" type="text" value="<?php if (!empty($_POST['foo'])) echo htmlentities($_POST['foo']); ?>"> 
    <?php if (/* foo was invalid */) : ?> 
     <p class="error">Please fill in Foo!</p> 
    <?php endif; ?> 
</form> 

或者:使用會話。

+0

我很抱歉,我是PHP新手,第一個PHP代碼在做什麼? – AAA 2011-01-27 06:30:05

+1

@AAA它說:「如果數據已發佈(即如果表單已提交),請進行驗證,如果數據有效,請將其保存在某處並重定向到另一頁。」 – deceze 2011-01-27 06:31:53

1

使在同一頁面驗證用JavaScript或AJAX(如果你需要在服務器端檢查)

那麼你就不會丟失任何數據

,你可以在網上很多例子找到(尋找與AJAX表單驗證)

喜歡這篇文章:http://jqueryfordesigners.com/demo/ajax-validation.php

+0

謝謝Haim。仍在學習PHP,對Ajax不夠精通! – AAA 2011-01-27 06:29:38

3

一個簡單的解決方案就是將所有POST數據存儲在SESSION中併發布。

if($_POST){ // if we have any POSTed variables... 
    $_SESSION['postdata'] = $_POST; // set a browser session with all of the values 
} 

然後,在您的表單頁上,檢查postdata是否存在,如果是,請填寫輸入值。

if($_SESSION['postdata']){ // if postdata exists 
    $p = $_SESSION['postdata']; // retrieve values in a new variable 
    unset($_SESSION['postdata']); // unset session, because you don't want this post data to travel all around your website 
    /* for each input or whatever you got there... */ 
    echo '<input name="your-key-here" type="text" value="'. $p['your-key-here'] .'" />'; 
} 

就是這樣!玩的開心!