PHP Captcha显示错误消息,即使Captcha输入正确



我创建了一个联系人表单,一旦用户输入他们的详细信息并单击提交,他们输入的详细信息就会发送到我的电子邮件中。表单运行良好,电子邮件正在发送,但我注意到我会从联系表单中收到很多垃圾邮件。我决定阻止垃圾邮件的最佳方法是添加一个captcha,这样用户必须在提交表单之前在captcha图像中输入字母。

我已经能够显示captcha图像,然而,即使没有正确输入captcha,表单似乎仍然会提交。

这是我的联系表格代码

<?php
if (isset($_POST["submit"])) {
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$captcha = $_POST['captcha-input'];
$from= 'From:' . $name .  "rn" .'Reply-To:' . $email . "rn" .'X-Mailer: PHP/' . phpversion();
$to = 'example@yahoo.com'; 
$subject = 'Message from example.com';
$body = "$message";

if (!$_POST['name']) {
$errorName = 'Please enter your name';
}


if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$errorEmail = 'Please enter a valid email address';
}


if (!$_POST['message']) {
$errorMessage = 'Please enter your message';
}
if (!$_POST['captcha-input'] || filter_var($_POST['captcha-input'], FILTER_SANITIZE_STRING)) {
$errorCaptcha = 'Please enter the captcha';
} 

if ($_SESSION['CAPTCHA_CODE'] !== $captchaUser) {
$result = '<div id="error" class="error">CAPTCHA has failed</div>';
} else if (!$errorName && !$errorEmail && !$errorMessage) {
if (mail ($to, $subject, $body, $from)) {
$result='<div id="success" class="success">Thank You! I will be in touch</div>';
} else {
$result='<div class="error">Sorry there was an error sending your message. </div>';
}
$_POST = array();
}
}

我能看到的是,您的变量名称有一个错误。在行中:

$captcha = $_POST['captcha-input'];

您正在读取用户向$captcha变量输入的captcha。

但是这里:

if ($_SESSION['CAPTCHA_CODE'] !== $captchaUser) {

您使用了错误的变量名进行比较!

应该是这样的:

if ($_SESSION['CAPTCHA_CODE'] !== $captcha) {

编辑

我假设,您在主IF条件之后(在显示发生之前(设置catpcha:

<?php
// for session
session_start();
if (isset($_POST["submit"])) {
//... all your code goes here..
}
// generate the captcha code and store it in session
$_SESSION['CAPTCHA_CODE'] = 'new_captcha_code_generated';

此外,我还注意到,您没有调用session_start()函数。请确保在所有页面中,在PHP代码一开始就调用此函数。那么只有SESSION才能正常工作!参考:https://www.php.net/manual/en/function.session-start.php

看起来您使用的是一个从未初始化的变量,行中为:

if ($_SESSION['CAPTCHA_CODE'] !== $captchaUser)

您使用的是从未创建过的$captchaUser变量,也许您指的是您在页面顶部初始化的$captcha变量?

最新更新