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('me@mymail.me',$subject,$message,$headers);
          print "<div class='formerrors'><li>mail succesuffully sent</li></div>";
        }
      }
    }
  ?>
</form>
4

2 回答 2

2

尝试将您的 php 代码放在 html 之上,因为它是 php 设置变量的值,并且您在设置它们之前调用它们。

最佳实践是在文件顶部放置 php 代码,然后在其下方放置 html,或者甚至将 php 放在单独的文件中,但将其包含在顶部。

此外,我发现创建一个错误数组更好,然后如果数组计数为 0,则执行操作(发送电子邮件),否则调用 html 中的数组错误,而不是 php.ini。然后,您可以选择在页面上显示它的位置,并相应地设置它的样式。

于 2013-08-31T05:23:27.273 回答
-1

将您的表单操作更改为

<?php $PHP_SELF; ?>

所以它必须是

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

对于其他问题,您必须将代码放在表单上方。

于 2013-08-31T05:49:52.363 回答