2013-08-30 4 views
0

Я надеюсь, что есть решение для этого, я нооб в php, я не мог понять это.Как подтвердить форму в php

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

Спасибо за ур!

<div id="contact"> 
    <h1 class="heading1"> Contact:</h1> 
    <form name="contact" action="formtest.php" method="post"> 
    <label for="YourName">Your Name:</label> 
    <input type="text" name="name" class="required" value="<?= isset($_POST['name']) ? $_POST['name'] : '' ?>" /> 

    <label for="YourEmail">Your Email:</label> 
    <input type="text" name="email" class="required" value="<?= isset($_POST['email']) ? $_POST['email'] : '' ?>"/> 

    <label for="Subject">Subject:</label> 
    <input type="text" name="subject" class="required" value="<?= isset($_POST['subject']) ? $_POST['subject'] : '' ?>" /> 

    <label for="YourMessage">Your Message:</label> 
    <textarea name="message" class="required"><?= isset($_POST['message']) ? $_POST['message'] : '' ?></textarea> 
    <p class="c3">10 + 5 =<input type="text" name="answerbox" id="answerbox" "<?= isset($_POST['answerbox']) ? $_POST['answerbox'] : '' ?>"/></p> 

    <fieldset> 
     <input type="submit" name="submit" id="submit" value="Send" class="required"/> 
     <input type="reset" id="reset" value="Reset"/>  
    </fieldset> 

    <?php 
     if(isset($_POST['submit'])){ 
     $name = trim($_POST["name"]); 
     $email = trim($_POST["email"]); 
     $subject = trim($_POST["subject"]); 
     $message = trim($_POST["message"]); 
     $answerbox = trim($_POST["answerbox"]); 
     if(empty($_POST['name'])){ 
      print "<div class='formerrors'><li>Please type your name.</li></div>"; 
     } 
     else { 
      if (ctype_alpha($name) === false) { 
      print "<div class='formerrors'><li>Your name only should be in letters!</li></div>"; 
      } 
     } 

     if(empty($_POST['email'])){ 
      print "<div class='formerrors'><li>You've forgot to type your email address.</li></div>"; 
     } else{ 
      if(filter_var($email, FILTER_VALIDATE_EMAIL) === false){ 
      print "<div class='formerrors'><li>Your email is not valid, please check.</li></div>"; 
      } 
     } 

     if(empty($_POST['subject'])){ 
      print "<div class='formerrors'><li>Please type a subject.</li></div>"; 
     } 

     if(empty($_POST['message'])){ 
      print "<div class='formerrors'><li>You've forgot to type your message.</li></div>"; 
     } 

     if(empty($_POST['answerbox'])){ 
      print "<div class='formerrors'><li>Please answer the math question.</li></div>"; 
     } 
     else { 
      if($answerbox != 15){ 
       print"<div class='formerrors'><li>Answer is not correct.</li></div>"; 
      } 
      else{ 
      $headers = 'From: '.$email. "\r\n" . 
      'Reply-To: '.$email . "\r\n" . 
      'X-Mailer: PHP/' . phpversion(); 
      mail('[email protected]',$subject,$message,$headers); 
      print "<div class='formerrors'><li>mail succesuffully sent</li></div>"; 
      } 
     } 
     } 
    ?> 
    </form> 
</div><!--contact--> 
+0

Вы используете операторы 'if' для печати сообщений; с последним 'else', который отправляет почту. Таким образом, единственный способ, по которому сообщение не будет отправлено, - это «$ answerbox! = 15» - true. Может быть, добавьте флаг, который установлен, если какая-либо проверка верна, и добавьте окончательный, если он отправит почту, если флаг не установлен. – andrewsi

+0

спасибо за это, если вы не возражаете, PLZ показать мне пример кода. – user2120702

ответ

2

Поскольку вы новичок в PHP, я бы дал вам несколько советов для новичка, насколько я могу.

Во-первых, вы выводите HTML-код и обрабатываете PHP впоследствии. Это не может быть хорошей практикой (и решение вашей проблемы вполне связано с этим). То, что вы делаете, постоянно показывает форму, без ограничений и проверки/проверки через PHP. Хорошая практика заключается в том, чтобы никогда не выводить html-код до того, как какой-либо php идет (есть и другие проблемы, например header(), кроме вашего примера).

Что вы предпочли бы сделать это:

<?php 
    if (isset($_POST['submit'])) { 
    // validations here 
    // if (......) { echo 'problem 1...'; } 
    // elseif (.....) { echo 'problem 2...'; } 
    // else (.....} { 
    // No problems so we can send it 
    // mail(.....); 
    // } 
    } 

// done with PHP now show HTML 
?> 
<form>....</form> 

Другое дело, я хотел бы дать вам, как наконечник является то, что при создании статических страниц, как, что (я имею в виду менее структурированы, менее объектно-ориентированный, вы знаете ..) хорошая практика заключается в том, чтобы хранить то, что вы «эхо/печатаете» в переменных, и выводить их красиво там, где это применимо.

Таким образом, вместо

<?php 
    if (empty($user)) { echo 'Username is empty!'; } // Directly echoing (perhaps in not a right place, maybe even before <!DOCTYPE><html> declaration!! 
?> 

Вы бы с

<?php 
    $errors = ''; 
    if (empty($user)) { $errors .= '<br/>Error1: Provide an username'; } 
    elseif (empty($name)) { $errors .= '<br/>Error2: Provide a name'; } 
    else { /*.....*/ } 
    // Since we have our errors variable with errors (or empty one) we can check for it perhaps in HTML context 
?> 
<form> 
    <?php if (!empty($errors)) { ?> 
    <div style='color:red;'>There are some errors! :(</div> 
    <?php echo $errors; ?> 
    </div> 
    <?php } ?> 
</form> 

Я надеюсь, что эти скромные мнения поможет, по крайней мере, может быть, чтобы решить вашу проблему. Удачи

+0

Спасибо за помощь :) – user2120702

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