非常业余的开发人员谁可以剪切和粘贴,我正在尝试添加一个reCaptcha v2到一个旧的html / php网站,
我已经让验证码工作了,唯一的问题是当表单提交时,它会转到实际的地址/action.php,并显示一些代码+“谢谢”消息。
<?php
if($_POST) {
require('constant.php');
$user_name = filter_var($_POST["name"], FILTER_SANITIZE_STRING);
$user_email = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL);
$user_phone = filter_var($_POST["phone"], FILTER_SANITIZE_STRING);
$content = filter_var($_POST["content"], FILTER_SANITIZE_STRING);
if(empty($user_name)) {
$empty[] = "<b>Name</b>";
}
if(empty($user_email)) {
$empty[] = "<b>Email</b>";
}
if(empty($user_phone)) {
$empty[] = "<b>Phone Number</b>";
}
if(empty($content)) {
$empty[] = "<b>Comments</b>";
}
if(!empty($empty)) {
$output = json_encode(array('type'=>'error', 'text' => implode(", ",$empty) . ' Required!'));
die($output);
}
if(!filter_var($user_email, FILTER_VALIDATE_EMAIL)){ //email validation
$output = json_encode(array('type'=>'error', 'text' => '<b>'.$user_email.'</b> is an invalid Email, please correct it.'));
die($output);
}
//reCAPTCHA validation
if (isset($_POST['g-recaptcha-response'])) {
require('component/recaptcha/src/autoload.php');
$recaptcha = new \ReCaptcha\ReCaptcha(SECRET_KEY, new \ReCaptcha\RequestMethod\SocketPost());
$resp = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']);
if (!$resp->isSuccess()) {
$output = json_encode(array('type'=>'error', 'text' => '<b>Captcha</b> Please try the captcha again!'));
die($output);
}
}
$toEmail = "email@email.com";
$mailHeaders = "From: " . $user_name . "<" . $user_email . ">\r\n";
$mailBody = "User Name: " . $user_name . "\n";
$mailBody .= "User Email: " . $user_email . "\n";
$mailBody .= "Phone: " . $user_phone . "\n";
$mailBody .= "Content: " . $content . "\n";
if (mail($toEmail, "Contact Mail", $mailBody, $mailHeaders)) {
$output = json_encode(array('type'=>'message', 'text' => 'Hi '.$user_name .', thank you for the comments. We will get back to you shortly.'));
die($output);
} else {
$output = json_encode(array('type'=>'error', 'text' => 'Unable to send email, please contact'.SENDER_EMAIL));
die($output);
}
}?>
HTML如下所示
<form id="frmContact" action="action.php" method="POST" novalidate="novalidate">
<div class="label">Name:</div>
<div class="field">
<input type="text" id="name" name="name"
placeholder="enter your name here"
title="Please enter your name" class="required"
aria-required="true" required>
</div>
<div class="label">Email:</div>
<div class="field">
<input type="text" id="email" name="email"
placeholder="enter your email address here"
title="Please enter your email address"
class="required email" aria-required="true" required>
</div>
<div class="label">Phone Number:</div>
<div class="field">
<input type="text" id="phone" name="phone"
placeholder="enter your phone number here"
title="Please enter your phone number"
class="required phone" aria-required="true" required>
</div>
<div class="label">Comments:</div>
<div class="field">
<textarea id="comment-content" name="content"
placeholder="enter your comments here"></textarea>
</div>
<div class="g-recaptcha" data-sitekey="**My-Site-Key**"></div>
<div id="mail-status"></div>
<button type="Submit" id="send-message" style="clear: both;">Send
Message</button>
它显示以下Screenshot
我希望它不是加载一个新的网页,而是只显示下面的消息或其他什么。
任何建议都将不胜感激,皮特
发布于 2019-03-15 07:41:02
我刚刚意识到问题是您正在使用另一个页面来处理recaptcha。如果您将HTML添加到php页面的末尾,则可以对HTML公式和PhP处理使用相同的页面。(在下面的旧部分中,我认为它是同一页),所以这就解决了它。因为action.php与公式页不同,所以它在空的action.php页而不是公式页上发布输出。如果使用下面列出的javascript,您仍然可以这样做!PhP和超文本标记语言在同一页上。
希望能有所帮助
下面是老部分!!
它输出"{type:message“之类的内容的原因是使用了"json_encode”。如果这不是问题所在,我猜你只是想把它添加到页面上。为此,您可以尝试使用AJAX请求,因为它可以动态更新网页,而无需重新加载。但是我要做的(因为我是一个菜鸟xD),我会让PhP输出一个变化的javascript代码和空标签。就像这样。
<p id="output"></p>
然后将php添加到输出JavaScript。
echo '<script>var elementOfIntrest = document.getElementById("output");elementOfIntrest.innerHTML = "Hi' . $user_name . ', thank you for the comments. We will get back to you shortly.";</script>';
然而,这仍然会使网页重新加载新的信息。
我不能百分之百地确定它会像你想要的那样工作(不是很确定你想要什么),但希望它能有所帮助。
如果你想通过AJAX请求来实现,你可以阅读更多的here。
https://stackoverflow.com/questions/55177516
复制