2017-01-16 101 views
0

最近垃圾郵件的情況已經失控在我的網站,我決定我真的不得不做一些事情。谷歌reCAPTCHA似乎是從機器人中挑選出人的最佳方式。谷歌ReCAPTCHA的HTML格式與PHP

我沒有太多的PHP經驗,這讓我很難完成實現。我的表格的

HTML端:

<div class="col-lg-6 no-gap contact-form"> 
      <header class="sec-heading"> 
       <br> 
       <h2>Contact</h2> 
       <span class="subheading">SUBHEADING</span> 
      </header> 

      <form action="assets/contact-form/contact-form.php" method="POST" class="form-ajax wow fadeInUp" data-wow-duration="1s" data-wow-delay=".1s"> 

       <!-- Name --> 
       <div class="form-group"> 
       <input type="text" name="name" id="name-contact-1" class="form-control validate-locally" placeholder="Write your name"> 
       <label for="name-contact-1">Name</label> 
       <span class="pull-right alert-error"></span> 
       </div> 

       <!-- Email --> 
       <div class="form-group"> 
       <input type="email" name="email" id="email-contact-1" class="form-control validate-locally" placeholder="Your email"> 
       <label for="email-contact-1">Email</label> 
       <span class="pull-right alert-error"></span> 
       </div> 

      <!-- Select --> 
      <div class="form-group"> 
       <select class="form-control" id="select-form" name="select" id="select"> 

       <option id="optiona">Option A</option> 
       <option id="optionb">Option B</option> 
       <option id="optionc">Option C</option> 
       <option id="optiond">Option D</option> 
       </select> 
       <label for="select-form">Your choice</label> 
      </div> 

      <!-- Select --> 
      <div class="form-group"> 
       <select class="form-control" id="select-form" name="select1" id="select1"> 
       <option value="" disabled selected>Choose.. </option> 
       <option id="option1">Option 1</option> 
       <option id="option2">Option 2</option> 
       <option id="option3">Option 3</option> 
       <option id="option4">Option 4</option> 
       </select> 
       <label for="select-form">Options</label> 
      </div> 


       <!-- Message --> 
       <div class="form-group"> 
       <textarea class="form-control" name="message" id="message-contact-1" rows="5" placeholder="Your message"></textarea> 
       <label for="message-contact-1">Message</label> 
       </div> 
      <div class="form-group"> 
       <div class="g-recaptcha" data-sitekey="---SECRET CODE FOR reCAPTCHA---"></div> 
       </div> 
       <br> 

       <input type="submit" name="submit" class="btn pull-right" value="Send message"> 

       <!-- Ajax Message --> 
       <div class="ajax-message col-md-12 no-gap"></div> 

      </form> 

我的表單的PHP端:

<?php 
    if(isset($_POST['email'])) { 



    $email_to = "[email protected]"; 

    $email_subject = "Message recieved from form"; 





    function died($error) { 


     echo '<div class="alert alert-danger alert-dismissible wow fadeInUp" role="alert"> 
      <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
      <strong>Oops! Something seems to be incorrect. Please check for errors:</strong><br>'; 

     echo $error."<br />"; 

     echo '</div>'; 

     die(); 

    } 





     if(!isset($_POST['name']) || 

     !isset($_POST['email']) || 



     !isset($_POST['message'])) { 

     died('Oops! Something seems to be incorrect. Please check for errors. ');  

    } 



    $name = $_POST['name']; // required 

    $email_from = $_POST['email']; // required 

    $telephone = $_POST['phone']; // not required 

    $message = $_POST['message']; // required 

    $select = $_POST['select']; // required 

    $select1 = $_POST['select1']; // required 




    $error_message = ""; 

    $email_exp = '/^[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/'; 

    if(!preg_match($email_exp,$email_from)) { 

    $error_message .= 'The email adress you entered is invalid<br />'; 

    } 

    if(strlen($name) < 2) { 
    $error_message .= 'The name you have entered seems to be invalid<br />'; 

} 

    if(strlen($message) < 2) { 

    $error_message .= 'The message you entered seems to be invalid<br />'; 

    } 

    if(strlen($error_message) > 0) { 

    died($error_message); 

    } 

    $email_message = "A message was recieved: <br>\n\n"; 



    function clean_string($string) { 

     $bad = array("content-type","bcc:","to:","cc:","href"); 

     return str_replace($bad,"",$string); 

    } 

    $email_message .= "<br><b>Name:</b> ".clean_string($name)."\n"; 

    $email_message .= "<br><b>Email:</b> ".clean_string($email_from)."\n"; 

    $email_message .= "<br><b>Options1:</b> ".clean_string($select)."\n"; 

    $email_message .= "<br><b>Options2:</b> ".clean_string($select1)."\n"; 

    $email_message .= "<br><b>Message:</b> ".clean_string($message)."\n"; 


$headers = 'From: '.$email_from."\r\n". 
$headers = 'Content-type: text/html; charset=utf-8' . "\r\n"; 

'Reply-To: '.$email_from."\r\n" . 

'X-Mailer: PHP/' . phpversion(); 

@mail($email_to, $email_subject, $email_message, $headers); 
?> 

<div class="alert alert-success alert-dismissible wow fadeInUp" role="alert"> 
    <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
    Thank you! Your message has been sent! 
</div> 

<?php } ?> 

福利局,因爲我,我一直在試圖遵循教程如何使這項工作,所以我試圖執行一個函數在PHP文件的頂部看起來像:

<?php 

$curl = curl_init(); 

curl_setopt_array($curl, [ 
    CURLOPT_RETURNTRANSFER => 1, 
    CURLOPT_URL => 'https://www.google.com/recaptcha/api/siteverify', 
    CURLOPT_POST => 1, 
    CURLOPT_POSTFIELDS => [ 
     'secret' => 'SECRET CODE FROM GOOGLE', 
     'response' => $_POST['g-recaptcha-response'], 

     ], 
]); 

$response = json_decode(curl_exec($curl)); 

if (!$response->success) { 

但我似乎無法讓它工作,我不知道如何解決應該產生錯誤信息的「} else {」部分。

有更多經驗的人能幫助我嗎?

謝謝

回答

0

最髒的方法是包裝與車驗證碼,校驗碼您的實際電子郵件發送代碼。首先,移動你的死亡()函數以外的if {..}聲明。您可以重用該函數作爲一個非常簡單的錯誤處理程序。

<?php 
//recaptcha test 
$curl = curl_init(); 
curl_setopt_array($curl, [ 
    CURLOPT_RETURNTRANSFER => 1, 
    CURLOPT_URL => 'https://www.google.com/recaptcha/api/siteverify', 
    CURLOPT_POST => 1, 
    CURLOPT_RETURNTRANSFER => 1, 
    CURLOPT_FOLLOWLOCATION => 1, 
    CURLOPT_POSTFIELDS => [ 
     'secret' => 'SECRET CODE FROM GOOGLE', 
     'response' => $_POST['g-recaptcha-response'], 
     ], 
]); 
$response = json_decode(curl_exec($curl)); 

//UPDATE: if your check pass, go on 
if ($response->success) { 
    //your actual code. 
} else { 
    died("Recaptcha missing."); 
} 
?> 
+0

謝謝您花時間解決我的問題。當我嘗試這種方法時,由於某種原因沒有阻止我發送表單而沒有檢查recaptcha-box。所以表單的工作方式,基本上沒有recaptcha,儘管增加了代碼和if語句。不能真的讓我的頭在... –

+0

@EricL代碼更新。我剛剛使用了'$ response-success'屬性,就像你之前的代碼 –

+0

非常感謝,這工作! –