2013-08-31 2 views
0

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

Спасибо за ваше время!

<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> 
+2

Вы должны пересмотреть свою логику, сохранить флаг под названием 'error' и, наконец, проверить этот флаг перед отправкой по электронной почте – DevZer0

+0

, вы можете использовать validate.js для этого или просто использовать js, чтобы проверить, заполнены ли все поля или нет. отправьте –

+0

, вы можете использовать проверку JavaScript .. ссылка: http: //www.w3schools.com/js/js_form_validation.asp – Mani

ответ

2

Попробуйте разместить свой код PHP над HTML, поскольку это является установка значений переменных PHP, и вы вызываете их, прежде чем они установлены.

Лучше всего иметь PHP-код в верхней части файла, а затем html под ним или даже иметь php в отдельном файле, но включать его вверху.

Также я считаю, что лучше создать массив ошибок, а затем, если количество массивов равно 0, затем выполнить действие (отправить письмо), иначе вызвать ошибку массивов в html, а не php. Затем вы можете выбрать, где отображать его на странице, и соответственно подгонять его.

+0

Да, это может быть массив для хранения сообщений об ошибках, но его чисто процедурный характер. Что плохо. – Yang

-1

Изменение формы действия для

<?php $PHP_SELF; ?>

Поэтому он должен быть

<form name="contact" action="<?php $PHP_SELF; ?>" method="post"> 

Для другого вопроса необходимо поместить код выше формы.

+0

Привет, спасибо за помощь ур, я изменил его, но мне все еще нужна помощь, чтобы исправить другую проблему. Я разместил выше .. я понятия не имею, могли бы вы помочь PLZ? – user2120702

+0

Вы должны разместить свой код PHP выше формы. Надеюсь, поможет.. –

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