2015-04-04 2 views
2

У меня есть форма и действие для m - та же самая страница. Я пытаюсь:Почему этот код проверки не работает должным образом?

  1. Показать сообщение спасибо после успешного представления формы
  2. сообщения Показать ошибки рядом с полем, где обнаружена ошибка
  3. Все выше, должны быть представлены в одной и той же странице.

Мой код:

<?php 
    $errors = array(); 
    if (isset($_POST["Ask_the_Question"])) { 
     $guest_name = $_POST["guest_name"]; 
     $title = $_POST["faq_title"]; 
     $description = $_POST["faq_desc"]; 
     $title = $_POST["faq_title"]; 

     /* validation */ 
     if (empty($guest_name)) { 
      $errors['guest_name'] = "Please type your name!"; 
     } 

     if(!empty($errors)){ echo '<h1 style="color: #ff0000;">Errors!</h1><h6 style="color: #ff0000;">Please check the fields which have errors below. Error hints are in Red.</h6>';} 

     if(empty($errors)){  
      echo 'Thanks, We have received your feed back'; 
     } 
    } 

    else { 
?> 
      <form action="index.php" method="post" class="booking_reference"> 
       <input type="text" name="guest_name" placeholder="Your Name" value="<?PHP if(!empty($errors)) { echo $guest_name;} ?>" /> 
       <?php if(isset($errors['guest_name'])) { echo '<span style="color: red">'.$errors['guest_name'].'</span>'; } ?> 
       <input type="email" name="guest_email" placeholder="Your email" pattern="[a-z0-9._%+-][email protected][a-z0-9.-]+\.[a-z]{2,4}$" required /> 
       <input type="text" name="faq_title" placeholder="FAQ Title"/> 
       <input type="text" name="faq_desc" placeholder="FAQ Description"/> 
       <input type="submit" name="Ask_the_Question" value="Ask the Question" /> 
      </form> 
<?php 
     } 
?> 

Я ограничил проверку и показывая только для первой части в этом вопросе.

Когда я отправить форму Если нет НИКАКИХ какие-либо ошибки я получаю сообщение Спасибо, мы получили ваш канал обратно Это нормально и работает, как ожидалось.

При возникновении ошибки/поле Имя гостя пусто. Я получаю сообщение при отправке формы Ошибки! Пожалуйста, проверьте поля, где есть ошибки. Подсказки по ошибкам находятся в красном цвете. Это тоже хорошо.

Но моя форма просто исчезает, когда я получаю вышеуказанное сообщение. Зачем? Также хочу показать, что Пожалуйста, введите ваше имя! рядом с полем.

ответ

4

Попробуйте использовать код. Я удалил еще часть и установил флаг с истинным/ложным, чтобы проверить, является ли он действительным или нет.

<?php 
    $errors = array(); 
    if (isset($_POST["Ask_the_Question"])) { 
     $guest_name = $_POST["guest_name"]; 
     $title = $_POST["faq_title"]; 
     $description = $_POST["faq_desc"]; 
     $title = $_POST["faq_title"]; 

     /* validation */ 
     $chkValidate = "true"; 
     if (empty($guest_name)) { 
      $errors['guest_name'] = "Please type your name!"; 
      $chkValidate = "false"; 
     } 

     if(!empty($errors)){ echo '<h1 style="color: #ff0000;">Errors!</h1><h6 style="color: #ff0000;">Please check the fields which have errors below. Error hints are in Red.</h6>'; 
      $chkValidate = "false"; 
     } 

     if($chkValidate == "true"){  
      echo 'Thanks, We have received your feed back'; 
     } 
    } 
    ?> 
      <form action="index.php" method="post" class="booking_reference"> 
       <input type="text" name="guest_name" placeholder="Your Name" value="<?php if(!empty($errors) && $chkValidate != "false") { echo $guest_name;} ?>" /> 
       <?php if(isset($errors['guest_name'])) { echo '<span style="color: red">'.$errors['guest_name'].'</span>'; } ?> 
       <input type="email" name="guest_email" placeholder="Your email" pattern="[a-z0-9._%+-][email protected][a-z0-9.-]+\.[a-z]{2,4}$" required /> 
       <input type="text" name="faq_title" placeholder="FAQ Title"/> 
       <input type="text" name="faq_desc" placeholder="FAQ Description"/> 
       <input type="submit" name="Ask_the_Question" value="Ask the Question" /> 
      </form> 
<?php 

?> 
1

Просто удалите else состояние причина на самом деле ваша форма не будет отображаться, если $_POST["Ask_the_Question"] установлен

