Trying to implement a custom coded contact form with a google reCaptcha but nothing seems to be taking. This is using wordpress (don't wish to use the plugins' The validation comes back with "Thanks for posting comment." Get no email /message from the form, checked my junk mail etc. Any help would be appreciated. My HTML form is below:
<div class="contact_form">
<h1>Contact Form</h1>
<form id="comment_form" action="" method="post">
<p>Your Name (required) <br />
<input type="text" name="cf-name" placeholder="type your name" pattern="[a-zA-Z0-9 ]+" size="40" />
</p>
<p>Your Email (required) <br />
<input type ="email" name="cf-email" placeholder="type your email" size ="40"><br>
</p>
<p>Subject (required)<br />
<input type ="text" name="cf-subject" placeholder="type your subject" size ="40"><br>
</p>
<p>Your Message<br />
<textarea rows="10" cols="35" name="cf-message"></textarea>
</p>
<div class="g-recaptcha" data-sitekey="SITEKEYHERE"></div>
<input type="submit" name="submit" value="Post Comment">
</form>
</div>
And my php to send email and check reCaptcha:
<?php
// if the submit button is clicked, send the email
if ( isset( $_POST['cf-submitted'] ) ) {
// sanitize form values
$name = sanitize_text_field( $_POST["cf-name"] );
$email = sanitize_email( $_POST["cf-email"] );
$subject = sanitize_text_field( $_POST["cf-subject"] );
$message = esc_textarea( $_POST["cf-message"] );
// get the blog administrator's email address
$to = "my@email.here";
$headers = "From: $name <$email>" . "\r\n";
// If email has been process for sending, display a success message
if ( wp_mail( $to, $subject, $message, $headers ) ) {
echo '<div>';
echo '<p>Thanks for contacting me, expect a response soon.</p>';
echo "$to";
echo '</div>';
} else {
echo 'An unexpected error occurred';
}
}?>
<?php
$name;$email;$subject;$message;$captcha;
if(isset($_POST['cf-name'])){
$email=$_POST['cf-name'];
}if(isset($_POST['cf-email'])){
$email=$_POST['cf-email'];
}if(isset($_POST['cf-subject'])){
$email=$_POST['cf-subject'];
}if(isset($_POST['cf-message'])){
$email=$_POST['cf-message'];
}if(isset($_POST['g-recaptcha-response'])){
$captcha=$_POST['g-recaptcha-response'];
}
if(!$captcha){
echo '<h2>Please check the the captcha form.</h2>';
exit;
}
$response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=SECRETKEYHERE".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']);
if($response.success==false)
{
echo '<h2>spam</h2>';
}else
{
echo '<h2>Thanks for posting comment.</h2>';
}
?>
Your mailer code is being triggered before your validating your captcha.
Try moving your code around:
<?php
$name;$email;$subject;$message;$captcha;
if(isset($_POST['cf-name'])){
$email=$_POST['cf-name'];
}if(isset($_POST['cf-email'])){
$email=$_POST['cf-email'];
}if(isset($_POST['cf-subject'])){
$email=$_POST['cf-subject'];
}if(isset($_POST['cf-message'])){
$email=$_POST['cf-message'];
}if(isset($_POST['g-recaptcha-response'])){
$captcha=$_POST['g-recaptcha-response'];
}
if(!$captcha){
echo '<h2>Please check the the captcha form.</h2>';
exit;
}
$response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=SECRETKEYHERE".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']);
if($response.success==false){
echo '<h2>spam</h2>';
}else{
// sanitize form values
$name = sanitize_text_field( $_POST["cf-name"] );
$email = sanitize_email( $_POST["cf-email"] );
$subject = sanitize_text_field( $_POST["cf-subject"] );
$message = esc_textarea( $_POST["cf-message"] );
// get the blog administrator's email address
$to = "my@email.here";
$headers = "From: $name <$email>" . "\r\n";
// If email has been process for sending, display a success message
if ( wp_mail( $to, $subject, $message, $headers ) ) {
echo '<div>';
echo '<p>Thanks for contacting me, expect a response soon.</p>';
echo "$to";
echo '</div>';
} else {
echo 'An unexpected error occurred';
}
}
?>
I'm tapping this out on my phone so you can tidy this code up a lot. But the logic should be right.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.