![](/img/trans.png)
[英]PHP Form, MailFonction and Google reCaptcha Validation Issue
[英]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.