0

我设计了评论框来获取评论。我没有使用验证码插件,而是准备了带有 5 位数字的自定义验证码。当我提交详细信息时,我仍然收到错误页面。我检查了谷歌的各个网站,但找不到正确的答案。

  1. comments.html - 评论框
  2. captcha.php - 带有 5 位代码的自定义验证码
  3. submit.php - 用于处理代码
  4. error.html - 错误输入的错误页面
  5. 感谢.html - 提交成功的页面

我无法找出错误在哪里。请在这方面帮助我。comments.html 和 submit.php 的源代码如下。

=========COMMENTS.HTML===============

<form action="submit.php" method="post"> 
Name: <input type="text" name="name" /> <br>
Email: <input type="text" name="email" /> <br>
Comments:  <textarea  name="coments" />  <br>
Enter Captcha <img src="captcha.php"><input type="text" name="vercode" /> <br>
<input type="submit" name='submit'  onclick="show_confirm()" value="SUBMIT" />
</form>

=============提交.PHP==================

<?php
session_start(); 
if ($_POST["vercode"] != $_SESSION["vercode"] OR $_SESSION["vercode"]=='') 
       {
    //This page should not be accessed directly. Need to submit the form.
    header('Location: error.html');
    exit;
       }
$name = $_POST['name'];
$email = $_POST['email'];
$comments = $_POST['comments'];

if(empty($name) || empty($email)||empty($comments)) 
    {
    header('Location:error.html');
    exit;
    }
    if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $_POST[email]))  
   {
    header('Location:error.html');
    exit;
    }
    $email_from = 'info@xxxxx.com';
$email_subject = "CONTACT FORM";

$email_body="============================\n".
"FULL NAME: $name\n".
"EMAIL-ID:   $email\n".
"COMMENTS:     $comments\n".

$to = "info2@xxxxx.com";
$headers = "From: $email_from \r\n";

mail($to,$email_subject,$email_body,$headers);
//done. redirect to thank-you page.
header('Location: thank.html');
?>
4

3 回答 3

0

您应该先检查表单是否已提交,然后再处理代码。例子:

if(isset($_POST['submit'])) { // 处理东西 }

你没有显示你得到了什么具体的错误,所以我只是将你链接到这个简单的 PHP-GD 验证码,我以前在一些项目中使用过它,它就像一个魅力。真的很简单,很容易实现。

简单的 PHP-GD 验证码图片

于 2013-07-25T06:48:26.140 回答
0

你需要

session_start()

在您的最顶部submit.php,开始或恢复您的session,以便您可以访问$_SESSION

于 2013-07-25T06:18:05.807 回答
0

看起来它可能与您的正则表达式验证总是返回错误有关。

您可能想测试您设置的规则是否正确。另外,我在 php.net 上读到 eregi() 现在在 5.3.0 中已过时,所以也许可以使用带有 PCRE_CASELESS 标志的 preg_match() 来代替?

于 2013-07-25T08:07:05.767 回答