2017-02-09 100 views
1
<!DOCTYPE html> 
<html> 
    <head> 
     <title> 
      Google Captcha Form With Send Mail 
     </title> 
     <meta charset="utf-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
     <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"> 
     <link rel="stylesheet" type="text/css" href="css/bootstrap-theme.min.css"> 
     <link rel="stylesheet" type="text/css" href="css/style.css"> 
    </head> 
    <body> 
     <form id="contactform" action="action.php" method="post" class="form" role="form"> 
      <div class="form-group"> 
       <div class="row"> 
        <div class="col-lg-3"> 
         <label>Name:</label> 
        </div> 
        <div class="col-lg-5"> 
         <input class="form-control required" id="vname" name="vname" placeholder="Your Name" type="text" required /> 
        </div> 
       </div> 
      </div> 
      <br> 
      <div class="form-group"> 
       <div class="row"> 
        <div class="col-lg-3"> 
         <label>Email:</label> 
        </div> 
        <div class="col-lg-5"> 
         <input class="form-control required" id="vemail" name="vemail" placeholder="Your Email" type="email" required /> 
        </div> 
       </div> 
      </div> 
      <br> 
      <div class="form-group"> 
       <div class="row"> 
        <div class="col-lg-3"> 
         <label>Information:</label> 
        </div> 
        <div class="col-lg-5"> 
         <textarea type="text" name="msg" id="msg" rows="5" cols="50" class="form-control"></textarea> 
        </div> 
       </div> 
      </div> 
      <br> 
      <div class="form-group"> 
       <div class="row"> 
        <div class="col-lg-3"> 
         <label>Verify Whether Human</label> 
        </div> 
        <div class="col-lg-5"> 
         <div class="g-recaptcha" data-sitekey="PRIVATE" class="form-control"> 
         </div> 
        </div> 
       </div> 
      </div> 
      <br> 
      <div class="form-group"> 
       <input type="submit" class="btn btn-success form-send" value="Send"> 
      </div> 
     </form> 
     <script src="js/jquery.min.js"></script> 
     <script src="js/recaptcha.js"></script> 
     <script src="js/bootstrap.min.js"></script> 
    </body> 
</html> 

,這裏是下面的PHP我收到錯誤在我的谷歌驗證的驗證碼與郵件設置

<?php 
$captcha; 
if (isset($_POST['g-recaptcha-response'])) { $captcha = $_POST['g-recaptcha-response']; } 
// Check for correct reCAPTCHA 
$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret='PRIVATE'&response=" . $captcha . '&remoteip=' . $_SERVER['REMOTE_ADDR']); 
if (!$captcha || $response.success == false) { 
    echo "Your CAPTCHA response was wrong"; 
    exit ; 
} else { 
    // Check for Blank Fields.. 
    if ($_POST["vname"] == "" || $_POST["vemail"] == "" || $_POST["msg"] == "") { 
     echo "Please fill all required 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 = 'New Form Entry'; 
      $message = "New message was submitted from <br /> " . "<strong>" . $_POST['vname'] . "</strong>" . "<br /><br />The message is:<br />" . "<strong>" . $_POST['msg'] . "</strong>"; 
      $headers = "From:" . $_POST['vname'] . "<" . $email . ">"; 
      $headers .= "MIME-Version: 1.0" . "\r\n"; 
      $headers .= "Content-type:text/html;charset=UTF-8" . "\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 ; 
      } 
     } 
    } 
} 
?> 

注意:使用未定義的常量的成功 - 在 ç假設「成功」:\ XAMPP \ htdocs中\ captchaform \ action.php的第6行

我得到這個錯誤幫我這個我triend使用JSON解碼沒有幫助,所以我在哪裏錯了

+1

每股$響應 – Naincy

+0

的輸出是什麼'$ response.success'其不是JS對象,在php'.'中用於連接字符串而不是獲取對象元素 – C2486

+0

@Naincy {「success」:true,「challenge_ ts「:」2017-02-09T12:18:22Z「,」hostname「:」localhost「} –

回答

3

$ response is JSON data and PHP you can not use。操作員獲取其密鑰。 - 轉換爲數組 - 訪問鍵

因爲你的反應是這樣的

{ "success": true, "challenge_ts": "2017-02-09T12:18:22Z", "hostname": "localhost" } 

做這樣的事情:

$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret='PRIVATE'&response=" . $captcha . '&remoteip=' . $_SERVER['REMOTE_ADDR']); 
// Convert json to array 
$response = ($response) ? json_decode($response, true) : []; 
// If array not empty then perform your logic 
if ($res) { 
    if (!$captcha || $response['success'] == false) { 
    echo "Your CAPTCHA response was wrong"; 
    exit ; 
    } else { 
    // your code 
    ..... 
     .... 
    } 
} 

這將工作。

+0

可能你需要使用'json_decode($ response,true)'來獲取數組,請檢查:http://php.net/manual/en/function.json-decode.php – C2486

+1

謝謝! :)錯過了它.. – Naincy

+0

它的工作得到它賓果 –