2014-10-01 6 views
2

Я создаю очень простую форму с выпадающим меню и текстом. Он показывает ошибки, если форма имеет пустое поле во время отправки.Как сохранить выбранное значение выпадающего меню после отправки формы?

Я хочу показать заполненные значения после отправки формы, если есть какая-либо ошибка. Он работает в текстовом поле, как я и ожидал. Ex: Если заполните name и отправьте форму без заполнения раскрывающегося меню title, оно отображает имя, которое я напечатал на поданной во время ошибки.

Но как я могу это сделать для выпадающего меню? Ex: Если я выберу выпадающее меню 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', пожалуйста, скажите мне, почему, по крайней мере, почему ... –

+0

Прежде чем это произойдет, убедитесь, что вы избегаете переменной $ sender, прежде чем повторять ее обратно в HTML. В противном случае ваш сайт будет уязвим для XSS. Подробнее читайте здесь: https://www.owasp.org/index.php/Cross-site_Scripting_(XSS) P.S. нет, я не тот, кто проголосовал за :) – Qwerty

ответ

3

хотя ответ на @CKocer может также работать, но я хотел бы использовать переменные, а и с помощью $ _POST в HTML, а также более читаемым

В объявляю $name_title из стороны if($_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

Правильно, и вы можете заменить cKNet

+2

@CKocer В предыдущих версиях он был отключен, поэтому я предпочитаю использовать стандартные теги. –

+1

Несколько лет назад я прочитал статью о cKNet

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" из первого параметра (none). – Qwerty

+0

Спасибо за это .. Но я думаю, что в этом коде есть синтаксическая ошибка. –

+0

@RiffazStarr Я отредактировал ответ. Извините за синтаксическую ошибку. – cKNet

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 я считаю предпочтительным подход к фигурной скобе.

Смежные вопросы