Мне нужно отправить почту с помощью PHP через форму HTML с помощью Google Recaptcha; после отправки почты появляется сообщение, в котором была форма (это выполняется с помощью jQuery).PHP-функция почты с jQuery/AJAX и Google ReCaptcha
Если я удалю все связанные с Recaptcha коды, почта будет отправлена, а jQuery будет работать нормально. Это код в index.php:
<script>
$(document).ready(function() {
$("#mail").click(function() {
$.post("form.php",
{
message: document.myForm.message.value,
from: document.myForm.from.value,
email: document.myForm.email.value,
},
function(data,status) {
$("#form").hide(1000);
$("button").hide(1000);
$(".tp_contact_left").html(data);
}
);
});
});
</script>
<!-- Formulario -->
<span class="tp_contact_left">
<form name="myForm" id="form" method="post" action="" />
<fieldset>
<input type="text" name="from" placeholder="Tu nombre" required><br>
<input type="text" name="email" placeholder="Tu e-mail" required><br>
<textarea name="message" rows="15" cols="40" required draggable="false" placeholder="Escribe aquí tu mensaje"></textarea><br>
<input type="reset" value="Delete">
</fieldset>
</form>
<button id="mail">Send</button>
</span>
И в form.php:
$to = '[email protected]';
$subject = 'Contact';
$message = 'Text content<br /><br />'
. 'Nombre: '
. $_POST["from"]
. '<br />Email: '
. $_POST["email"]
. '<br />Mensaje: '
. $_POST["message"];
$headers = 'From: [email protected]' . "\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1';
if (!mail ($to, $subject, $message, $headers)) {
echo 'Error.';
}
else {
echo 'Thanks. Message sent.';
}
Но когда я добавить код ReCaptcha, я не знаю, куда поместить г-recaptcha- переменной ответа при использовании метода jQuery post. С grecaptcha.getResponse()
Я получаю ответ json, но я не могу отправить запрос на сообщение в form.php. Кроме того, ничто перед тем $response = grecaptcha.getResponse();
не beign выполняется:
<script>
$(document).ready(function() {
$("#mail").click(function() {
// New line
$response = grecaptcha.getResponse();
alert($response);
$.post("form.php",
{
message: document.myForm.message.value,
from: document.myForm.from.value,
email: document.myForm.email.value,
// Modified line
grecaptcharesponse: $response
},
function(data,status) {
$("#form").hide(1000);
$("button").hide(1000);
$(".tp_contacto_left").html(data);
}
);
});
});
</script>
<span class="tp_contact_left">
<form name="myForm" id="form" method="post" action="" />
<fieldset>
<input type="text" name="from" placeholder="Tu nombre" required><br>
<input type="text" name="email" placeholder="Tu e-mail" required><br>
<textarea name="message" rows="15" cols="40" required draggable="false" placeholder="Escribe aquí tu mensaje"></textarea><br>
<div class="g-recaptcha" data-sitekey="sitekey"></div>
<input type="reset" value="Borrar">
<input id="mail" name="enviar_mail" type="submit" value="Enviar">
</fieldset>
</form>
</span>
Код в form.php является:
<?php
if (isset ($_POST['grecaptcharesponse'])) {
$captcha = $_POST['grecaptcharesponse'];
}
if (!$captcha) {
echo 'Por favor, haz click en el checkbox';
exit;
}
$to = '[email protected]';
$subject = 'Formulario de contacto';
$message = 'Nuevo mensaje recibido desde el formulario de la web<br /><br />'
. 'Nombre: '
. $_POST["from"]
. '<br />Email: '
. $_POST["email"]
. '<br />Mensaje: '
. $_POST["message"];
$headers = 'From: Formulario web <[email protected]' . "\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1';
$response = file_get_contents ("https://www.google.com/recaptcha/api/siteverify?secret=SECRETKEY&response="
. $captcha . "&remoteip="
. $_SERVER['REMOTE_ADDR']);
$result = json_decode ($response);
if (!$result->success) {
echo 'Spam';
exit;
}
if (!mail ($to, $subject, $message, $headers)) {
echo 'Error en el envío.';
}
else {
echo 'Gracias por contactar con nosotros.';
}
?>
Есть ли какой-нибудь способ, чтобы отправить данные г-Recaptcha-ответ методу пост JQuery?
Спасибо за ваш ответ @ user3847106, вы были правы с синтаксисом ... Теперь я могу декодировать ответ и обрабатывать recaptcha правильно. Но когда я пытаюсь передать grecaptcha.getResponse() в. Функция post() jQuery просто не работает. См. Измененный код выше. – MorbidDesign