У меня есть контактная форма, и я успешно добавил reCAPTCHA v2, но я не могу сделать ее обязательной / обязательной опцией. Итак, в настоящее время, если я нажимаю кнопку отправки, оно отправляет сообщение даже без проверки (без нажатия на «Я не робот»), что делает его бесполезным.
код:
<?php $page_id = 4; $page_details = get_page_details($page_id); ini_set(sendmail_from, ""); require ("class.phpmailer.php"); $mail = new PHPMailer(); if ($_POST["action"] == "sendmail_contact"){ $from = $_POST["email"]; $contact_data = mysql_fetch_array(mysql_query("select * from contact_info")); $to = $contact_data["email"]; $check_dir = "contact_files/uploads/folder" . $_SESSION["UID_Contact"]; $results_array = array(); if (is_dir($check_dir)){ if ($handle = opendir($check_dir)){ while (($file = readdir($handle)) !== FALSE){ if ($file != "Thumbs.db" and $file != "." and $file != ".."){$results_array[] = $file;}} closedir($handle);}} if ($results_array[0] != ""){ $thumbpath1 = $results_array[0]; $mail->AddAttachment("$check_dir/$thumbpath1");} if ($results_array[1] != ""){ $thumbpath2 = $results_array[1]; $mail->AddAttachment("$check_dir/$thumbpath2");} if ($results_array[2] != ""){ $thumbpath3 = $results_array[2]; $mail->AddAttachment("$check_dir/$thumbpath3");} if ($results_array[3] != ""){ $thumbpath4 = $results_array[3]; $mail->AddAttachment("$check_dir/$thumbpath4");} $subject = 'Contact Us Page'; $Message = ""; $Message.= '<font face = "Verdana" size = "2"><strong>IP : </strong> ' . $ip_address . '</font><br /><br />'; $Message.= '<font face = "Verdana" size = "2"><strong>Country : </strong> ' . $country . '</font><br /><br />'; $Message.= '<font face = "Verdana" size = "2"><strong>Heard from : </strong> ' . $_POST["where"] . '</font><br /><br /><br />'; $Message.= '<font face = "Verdana" size = "2"><strong>Name : </strong> ' . ucfirst($_POST["name"]) . '</font><br /><br />'; $Message.= '<font face = "Verdana" size = "2"><strong>E-mail : </strong> ' . $_POST["email"] . '</font><br /><br />'; $Message.= '<font face = "Verdana" size = "2"><strong>Message : </strong> ' . $_POST["details"] . '</font><br /><br />'; $Message1.= $Message; $mail->From = $from; $mail->FromName = $from; $mail->AddAddress($to); $mail->IsHTML(true); $mail->Subject = $subject; $mail->Body = $Message1; $mail->Send(); header("location: $site_url/contact-thank-you");} ?> <head> <script type = "text/javascript"> var $j_123 = jQuery.noConflict(); $j_123(document).ready(function() { var validator = $j_123("#contactusfrm").validate({ rules: { name: "required", email: {required: true,email: true }, details: "required" }, messages: { name: "<span class=\"alert_contact\">required</span>", email: {required: "<span class=\"alert_contact\">required</span>",email: "<span class=\"alert_contact\">invalid</span>" }, details: "<span class=\"alert_contact\">required</span>" } }); }); < /script> <script src='google.com/recaptcha/api.js'></script> </head> <body> <div class = "content"> <form id = "contactusfrm" name = "contactusfrm" method = "post" action = "url/contact"> <input type = "hidden" name = "action" value = "sendmail_contact"/> Your Name *<input name = "name" type = "text" class = "textbox" id = "name" title = "Name"/> Your Email *<input name = "email" type = "text" class = "textbox" id = "email" title = "Email"/> How did you hear about us?<select name = "where" class = "dropdown" id = "where" title = "How did you hear about us"> <option value = "-">Click to Choose...</option> <option value = "Google Search"> Google Search </option> <option value = "Social Media"> Social Media </option> <option value = "Blog"> Blog </option> <option value = "Recommendation"> Recommendation </option> <option value = "Advertisement"> Advertisement </option> <option value = "Forum"> Forum </option> <option value = "Other"> Other </option> </select> Your Message *<br/><textarea name = "details" class = "textarea" id = "details" title = "Message"></textarea> <div id = "fileuploader"><div class = "ajax-file-upload">UPLOAD FILE</div></div> <script type = "text/javascript"> var $jj = jQuery.noConflict(); $jj(document).ready(function(){ $jj("#fileuploader").uploadFile({ url:"<?php echo $site_url ?>/contact_files/upload.php", fileName:"myfile", multiple:true, returnType:"json", showDelete:true, deleteCallback:function(data, pd){ for(var i =0; i < data.length; i++){ $jj.post("<?php echo $site_url ?>/contact_files/delete.php",{op:"delete",name: data[i]}, function(resp,textStatus, jqXHR){});}}});}); </script> <div class = "g-recaptcha" data-sitekey = "-----key----"></div> <div class = "bot-cont"><button name = "submit_button" type = "submit" class = "submit_button" value = "SUBMIT MESSAGE">SUBMIT MESSAGE</button></div> </form> </div> <script type = "text/javascript" src = "url/jquery.uploadfile.min.js"></script> <script type = "text/javascript" src = "ajax.aspnetcdn.com/ajax/jquery.validate/1.8/jquery.validate.min.js"></script> </body>
Кроме того, в моей форме, когда пользователь успешно отправляет сообщение, он / она будет перенаправлен на другую страницу (страницу с благодарностью), поэтому мне не понадобится какое-либо сообщение с надписью «Успешно».
Мне нужно только сообщение об ошибке с «обязательным» текстом (например, те, которые у меня уже есть для других полей), только когда пользователь пытается отправить без проверки «Я не робот».
Кто-нибудь знает, как заставить это работать нормально?
Я хочу использовать reCAPTCHA v2 и ссылку, которую вы дали, я думаю, для старой reCAPTCHA v1, которая больше не поддерживается.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы не проверяете переменную "g-recaptcha-response" при обработке цели. Посмотри на это:
if (isset($_POST['submit']) && !empty($_POST['submit'])):
if (isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])):
//your site secret key
$secret = '9LuDh9kyetYYYYdT0jsVckScsH8Ks3KA';
//get verify response data
$verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']);
$responseData = json_decode($verifyResponse);
if ($responseData->success):
//contact form submission code
$name = !empty($_POST['name'])?$_POST['name']:'';
$email = !empty($_POST['email'])?$_POST['email']:'';
$message = !empty($_POST['message'])?$_POST['message']:'';
$to = '[email protected]';
$subject = 'New contact form have been submitted';
$htmlContent = "
<h1>Contact request details</h1>
<p><b>Name: </b>".$name."</p>
<p><b>Email: </b>".$email."</p>
<p><b>Message: </b>".$message."</p>
";
// Always set content-type when sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
// More headers
$headers .= 'From:'.$name.' <'.$email.'>' . "\r\n";
//send email
@mail($to,$subject,$htmlContent,$headers);
$succMsg = 'Your contact request have submitted successfully.';
else:
$errMsg = 'Robot verification failed, please try again.';
endif;
else:
$errMsg = 'Please click on the reCAPTCHA box.';
endif;
else:
$errMsg = '';
$succMsg = '';
endif;
В приведенном выше примере гарантируется, что ответ g-recaptcha-response был передан, проверяется ответ, а затем, если проверка captcha не удалась, отображается ошибка проверки. Используйте этот пример, чтобы изменить свой код, чтобы проверить успешное использование рекапчи.
Привет. Спасибо за код, пробовал, но, к сожалению, не работает. Код очень похож на другие, которые я пробовал раньше. Я начинаю думать, что проблема может быть связана с чем-то еще в моем коде, что не позволяет recaptcha работать должным образом. Кажется, я не могу понять, что именно.
Вы явно не уделили внимания тому, как работает рекапча. Вот ссылка: developers.google.com/recaptcha/old/docs/php; вы должны удалить вопрос.