【问题标题】:Contact form submitting regardless of Recaptcha无论 Recaptcha 如何提交联系表格
【发布时间】:2016-10-09 15:53:44
【问题描述】:

您好,我正在尝试将 Google Recaptcha 安装到我的联系表单中。 Recaptcha 显示正常,但目前即使 Captcha 未尝试,表单也会提交。

我已经发布了下面的代码,希望有任何帮助:)

<?php

/* =====================================================
 * change this to the email you want the form to send to
 * ===================================================== */
$email_to = ";
$email_subject = "Contact Form submitted";

if(isset($_POST['email']))
{

    function return_error($error)
    {
        echo $error;
        die();
    }

    // check for empty required fields
    if (!isset($_POST['name']) ||
        !isset($_POST['email']) ||
        !isset($_POST['message'])

)
    {
        return_error('Please fill in all required fields.');
    }

    // form field values
    $name = $_POST['name']; // required
    $email = $_POST['email']; // required
    $contact_number = $_POST['contact_number']; // not required
    $message = $_POST['message']; // required
    $enquiry = $_POST['enquiry'];


    // form validation
    $error_message = "";

    // name
    $name_exp = "/^[a-z0-9 .\-]+$/i";
    if (!preg_match($name_exp,$name))
    {
        $this_error = 'Please enter a valid name.';
        $error_message .= ($error_message == "") ? $this_error : "<br/>".$this_error;
    }        

    $email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
    if (!preg_match($email_exp,$email))
    {
        $this_error = 'Please enter a valid email address.';
        $error_message .= ($error_message == "") ? $this_error : "<br/>".$this_error;
    } 

    // if there are validation errors

    if(strlen($error_message) > 0)
    {
        return_error($error_message);
    }

    // prepare email message
    $email_message = "Form details below.\n\n";

    function clean_string($string)
    {
        $bad = array("content-type", "bcc:", "to:", "cc:", "href");
        return str_replace($bad, "", $string);
    }

    $email_message .= "Enquiry Type: ".clean_string($enquiry)."\n";
    $email_message .= "Name: ".clean_string($name)."\n";
    $email_message .= "Email: ".clean_string($email)."\n";
    $email_message .= "Contact number: ".clean_string($contact_number)."\n";
    $email_message .= "Message: ".clean_string($message)."\n";

    // create email headers
    $headers = 'From: '.$email."\r\n".
    'Reply-To: '.$email."\r\n" .
    'X-Mailer: PHP/' . phpversion();
    //var_dump($email_to); var_dump($email_subject); var_dump($email_message); var_dump($headers);  
    if (mail($email_to, $email_subject, $email_message, $headers))
    {
        echo 'Form submitted successfully.';
    }
    else 
    {
        echo 'An error occured. Please try again later.';
        die();        
    }
}
else
{
    echo 'Please fill in all required fields.';
    die();
}
?>

<?php   
    if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])){
        $privatekey = "";

        //get verified response data
        $param = "https://www.google.com/recaptcha/api/siteverify?secret=".$privatekey."&response=".$_POST['g-recaptcha-response'];
        $verifyResponse = file_get_contents($param);
        $responseData = json_decode($verifyResponse);

        if($responseData->success){
            // success
            echo "success";

        }else{
            // failure
            echo "failure";
        }
    }else{
        // user didn't enter reCAPTCHA
        echo "The reCAPTCHA wasn't entered correctly. Go back and try it again.";
    }
?>

【问题讨论】:

  • 这个帖子会给你一个良好的开端,http://stackoverflow.com/a/35250609/5517143
  • 谢谢,我已经用那里的代码更新了我的文件。它显示正常,但即使没有尝试验证码,表单仍然可以正常提交。
  • 是的,那是因为它正在进行服务器端验证。请edit您的问题并分享您的代码。
  • 我在下面给出了答案。希望这能解决您的问题。

标签: php recaptcha


【解决方案1】:

仔细浏览代码,最外层的if 块,即if(isset($_POST['email'])){ ...if(isset($_POST['g-recaptcha-response'])... 将独立工作。您需要将if(isset($_POST['email'])){ ... 块放在if(isset($_POST['g-recaptcha-response'])... 块内,如下所示:

if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])){
    $privatekey = "YOUR_PRIVATE_KEY";

    //get verified response data
    $param = "https://www.google.com/recaptcha/api/siteverify?secret=".$privatekey."&response=".$_POST['g-recaptcha-response'];
    $verifyResponse = file_get_contents($param);
    $responseData = json_decode($verifyResponse);

    if($responseData->success){
        // success
        $email_to = '';
        $email_subject = "Contact Form submitted";

        if(isset($_POST['email'])){

            function return_error($error){
                echo $error;
                die();
            }

            // check for empty required fields
            if (!isset($_POST['name']) || !isset($_POST['email']) || !isset($_POST['message'])){
                return_error('Please fill in all required fields.');
            }

            // form field values
            $name = $_POST['name']; // required
            $email = $_POST['email']; // required
            $contact_number = $_POST['contact_number']; // not required
            $message = $_POST['message']; // required
            $enquiry = $_POST['enquiry'];


            // form validation
            $error_message = "";

            // name
            $name_exp = "/^[a-z0-9 .\-]+$/i";
            if (!preg_match($name_exp,$name)){
                $this_error = 'Please enter a valid name.';
                $error_message .= ($error_message == "") ? $this_error : "<br/>".$this_error;
            }        

            $email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
            if (!preg_match($email_exp,$email)){
                $this_error = 'Please enter a valid email address.';
                $error_message .= ($error_message == "") ? $this_error : "<br/>".$this_error;
            } 

            // if there are validation errors

            if(strlen($error_message) > 0){
                return_error($error_message);
            }

            // prepare email message
            $email_message = "Form details below.\n\n";

            function clean_string($string){
                $bad = array("content-type", "bcc:", "to:", "cc:", "href");
                return str_replace($bad, "", $string);
            }

            $email_message .= "Enquiry Type: ".clean_string($enquiry)."\n";
            $email_message .= "Name: ".clean_string($name)."\n";
            $email_message .= "Email: ".clean_string($email)."\n";
            $email_message .= "Contact number: ".clean_string($contact_number)."\n";
            $email_message .= "Message: ".clean_string($message)."\n";

            // create email headers
            $headers = 'From: '.$email."\r\n".
            'Reply-To: '.$email."\r\n" .
            'X-Mailer: PHP/' . phpversion();
            //var_dump($email_to); var_dump($email_subject); var_dump($email_message); var_dump($headers);  
            if (mail($email_to, $email_subject, $email_message, $headers)){
                echo 'Form submitted successfully.';
            }else{
                echo 'An error occured. Please try again later.';
                die();        
            }
        }else{
            echo 'Please fill in all required fields.';
            die();
        }

    }else{
        // failure
        echo "reCAPTCHA failure";
    }
}else{
    // user didn't enter reCAPTCHA
    echo "The reCAPTCHA wasn't entered correctly. Go back and try it again.";
}

【讨论】:

猜你喜欢
  • 2020-01-03
  • 2019-08-05
  • 1970-01-01
  • 1970-01-01
  • 2019-11-25
  • 1970-01-01
  • 2015-03-31
  • 2021-04-07
  • 2022-08-05
相关资源
最近更新 更多