簡體   English   中英

WordPress聯系人表單驗證(包括Google reCaptcha驗證問題)

[英]WordPress Contact Form Validation Including Google reCaptcha Validation Issue

今天早上我一直在忙於創建自定義WordPress聯系人頁面模板,並向其中添加了新的Google reCaptcha,以減少垃圾郵件發送者。 我創建了一個validation.php文件,該文件的聯系頁面操作可以驗證所有字段和Google reCaptcha是否正確。 問題是它對我不起作用。 我已經進行了所有設置,因為它應該在WordPress文件系統中,並且WordPress正在導航到validation.php文件,這使我認為我的驗證代碼無法正常工作。 請看下面:

HTML代碼:

<div class="col-xs-12 col-sm-8 col-lg-9">

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

      <div id="content" role="main">
              <?php get_template_part('includes/loops/content', 'page'); ?>
        <hr/>

          <form action="validate-contact-form.php" id="contactForm" method="post">
            <fieldset>
            <legend>Contact Us</legend>
           <div class="form-group">
             <div class="col-md-12">
             <input id="cf-name" name="contactName" type="text" placeholder="Please enter your full name here." class="form-control" required=""/>
             </div>
           </div>
           <br /><br />
           <div class="form-group">
             <div class="col-md-12">
             <input id="cf-email" name="email" type="text" placeholder="Please enter your e-mail address here." class="form-control" required="" />
             </div>
           </div>
           <br /><br />
           <div class="form-group">
             <div class="col-xs-12">                   
             <textarea class="form-control" id="comments" placeholder="Please enter your message here." name="comments" rows="20" class="form-control" required="" ></textarea>
             </div>
           </div><hr/>
           <div class="form-group">
             <div class="col-xs-12"><hr/>
             <div class="g-recaptcha" data-sitekey="6Ld6cf4SAAAAABBYX2C3I5Ayx_xLwKSYm2ZUtxen" class="form-control" required=""></div>
             </div>
           </div>
           <div class="form-group">
             <div class="col-xs-12"><hr/>
             <button type="submit"  name="submit" value="Send" class="btn btn-primary">Send Message</button>
             </div>
           </div>
           </fieldset>
         </form>       

    </div><!-- /#content -->
  </div>

Validation.php代碼:

    <?php
  if(isset($_POST['submit'])) {
      if(trim($_POST['contactName']) === '') {
        $nameError = 'Please enter your name.';
        $hasError = true;
      } else {
        $name = trim($_POST['contactName']);
      }

      if(trim($_POST['email']) === '')  {
        $emailError = 'Please enter your email address.';
        $hasError = true;
      } else if (!preg_match("/^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i", trim($_POST['email']))) {
        $emailError = 'You entered an invalid email address.';
        $hasError = true;
      } else {
        $email = trim($_POST['email']);
      }

    if(trim($_POST['comments']) === '') {
      $commentError = 'Please enter a message.';
      $hasError = true;
    } else {

      if(function_exists('stripslashes')) {
        $comments = stripslashes(trim($_POST['comments']));
      } else {
        $comments = trim($_POST['comments']);
      }   
    }

    if(isset($_POST['g-recaptcha-response'])&&$_POST['g-recaptcha-response']){
        var_dump($_POST);
        $secret = 'MY SITE KEY';
        $ip = $_SERVER['REMOTE_ADDR'];
        $captcha = $_POST['g-recaptcha-response'];
        $rsp = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret=$secret&response=$captcha&remoteip=$ip');
        var_dump($rsp);
        $array = json_decode($rsp, TRUE);
    if($array['success']) {

    }

  }

    if(!isset($hasError)) {
      $emailTo = get_option('tz_email');
      if (!isset($emailTo) || ($emailTo == '') ){
        $emailTo = get_option('admin_email');
      }
      $subject = '[PHP Snippets] From '.$name;
      $body = "Name: $name \n\nEmail: $email \n\nComments: $comments";
      $headers = 'From: '.$name.' <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $email;

      wp_mail($emailTo, $subject, $body, $headers);
      $emailSent = true;

      echo "Done";
    }
      else {
      echo "Spam";
    }
  } 

}
?>

使用雙引號:

$rsp = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$secret&response=$captcha&remoteip=$ip");

否則變量將不起作用。 PHP僅在字符串中用雙引號引起來時才搜索變量並顯示其值。 您可以使用單引號,但隨后必須將變量和字符串分開,如下所示:

  $rsp = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$captcha.'&remoteip='.$ip);

在性能方面,總是最好使用單引號,因此PHP不需要在完整的字符串中搜索變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM