PHP表单上的Captcha,每当有人填写此表单时,它都会显示错误,即您的Captcha不正确


Captcha on a PHP form it shows error that your captcha is incorrect whenever anyones fill this form

这是我的表单,因为它在选择不同的单选按钮时向四个不同的电子邮件发送电子邮件。。。。。但我不希望在验证验证码之前提交表格。。所以我添加了这个captcha,但它不起作用,我不知道为什么。请帮我一下。提前谢谢。

                <?php
                session_start();
                //error_reporting(E_ERROR | E_PARSE);
                //echo "<pre>";
                //print_r($_REQUEST);
                if(!empty($_POST['answer']) )
                {
                    //echo "You entered " . htmlentities($_POST['answer']) . " which is ";
                    if ($_SESSION['answer'] == $_POST['answer'])
                    {
                        //echo 'correct';
                        $validatedCaptcha = true;
                    }
                    else
                    {
                        echo '<center>'.'You Filled wrong Captcha. We expected ' . $_SESSION['answer'].'      .Kindly Fill the Form Again'.'</center>';
                        $validatedCaptcha = false;
                    }
                }
                $digit1 = mt_rand(1, 20);
                $digit2 = mt_rand(1, 20);
                if (mt_rand(0, 1) === 1) {
                    $math = "$digit1 + $digit2";
                    $_SESSION['answer'] = $digit1 + $digit2;
                } else {
                    if($digit1 >= $digit2)
                    {
                        $math = "$digit1 - $digit2";    
                        $_SESSION['answer'] = $digit1 - $digit2;
                    }
                    else if($digit1 < $digit2)
                    {
                        $math = "$digit2 - $digit1";    
                        $_SESSION['answer'] = $digit2 - $digit1;
                    }
                }
                //echo "<pre>";
                //print_r($_SESSION);
                ?>
                <center>
                    <?php
                    $name = $_REQUEST['name11'];
                    $email = $_REQUEST['email11'];
                    $phone12 = $_REQUEST['mobile11'];
                    $subject = $_REQUEST['subject11'];
                    $message1 = $_REQUEST['message11'];
                    $zone1 = $_REQUEST['zone1'];
                    $null_virdi = "-f " . $email;

                    if (isset($_REQUEST['submit']) && $validatedCaptcha == true ) {
                        $message = "Name: " . $name . "'n" . "Email: " . $email . "'n" . "phone :" . $phone12 . "'n" . "Message :" . $message1;
                        if ($_REQUEST['zone1'] == "South") {
                            echo "Thank you for Contacting our South Indian Zonal Office";
                            mail("abc@gmail.com", $subject, $message, null, $null_virdi);
                        }
                        if ($_REQUEST['zone1'] == "Delhi") {
                            mail("abc@gmail.com", $subject, $message, null, $null_virdi);
                            echo "Thank you for Contacting our Delhi Office";
                        }
                        if ($_REQUEST['zone1'] == "Hyderabad") {
                            mail("abc3@gmail.com", $subject, $message, null, $null_virdi);
                            echo "Thank you for Contacting our Hyderabad & AP Office";
                        }
                        if ($_REQUEST['zone1'] == "Pune") {
                            mail("abc4@gmail.com", $subject, $message, null, $null_virdi);
                            echo "Thank you for Contacting our Pune/Nasik Office";
                        }
                        if ($_REQUEST['zone1'] == "west") {
                            mail("abc5@gmail.com", $subject, $message, null, $null_virdi);
                            echo "Thank you for Contacting our West Zone Office";
                        }
                    }
                    ?>
                    <html><head>
                            <script>
                                function validateForm()
                                {
                                    var x = document.forms["myForm"]["email1"].value;
                                    var atpos = x.indexOf("@");
                                    var dotpos = x.lastIndexOf(".");
                                    if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= x.length)
                                    {
                                        alert("Not a valid e-mail address");
                                        return false;
                                    }
                                }
                            </script>
                        </head><body>
                           <div style="width:50%;border: 4px double #dbd395;margin: 0;padding: 28px 0px 0px 34px;background-color: #F8F8F8">   
                 <form name="myForm" action="" onSubmit="return validateForm();" method="post" >
                             <table >
                                    <tr>
                                    <h3 style="margin-left:5px;">Enquiry for Quotation</h3>
                                    </tr>
                                    <tr>
                                        <td></td>
                                    </tr>
                                    <tr>
                                        <td>Name&nbsp;<font color="#FF0000">*</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;<input type="text" required="required" name="name11"  size="40"/></td>
                                    </tr>
                                    <td></td>
                                    </tr>
                                    <tr>
                                        <td>Email&nbsp;<font color="#FF0000">*</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;<input type="text" required="required" name="email11" size="40"/></td>
                                    </tr>
                                    <tr>
                                        <td></td>
                                    </tr>
                                    <tr>
                                        <td>Mobile&nbsp;<font color="#FF0000">*</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;<input type="text" required="required" name="mobile11" size="40"/></td>
                                    </tr>
                                    <tr>
                                        <td>Zone&nbsp;<font color="#FF0000">*</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;<input type="radio" required="required" name="zone1" value="South"/>South India &nbsp;&nbsp;<input type="radio" name="zone1" value="Delhi" />Delhi NCR <input type="radio" name="zone1" value="Hyderabad"/>Hyderabad & AP <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="radio" name="zone1" value="Pune"/>Pune/Nashik <input type="radio" name="zone1" value="west"/>Other </td>
                                    </tr>
                                    <td></td>
                                    </tr>
                                    <tr>
                                        <td>Subject&nbsp;<font color="#FF0000">*</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;<input type="text" required="required" name="subject11" size="40"/></td>
                                    </tr>
                                    <tr>
                                        <td></td>
                                    </tr>
                                    <tr>
                                        <td style="vertical-align: top;"><font style=vertical-align:top; color="#000000">Message</font><font style=vertical-align:top; color="#FF0000">* :</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<textarea rows="4" cols="32" name="message11" required="required"/></textarea></td>
                                    </tr>
                <tr><td><center><b>Captcha</b></center></td></tr>
                                    <tr><td align="center">What's <?php echo $math; ?> = <input size="5" name="answerswer" type="text" /><br /></td></tr>
                                    <tr>
                                        <td align="center">

                                            <input  type="submit" name="submit" value="Send Message"/></td>
                                    </tr>
                                </table>
                            </form>
                </div>
                        <body/>
                    </html>
                </center>