<?php 
    $errors = array(); 
    if (isset($_POST["Ask_the_Question"])) { 
     $guest_name = $_POST["guest_name"]; 
     $title = $_POST["faq_title"]; 
     $description = $_POST["faq_desc"]; 
     $title = $_POST["faq_title"]; 

     /* validation */ 
     if (empty($guest_name)) { 
      $errors['guest_name'] = "Please type your name!"; 
     } 

     if(!empty($errors)){ echo '<h1 style="color: #ff0000;">Errors!</h1><h6 style="color: #ff0000;">Please check the fields which have errors below. Error hints are in Red.</h6>';} 

     if(empty($errors)){  
      echo 'Thanks, We have received your feed back'; 
     } 
    } 
      <form action="index.php" method="post" class="booking_reference"> 
       <input type="text" name="guest_name" placeholder="Your Name" value="<?PHP if(!empty($errors)) { echo $guest_name;} ?>" /> 
       <?php if(isset($errors['guest_name'])) { echo '<span style="color: red">'.$errors['guest_name'].'</span>'; } ?> 
       <input type="email" name="guest_email" placeholder="Your email" pattern="[a-z0-9._%+-][email protected][a-z0-9.-]+\.[a-z]{2,4}$" required /> 
       <input type="text" name="faq_title" placeholder="FAQ Title"/> 
       <input type="text" name="faq_desc" placeholder="FAQ Description"/> 
       <input type="submit" name="Ask_the_Question" value="Ask the Question" /> 
      </form> 
1

причина, почему здесь:

<?php 
if (isset($_POST["Ask_the_Question"])) { 
     $guest_name = $_POST["guest_name"]; 
     $title = $_POST["faq_title"]; 
     $description = $_POST["faq_desc"]; 
     $title = $_POST["faq_title"]; 

     /* validation */ 
     if (empty($guest_name)) { 
      $errors['guest_name'] = "Please type your name!"; 
     } 

     if(!empty($errors)){ echo '<h1 style="color: #ff0000;">Errors!</h1><h6 style="color: #ff0000;">Please check the fields which have errors below. Error hints are in Red.</h6>';} 

     if(empty($errors)){  
      echo 'Thanks, We have received your feed back'; 
     } 
    } else { 
     // your form code will never be called if $_POST['Ask_the_Question'] is set 

делать то, что вы хотите достичь, вы, вероятно, хотите вместо этого следует сделать следующее:

<?php 
    $errors = array(); 
    if (isset($_POST["Ask_the_Question"])) { 
     $guest_name = $_POST["guest_name"]; 
     $title = $_POST["faq_title"]; 
     $description = $_POST["faq_desc"]; 
     $title = $_POST["faq_title"]; 

     /* validation */ 
     if (empty($guest_name)) { 
      $errors['guest_name'] = "Please type your name!"; 
     } 

     if(!empty($errors)){ echo '<h1 style="color: #ff0000;">Errors!</h1><h6 style="color: #ff0000;">Please check the fields which have errors below. Error hints are in Red.</h6>';} 
    } 

    if(empty($errors)){  
      echo 'Thanks, We have received your feed back'; 
     } else { ?> 
      <form action="index.php" method="post" class="booking_reference"> 
       <input type="text" name="guest_name" placeholder="Your Name" value="<?PHP if(!empty($errors)) { echo $guest_name;} ?>" /> 
       <?php if(isset($errors['guest_name'])) { echo '<span style="color: red">'.$errors['guest_name'].'</span>'; } ?> 
       <input type="email" name="guest_email" placeholder="Your email" pattern="[a-z0-9._%+-][email protected][a-z0-9.-]+\.[a-z]{2,4}$" required /> 
       <input type="text" name="faq_title" placeholder="FAQ Title"/> 
       <input type="text" name="faq_desc" placeholder="FAQ Description"/> 
       <input type="submit" name="Ask_the_Question" value="Ask the Question" /> 
      </form> 
      <?php 

     } 
    } 

?> 
1

Другие ответы в порядке, но только для выяснения того, что происходит.

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

Ваша форма исчезает, потому что если вы пройдете первый если вы не можете добраться до еще.

if (isset($_POST["Ask_the_Question"])) { 
    ... 
} else { 
    xxx; 
} 

Это означает, что если вы хотите увидеть вашу форму, вы должны положить его где-то можно показать, как elseif (с большим количеством ограничений), или сослагательного наклонения внутренней или внешней.

if (isset($_POST["Ask_the_Question"]) && empty($errors)) { 
    ... 
} elseif (isset($_POST["Ask_the_Question"]) && !empty($errors)) { 
    ... 
} else { 
    ... 
} 

Также я хочу показать, что Пожалуйста, введите ваше имя! рядом с полем.

Чтобы показать все ошибки, вы можете использовать, например. foreach везде, где вы хотите их показать.

foreach ($errors as &$error) { 
    echo "Error: $error<br />\n"; 
} 

Btw быть осторожным с empty(); function.

+1

пояснения .. –

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