captcha代码不起作用


captcha code not working

我设计了用于获取评论的评论框。我没有使用captcha插件,而是准备了5位数的自定义captcha。当我提交详细信息时,我仍然会收到错误页面。我在谷歌上查过各种网站,但都找不到正确的答案。

  1. comments.html-注释框
  2. captcha.php-带有5位代码的自定义captcha
  3. submit.php-用于处理代码
  4. error.html-错误条目的错误页面
  5. thank.html-提交成功页面

我不知道错误在哪里。请在这方面帮助我。下面给出了comments.html和submit.php的源代码。

===========评论.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');
?>

您需要

session_start()

submit.php的最顶部,它启动或恢复session,以便您可以访问$_SESSION

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

if(isset($_POST[‘submit’]){//处理原料}

你没有显示你得到了什么具体的错误,所以我只想把你链接到这个简单的PHP-GD captcha,我以前在一些项目中使用过它,它的效果很好。真的很简单,很容易实现。

简单的PHP-GD captcha图像

看起来这可能与regex验证总是返回false有关。

您可能需要测试您设置的规则是否正确。另外,我在php.net上读到eregi()在5.3.0中已经过时了,所以可能会将preg_match()与PCRE_CASELESS标志一起使用?