问题描述
我有一个与Recaptcha的联系表,但是当Recaptcha失败时,所有字段数据也会被清除。当然,这不是理想的,当某人填写了一条长消息,然后又以某种方式忘记重新输入时,所有文本都会丢失。我该如何预防?
非常感谢您的帮助!
这是HTML代码:
<form method="POST" action="contact.PHP" id="contactform" name="contact-form" role="form">
<div class="messages"></div>
<div class="row">
<div class="col-sm-5 col-md-4">
<div class="form-group contact-form-icon">
<label class="sr-only">Naam</label>
<i class="fa fa-user"></i>
<input type="text" placeholder="Naam" id="name" class="form-control" name="name" required>
</div>
<div class="form-group contact-form-icon">
<label for="email" class="sr-only">Email</label>
<i class="fa fa-envelope"></i>
<input type="email" placeholder="Email" id="email" class="form-control" name="email" required>
</div>
<div class="form-group contact-form-icon">
<label for="subject" class="sr-only">Onderwerp</label>
<i class="fa fa-pencil"></i>
<input type="text" placeholder="Onderwerp" id="subject" class="form-control" name="subject" required>
</div>
</div>
<div class="col-sm-7 col-md-8">
<div class="form-group contact-form-icon">
<label for="message" class="sr-only">Bericht</label>
<i class="fa fa-keyboard-o"></i>
<textarea placeholder="Bericht" rows="7" id="message" class="form-control" name="message" required></textarea> <br/>
<div class="g-recaptcha" data-sitekey="XXXXXXX></div>
</div>
</div>
<div class="col-sm-5 col-md-4 text-center contact-button-padding">
<button class="btn-primary btn-contact btn-block" name="submit" type="submit"><i class="fa fa-paper-plane"></i> Verzenden</button>
</div>
</div>
</form>
contact.PHP:
<?PHP
// require ReCaptcha class
require('recaptcha-master/src/autoload.PHP');
// configure
// an email address that will be in the From field of the email.
$from = 'Website <me@website.com>';
// an email address that will receive the email with the output of the form
$sendTo = 'Admin <admin@website.com>';
// subject of the email
$subject = 'Nieuw bericht via contactformulier';
// form field names and their translations.
// array variable name => Text to appear in the email
$fields = array('name' => 'Name','surname' => 'Surname','phone' => 'Phone','email' => 'Email','message' => 'Message');
// message that will be displayed when everything is OK :)
$okMessage = 'Bericht goed ontvangen! Ik neem spoedig contact met jou op.';
// If something goes wrong,we will display this message.
$errorMessage = 'Er is iets misgegaan,probeer even opnieuw aub.';
// ReCaptch Secret
$recaptchaSecret = 'XXXXXXXX';
// let's do the sending
// if you are not debugging and don't need error reporting,turn this off by error_reporting(0);
error_reporting(E_ALL & ~E_NOTICE);
try {
if (!empty($_POST)) {
// validate the ReCaptcha,if something is wrong,we throw an Exception,// i.e. code stops executing and goes to catch() block
if (!isset($_POST['g-recaptcha-response'])) {
throw new \Exception('ReCaptcha is not set.');
}
// do not forget to enter your secret key from https://www.google.com/recaptcha/admin
$recaptcha = new \ReCaptcha\ReCaptcha($recaptchaSecret,new \ReCaptcha\RequestMethod\CurlPost());
// we validate the ReCaptcha field together with the user's IP address
$response = $recaptcha->verify($_POST['g-recaptcha-response'],$_SERVER['REMOTE_ADDR']);
if (!$response->isSuccess()) {
throw new \Exception('ReCaptcha was niet succesvol.');
}
// everything went well,we can compose the message,as usually
$emailText = "Nieuw bericht via contactformulier\n=============================\n";
foreach ($_POST as $key => $value) {
// If the field exists in the $fields array,include it in the email
if (isset($fields[$key])) {
$emailText .= "$fields[$key]: $value\n";
}
}
// All the neccessary headers for the email.
$headers = array('Content-Type: text/plain; charset="UTF-8";','From: ' . $from,'Reply-To: ' . $from,'Return-Path: ' . $from,);
// Send email
mail($sendTo,$subject,$emailText,implode("\n",$headers));
$responseArray = array('type' => 'success','message' => $okMessage);
}
} catch (\Exception $e) {
$responseArray = array('type' => 'danger','message' => $e->getMessage());
}
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
$encoded = json_encode($responseArray);
header('Content-Type: application/json');
echo $encoded;
} else {
echo $responseArray['message'];
}
和contact.js:
```$(function () {
window.verifyRecaptchaCallback = function (response) {
$('input[data-recaptcha]').val(response).trigger('change');
}
window.expiredRecaptchaCallback = function () {
$('input[data-recaptcha]').val("").trigger('change');
}
$('#contact-form').validator();
$('#contact-form').on('submit',function (e) {
if (!e.isDefaultPrevented()) {
var url = "contact.PHP";
$.ajax({
type: "POST",url: url,data: $(this).serialize(),success: function (data) {
var messageAlert = 'alert-' + data.type;
var messageText = data.message;
var alertBox = '<div class="alert ' + messageAlert + ' alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>' + messageText + '</div>';
if (messageAlert && messageText) {
$('#contact-form').find('.messages').html(alertBox);
$('#contact-form')[0].reset();
grecaptcha.reset();
}
}
});
return false;
}
})
});
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)