你的"captcha"完全弱:"答案"是一个介于(1+1)和(20+20)之间的值,在连续的一行中给出不超过39个不同的结果(2…40)。

由于有一些解析器(我见过他们用这样的"captchas"处理各种表单),他们只是简单地对这样的表单强行发布从1…100的随机数,他们需要几分钟的时间才能在你的网站上发布/注册/其他什么。

我没有得到我要求的正确答案。。。但问题是,我在wordpress页面中使用了这个表单,但它不起作用,因为captcha验证总是出错,表单总是用来回应其他部分中存在的captcha错误。但在做了一些研究后,我发现这个问题是由于我在表格中使用的会话造成的。我知道wordpress有自己的会话,所以验证总是会出错。所以我做了这个,我的表格现在可以工作了。希望它也能帮助其他人。

        <?php  //error_reporting(E_ERROR | E_PARSE);  ?>
        <?php
        if(!empty($_POST['answer']) )
        {
            //echo "You entered " . htmlentities($_POST['answer']) . " which is ";
            if ($_REQUEST['answer'] == $_POST['answer'])
            {
                //echo 'correct';
                $validatedCaptcha = true;
            }
            else
            {
                echo '<center>'.'You Filled wrong Captcha. We expected ' . $_REQUEST['answer'].'      .Kindly Fill the Form Again'.'</center>';
                $validatedCaptcha = false;
            }
        }
        $digit1 = mt_rand(1, 20);
        $digit2 = mt_rand(1, 20);
        if (mt_rand(0, 1) === 1) {
            $math = "$digit1 + $digit2";
            $_REQUEST['answer'] = $digit1 + $digit2;
        } else {
            if($digit1 >= $digit2)
            {
                $math = "$digit1 - $digit2";    
                $_REQUEST['answer'] = $digit1 - $digit2;
            }
            else if($digit1 < $digit2)
            {
                $math = "$digit2 - $digit1";    
                $_REQUEST['answer'] = $digit2 - $digit1;
            }
        }
        //echo "<pre>";
        //print_r($_SESSION);
        ?>
        <center>
            <?php
            $name = $_REQUEST['name11'];
            $email = $_REQUEST['email11'];
            $phone12 = $_REQUEST['mobile11'];
            $subject = $_REQUEST['subject11'];
            $message1 = $_REQUEST['message11'];
            $zone1 = $_REQUEST['zone1'];
            $null_virdi = "-f " . $email;

            if (isset($_REQUEST['submit']) && $validatedCaptcha == true ) {
                $message = "Name: " . $name . "'n" . "Email: " . $email . "'n" . "phone :" . $phone12 . "'n" . "Message :" . $message1;
                if ($_REQUEST['zone1'] == "South") {
                    echo "Thank you for Contacting our South Indian Zonal Office";
                    mail("blrbranch@sonatech.net", $subject, $message, null, $null_virdi);
                }
                if ($_REQUEST['zone1'] == "Delhi") {
                    mail("sales@sonatech.net", $subject, $message, null, $null_virdi);
                    echo "Thank you for Contacting our Delhi Office";
                }
                if ($_REQUEST['zone1'] == "Hyderabad") {
                    mail("chandel@sonatech.net", $subject, $message, null, $null_virdi);
                    echo "Thank you for Contacting our Hyderabad & AP Office";
                }
                if ($_REQUEST['zone1'] == "Pune") {
                    mail("manjot@hitechwebsolutions.in,pankaj@sonatech.net", $subject, $message, null, $null_virdi);
                    echo "Thank you for Contacting our Pune/Nasik Office";
                }
                if ($_REQUEST['zone1'] == "west") {
                    mail("sales@sonatech.net", $subject, $message, null, $null_virdi);
                    echo "Thank you for Contacting our West Zone Office";
                }
            }
            ?>
            <html><head>
                    <script>
                        function validateForm()
                        {
                            var x = document.forms["myForm"]["email1"].value;
                            var atpos = x.indexOf("@");
                            var dotpos = x.lastIndexOf(".");
                            if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= x.length)
                            {
                                alert("Not a valid e-mail address");
                                return false;
                            }
                        }
                    </script>
                </head><body>
                   <div style="width:50%;border: 4px double #dbd395;margin: 0;padding: 28px 0px 0px 34px;background-color: #F8F8F8">   
         <form name="myForm" action="" onSubmit="return validateForm();" method="post" >
                     <table >
                            <tr>
                            <h3 style="margin-left:5px;">Enquiry for Quotation</h3>
                            </tr>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td>Name&nbsp;<font color="#FF0000">*</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;<input type="text" required="required" name="name11"  size="40"/></td>
                            </tr>
                            <td></td>
                            </tr>
                            <tr>
                                <td>Email&nbsp;<font color="#FF0000">*</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;<input type="text" required="required" name="email11" size="40"/></td>
                            </tr>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td>Mobile&nbsp;<font color="#FF0000">*</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;<input type="text" required="required" name="mobile11" size="40"/></td>
                            </tr>
                            <tr>
                                <td>Zone&nbsp;<font color="#FF0000">*</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;<input type="radio" required="required" name="zone1" value="South"/>South India &nbsp;&nbsp;<input type="radio" name="zone1" value="Delhi" />Delhi NCR <input type="radio" name="zone1" value="Hyderabad"/>Hyderabad & AP <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="radio" name="zone1" value="Pune"/>Pune/Nashik <input type="radio" name="zone1" value="west"/>Other </td>
                            </tr>
                            <td></td>
                            </tr>
                            <tr>
                                <td>Subject&nbsp;<font color="#FF0000">*</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;<input type="text" required="required" name="subject11" size="40"/></td>
                            </tr>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td style="vertical-align: top;"><font style=vertical-align:top; color="#000000">Message</font><font style=vertical-align:top; color="#FF0000">* :</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<textarea rows="4" cols="32" name="message11" required="required"/></textarea></td>
                            </tr>
        <tr><td><center><b>Captcha</b></center></td></tr>
                            <tr><td align="center">What's <?php echo $math; ?> = <input size="5" name="answerswer" type="text" /><br /></td></tr>
                            <tr>
                                <td align="center">

                                    <input  type="submit" name="submit" value="Send Message"/></td>
                            </tr>
                        </table>
                    </form>
        </div>
                <body/>
            </html>
        </center>