2014-10-01 115 views
2

我正在用一個下拉菜單和一個文本字段創建一個非常簡單的表單。 如果表單在提交期間有空字段,則顯示錯誤。如何在提交表單後保留下拉菜單選定值?

我想在表單提交後顯示填充值,如果有任何錯誤。 它正如我所料在文本字段上工作。 例如:如果填寫name並提交表格而未填寫title下拉菜單,則會顯示在錯誤期間在該字段上鍵入的名稱。

但我怎樣才能做到這一點下拉菜單嗎? 例如:如果我選擇title下拉菜單並提交表格而未填寫name字段,則應在出現錯誤期間顯示選定的title下拉值。

我該怎麼做? 這裏是我的代碼,它是一個WordPress的網站:

<?PHP 
$errors = array(); 
    if($_POST["submit"]) { 
     $name_title = $_POST["name_title"]; 
     $sender = $_POST["sendername"]; 

     //Check the name title that it is selected or none. 
       if($name_title === none){ 
        //if selected is none, add error to $errors array.   
        $errors['name_title'] = "Please select the title of your name!"; 
       } 

     if(empty($sender)){ 
      //Blank string, add error to $errors array.   
      $errors['sendername'] = "Please enter your name!"; 
     } 

     // sending form 
     if(empty($errors)){ 
      $mail_sent = wp_mail($to, $subject, $mailBody, $headers); 
     }  

    } 
    if ($mail_sent) { 
?> 

<h1 style="color: #007f00;">Request sent.</h1> 

<?php 
} else { 
?> 

<form id="" name="" action="<?php echo get_permalink(); ?>" method="post"> 
    <div class="label-input-wrapper"> 
     <div class="form-label">Title</div> 
     <div class="form-input"> 
      <select name="name_title" class="name-title-input">     
       <option value="none" selected="selected">Select Title</option> 
       <option value="Mr">Mr</option> 
       <option value="Mrs">Mrs</option> 
       <option value="Miss">Miss</option> 
       <option value="4">Ms</option>     
      </select> 
      <div class="error-msg"> 
       <?php if(isset($errors['name_title'])) { echo '<span style="color: red">'.$errors['name_title'].'</span>'; } ?> 
      </div> 
     </div> 
    </div> 

    <div class="label-input-wrapper"> 
     <div class="form-label">Name</div> 
     <div class="form-input"> 
      <input type="text" name="sendername" value="<?PHP if(!empty($errors)) { echo $sender;} ?>" /> 
      <div class="error-msg"> 
       <?php if(isset($errors['sendername'])) { echo '<span style="color: red">'.$errors['sendername'].'</span>'; } ?> 
      </div> 
     </div> 
    </div> 
    <input type="submit" value="Submit" name="submit"> 
</form> 

<?php 
} 
?> 
+0

如果我無法歸檔我期望的結果,我在這裏提問。這是因爲可能是我在這個領域的能力有限。因此,當任何GENIUS'DOWN VOTE'的問題請告訴我,原因至少是爲什麼... – 2014-10-01 10:31:52

+0

在開始生產之前,請確保您在HTML回顯之前轉義$ sender變量。否則,您的網站將容易受到XSS的影響。在這裏閱讀更多:https://www.owasp.org/index.php/Cross-site_Scripting_(XSS) P.S.不,我不是那個倒票的人:) – Qwerty 2014-10-01 10:35:55

回答

3

雖然@CKocer答案也能正常工作,但我喜歡使用變量,而不是在HTML中使用$ _ POST,也更易讀

在聲明$name_titleif($_POST)側,可以像下面這樣做<?php $name_title = ''; ?>

對於這樣

<select name="name_title" class="name-title-input">     
       <option value="none" selected="selected">Select Title</option> 
       <option value="Mr" <?php if($name_title == 'Mr') { ?> selected <?php } ?>>Mr</option> 
       <option value="Mrs" <?php if($name_title == 'Mrs') { ?> selected <?php } ?>>Mrs</option> 
       <option value="Miss" <?php if($name_title == 'Miss') { ?> selected <?php } 
?>>Miss</option> 
       <option value="4" <?php if($name_title == 'Ms') { ?>selected <?php } ?>>Ms</option>     
      </select> 
+0

這是正確的,你可以將<?php替換爲<?如果short_open_tag處於活動狀態。 (默認情況下它是活動的。) – cKNet 2014-10-01 10:44:37

+2

@CKocer在之前的版本中,它被禁用了,所以我更喜歡使用標準標籤。 – 2014-10-01 10:46:21

+1

幾年前,我讀過一篇關於<?php和<?的文章。他們在說<?比<?php更快。這就是爲什麼我更喜歡使用短標籤。 – cKNet 2014-10-01 10:48:10

2

試試這個。

<select name="name_title" class="name-title-input">     
       <option value="none" selected="selected">Select Title</option> 
       <option value="Mr" <? if(@$_POST['name_title'] == 'Mr') { echo 'selected = \"selected\"'; } ?>>Mr</option> 
       <option value="Mrs" <? if(@$_POST['name_title'] == 'Mrs') { echo 'selected = \"selected\"'; } ?>>Mrs</option> 
       <option value="Miss" <? if(@$_POST['name_title'] == 'Miss') { echo 'selected = \"selected\"'; } ?>>Miss</option> 
       <option value="4" <? if(@$_POST['name_title'] == 'Ms') { echo 'selected = \"selected\"'; } ?>>Ms</option>     
      </select> 
+0

你應該從第一個選項(無)中刪除selected =「selected」。 – Qwerty 2014-10-01 10:37:17

+0

謝謝你..但我認爲這是代碼中的語法錯誤。 – 2014-10-01 10:37:19

+0

@RiffazStarr我編輯了答案。對於語法錯誤感到抱歉。 – cKNet 2014-10-01 10:45:23

1

我要借用@ ThinkingWeb的代碼,並把它打掃乾淨下拉代碼變更提高一點。 HTML標籤的一個重要特性就是可以對它們進行換行,這使得代碼更具可讀性。這裏每個if說法都有自己的行:

<select name="name_title" class="name-title-input">     
    <option value="none" 
     >Select Title</option> 
    <option value="Mr" 
     <?php if($name_title == 'Mr'): ?> selected="selected" <?php endif ?> 
     >Mr</option> 
    <option value="Mrs" 
     <?php if($name_title == 'Mrs'): ?> selected="selected" <?php endif ?> 
     >Mrs</option> 
    <option value="Miss" 
     <?php if($name_title == 'Miss'): ?> selected="selected" <?php endif ?> 
     >Miss</option> 
    <option value="4" 
     <?php if($name_title == 'Ms'): ?> selected="selected" <?php endif ?> 
     >Ms</option>     
</select> 

我已經下降在第一個選項中selected="selected" - 如果沒有明確的選擇,這將自動選擇,而你不想不止一個!我已將所有選擇切換爲使用attribute="value"格式,但我認爲這不是HTML的強制性要求。

我也使用了if語句的冒號形式 - 對於HTML,我發現它更適合使用大括號方法。

相關問題