验证码不起作用

时间:2013-07-25 06:08:09

标签: php html captcha

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

  1. comments.html - 评论评论栏
  2. captcha.php - 带5位数代码的自定义验证码
  3. submit.php - 用于处理代码
  4. error.html - 错误输入的错误页面
  5. thank.html - 提交成功的页面
  6. 我无法解决错误所在。请在这方面帮助我。 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>
    

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

3 个答案:

答案 0 :(得分:0)

你需要

session_start()

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

答案 1 :(得分:0)

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

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

你没有显示你得到的具体错误,所以我只是将你链接到我之前在一些项目中使用的这个简单的PHP-GD验证码,并且像魅力一样工作。实现起来非常简单易行。

Simple PHP-GD captcha image

答案 2 :(得分:0)

看起来它可能与你的正则表达式验证有关,总是返回false。

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