2011-05-13 76 views
2

我試圖第一次將recaptcha添加到聯繫表單中,並且我取得了一些進展,但是現在我有點卡住了。ReCaptcha不接受任何字符串

它不讓我發送任何電子郵件,我找不到原因。在我遇到recaptcha沒有停止錯誤答案的問題之前,但在將recaptcha代碼放在窗體頂部之後,它現在顯示並保護窗體。

下面是做代碼:

<?php 

     require_once('recaptchalib.php'); 
     $privatekey = "xxxxxxxxxxxxxxxxxxxxxx"; 
     $resp = recaptcha_check_answer ($privatekey, 
            $_SERVER["REMOTE_ADDR"], 
            $_POST["recaptcha_challenge_field"], 
            $_POST["recaptcha_response_field"]); 

     if (!$resp->is_valid) { 
      // What happens when the CAPTCHA was entered incorrectly 
      die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." . 
      "(reCAPTCHA said: " . $resp->error . ")"); 
     } else { 
     // Your code here to handle a successful verification 
     if(@mail($your_email,$email_subject,$email_content)) { 
      echo 'Message sent!'; } 
      } 

    if(!$_POST) exit; 

    $email = $_POST['email']; 


     //$error[] = preg_match('/\b[A-Z0-9._%-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b/i',  $_POST['email']) ? '' : 'INVALID EMAIL ADDRESS'; 
     if(!eregi("@",$email)){ 
      $error.="Invalid email address entered"; 
      $errors=1; 
     } 
     if($errors==1) echo $error; 
     else{ 
      $values = array ('name','email','telephone','message'); 
      $required = array('name','email','telephone','message'); 
      $your_email = "[email protected]"; 
      $email_subject = "New Message from XXX: ".$_POST['subject']; 
      $email_content = "New message:\n"; 

      foreach($values as $key => $value){ 
      if(in_array($value,$required)){ 
       if ($key != 'subject' && $key != 'telephone') { 
       if(empty($_POST[$value])) { 
        echo 'PLEASE FILL IN REQUIRED FIELDS'; exit; 
       } 
       } 
       $email_content .= $value.': '.$_POST[$value]."\n"; 
      } 
      } 

     if(@mail($your_email,$email_subject,$email_content)) { 
      echo 'Message sent!'; 
     } 
     else { 
      echo 'ERROR!'; 
     } 
    } 
?> 

下面是從代碼的形式:

<form action="./contact.php" method="post" id="contactform"> 
     <?php 
      require_once('./recaptchalib.php'); 
      $publickey = "xxxxxxxxxxxxxxxxxx"; // you got this from the signup page 
      echo recaptcha_get_html($publickey); 
     ?> 
      <ol> 
      <li> 
       <label for="name">Name</label> 
       <input id="name" name="name" class="text" /> 
      </li> 
      <li> 
       <label for="email">Email</label> 
       <input id="email" name="email" class="text" /> 
      </li> 
      <li> 
       <label for="telephone">Telephone</label> 
       <input id="telephone" name="telephone" class="text" /> 
      </li> 
      <li> 
       <label for="message">Message</label> 
       <textarea id="message" name="message" rows="6" cols="50"></textarea> 
      </li> 

      <li class="buttons"> 
       <input type="image" name="imageField" id="imageField" src="images/send.gif" class="send" /> 
       <div class="clr"></div> 
      </li> 
      </ol> 

</form> 

感謝您的幫助!

回答

0

「不讓我發郵件」是什麼意思?驗證碼失敗,您得到「驗證碼輸入錯誤」?

還是試圖發送郵件,但什麼都沒有顯示出來?

  1. 不要使用eregi。整套ereg函數已被棄用。我看到你有一個preg_match相當於上面的,所以用它來代替。如果你是在PHP 5.2 +,你應該使用filter_var($email, FILTER_VALIDATE_EMAIL)相反,它會做的更好的工作比你regexe。
  2. 不要剿的mail()呼叫與@。郵件本身不會輸出任何錯誤消息,它只會返回true/false。檢查返回值並輸出錯誤消息,如果它是錯誤的。目前,如果它是真的,你只會輸出。
  3. 檢查您的SMTP服務器日誌,如果你有機會獲得它,對PHP和郵件的實際工作,並試圖手頭寬裕郵件推定。也許有一個與SMTP服務器毛刺和郵件滯留在傳出隊列

而在這一切之後,它會出現你想用$your_email$email_subject等發送郵件...之前,您給自己定了這些變量從$ _POST檢索的值。所以,最有可能你打電話mail()空變量,什麼也不做。

相關問題