2012-06-12 31 views
0

我有一個形式與各種fiedls(姓名,電子郵件,密碼等..)。它也有一套5個複選框。由於我必須更新數據庫,我更喜歡做服務器端驗證,我使用的是PHP。如何在php中進行服務器端驗證後保留複選框的狀態?

如果發生驗證錯誤,錯誤將顯示在頁面的頂部,以及表單和先前輸入的文本字段中的數據。我無法保留複選框和單選按鈕的狀態。全部恢復爲未被選中。我該怎麼做才能保持複選框和單選按鈕的狀態?

的形式看起來像..:

Password:<input type="text" name="password" size="16" maxlength="9" value="<?php echo $_POST['password']?>"/> 
    Retype Password:<input type="text" name="repassword" value="<?php echo $_POST['repassword']?>"/> 
    Select:<br /> 
    <input type="checkbox" name="option1" value="on1" id="opt1"/> <label for="opt1">Option1</label><br /> 
    <input type="checkbox" name="option2" value="on2" id="opt2"/> <label for="opt2">Option2</label><br /> 
    <input type="checkbox" name="option3" value="on3" id="opt3"/> <label for="opt3">Option3</label><br /> 
    <input type="checkbox" name="option4" value="on4" id="opt4"/> <label for="opt4">Option4</label><br /> 
    <input type="checkbox" name="option5" value="on5" id="opt5"/> <label for="opt5">Option5</label><br /> 
    Mobile No:<input type="text" name="mobileno" maxlength="10" value="<?php echo $_POST['mobileno']?>"/> 

回答

1

你在說什麼是粘滯形式。你可以用很多方式實現粘性表單,我的選擇是使用會話。如果驗證中存在錯誤,只需將POST數據中的所有內容轉儲到會話中即可。在你的表單頁面,檢查是否該值在會話中設置和設置窗體控件的默認值,如果它是:

驗證頁:

<?php 
    session_start(); 
    if(/** some error condition **/) { 
     foreach($_POST as $k => $v) 
      $_SESSION['sticky_'.$k] = $v; 

     header('Location: http://site.com/yourform.php'); 
     exit(); 
    } 
?> 

窗體頁:

<?php session_start(); ?> 

<input type = "checkbox" name = "option1" value = "on1" id = "opt1" <?php 
    if(isset($_SESSION['sticky_option1'])) 
     echo('checked = "checked"); 
?>/> 

Example TextBox: <input type = "text" name = "textBoxName" <?php 
    if(isset($_SESSION['sticky_textBoxName'])) 
     echo('value = "' . $_SESSION['sticky_textBoxName'] . '"'); 
?> 

... 

<?php 
    // Erase the POST values from session after the HTML is constructed. 
    foreach($_SESSION as $k => $v) 
     if(strpos($k, 'sticky_' !== false) 
      unset($_SESSION[$k]); 
?> 
0

添加checked屬性複選框任誰的值是在提交的數據。

+0

如果我這樣做,重置按鈕將無法改變這些複選框的狀態。 –

相關問題