2015-02-02 1 views
2

Я использую GoDaddy в качестве своего веб-сервера.reCAPTCHA и PHP для отправки формы электронной почты

Я пытаюсь внедрить reCAPTCHA в мою форму электронной почты для своего веб-сайта, однако, похоже, она не сможет работать. То есть, я передаю тест reCAPTCHA, но письмо не отправляется.

Я использовал PHP и HTML только для этого сайта.

Я также добавил скрипт в моей голове тег

<script src='https://www.google.com/recaptcha/api.js'></script> 

Вот фрагменты кода.

HTML:

<form action="#" id="form" method="post" name="form"> 
     <div class="form-group"> 
      <label for="name-field">Name</label> 
      <input name="vname" class="form-control" placeholder="Enter Your Full Name" type="text" value=""> 
     </div> 
     <div class="form-group"> 
      <label for="email-field">Email address</label> 
      <input name="vemail" class="form-control" placeholder="Enter Your Email" type="text" value=""> 
     </div> 
     <div class="form-group"> 
      <label for="contract-field">Enter Contract Here</label> 
      <textarea name="msg" class="form-control" placeholder="Enter Contract Here" rows="5"></textarea> 
     </div> 
     <div class="g-recaptcha form-group" data-sitekey="SITEKEY"></div> 
     <div class="form-group"><button id="send" name="submit" type="submit" class="btn btn-default">Submit</button></div> 
</form> 

PHP:

<?php 
//Checking For reCAPTCHA 
$captcha; 
if(isset($_POST['g-recaptcha-response'])){ 
    $captcha=$_POST['g-recaptcha-response']; 
} 
// Checking For correct reCAPTCHA 
$response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=SECRETKEY&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']); 
if($response.success==false){ 
    echo "Your CAPTCHA response was wrong." 
    exit; 
} 
else{ 
    // Checking For Blank Fields.. 
    if($_POST["vname"]==""||$_POST["vemail"]==""||$_POST["msg"]==""){ 
     echo "Fill All Fields.."; 
    } 
    else{ 
     // Check if the "Sender's Email" input field is filled out 
     $email=$_POST['vemail']; 
     // Sanitize E-mail Address 
     $email =filter_var($email, FILTER_SANITIZE_EMAIL); 
     // Validate E-mail Address 
     $email= filter_var($email, FILTER_VALIDATE_EMAIL); 
     if (!$email){ 
      echo "Invalid Sender's Email"; 
     } 
     else{ 
      $to = '[email protected]'; 
      $subject = 'Test'; 
      $message = $_POST['msg']; 
      $headers = 'From:'. $email . "\r\n"; // Sender's Email 
      // Message lines should not exceed 70 characters (PHP rule), so wrap it 
      $message = wordwrap($message, 70, "\r\n"); 
      // Send Mail By PHP Mail Function 
      mail($to, $subject, $message, $headers); 
      echo "Your mail has been sent successfully!"; 
     } 
    } 
} else { 
    echo "Your CAPTCHA response was wrong. Try again." 
    exit; 
}?> 

Am I реализации на стороне сервера не так? Или это клиентская сторона?

ответ

2

В вашем коде есть синтаксические ошибки в if и else. Просто перепишите свой код, как показано ниже, и попробуйте его.

<?php 
//Checking For reCAPTCHA 
$captcha; 
if (isset($_POST['g-recaptcha-response'])) { 
    $captcha = $_POST['g-recaptcha-response']; 
} 
// Checking For correct reCAPTCHA 
$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=SECRETKEY&response=" . $captcha . "&remoteip=" . $_SERVER['REMOTE_ADDR']); 
if (!$captcha || $response.success == false) { 
    echo "Your CAPTCHA response was wrong."; 
    exit ; 
} else { 
    // Checking For Blank Fields.. 
    if ($_POST["vname"] == "" || $_POST["vemail"] == "" || $_POST["msg"] == "") { 
     echo "Fill All Fields.."; 
    } else { 
     // Check if the "Sender's Email" input field is filled out 
     $email = $_POST['vemail']; 
     // Sanitize E-mail Address 
     $email = filter_var($email, FILTER_SANITIZE_EMAIL); 
     // Validate E-mail Address 
     $email = filter_var($email, FILTER_VALIDATE_EMAIL); 
     if (!$email) { 
      echo "Invalid Sender's Email"; 
     } else { 
      $to = '[email protected]'; 
      $subject = 'Test'; 
      $message = $_POST['msg']; 
      $headers = 'From:' . $email . "\r\n"; 
      // Sender's Email 
      // Message lines should not exceed 70 characters (PHP rule), so wrap it 
      $message = wordwrap($message, 70, "\r\n"); 
      // Send Mail By PHP Mail Function 
      if (mail($to, $subject, $message, $headers)) { 
       echo "Your mail has been sent successfully!"; 
      } else { 
       echo "Failed to send email, try again."; 
       exit ; 
      } 
     } 
    } 
} 
?> 
+0

Я смог отправить и получить письмо, однако проблема в том, что я могу просто игнорировать reCAPTCHA. Любая идея почему? – Tony

+0

Да, я отредактирую код и напишу его еще раз, просто взгляните через 5 минут – sailesh

+2

Я решил это! Я сделал это 'if ($ response. Success == false) {' в это 'if (! $ Captcha || $ response.success == false) {'. Спасибо за помощь :) – Tony