2011-05-13 90 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()空变量,什么也不做。

相关问题