2015-03-15 3 views
0

Мне нужно отправить почту с помощью 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?

ответ

0

grecaptcha.getResponse() даст вам ответ пользователя.

Кроме того, $ response.success даст ошибку, потому что:

  1. Это не правильный синтаксис. Это PHP, поэтому правильный синтаксис: $ response -> success.
  2. Ответ сервера - это строка json, а не объект.

Вам необходимо декодировать строку json в объект; json_decode ($ ответ); должен сделать трюк. Теперь вы можете использовать $ response -> success, чтобы проверить капчу.

+0

Спасибо за ваш ответ @ user3847106, вы были правы с синтаксисом ... Теперь я могу декодировать ответ и обрабатывать recaptcha правильно. Но когда я пытаюсь передать grecaptcha.getResponse() в. Функция post() jQuery просто не работает. См. Измененный код выше. – MorbidDesign