【发布时间】:2015-07-07 05:36:24
【问题描述】:
我正在创建一个非常简单的验证码验证过程。
(当用户尝试登录我的网站 3 次但均未成功时,他会被重定向到验证码页面(captcha.php),以验证他不是垃圾邮件机器人)
验证码值本身是由一串字母和数字随机生成的。一共6位数。
然后,我将此值与用户在文本框中输入的值进行比较。如果值匹配,用户可以继续。如果不是,则页面重新加载,显示错误消息,并生成新的验证码。
非常简单。没有javascript,没有ajax。
除了一件事:如果用户提供正确的值,验证码不会重定向。
相反,它每次都会给出错误消息。
<?php session_start();
include 'database_connect.php';
function getRandomString($length) {
$validCharacters =
"ABCDEFGHIJKLMNPQRSTUVWXYZ123456789";
$validCharNumber = strlen($validCharacters);
$result = "";
for ($i = 0; $i < $length; $i++) {
$index = mt_rand(0, $validCharNumber - 1);
$result .= $validCharacters[$index];
}
return $result; }
$captcha_value = getRandomString(6);
?>
<!DOCTYPE html>
<html>
<head>
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-store">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
<META CHARSET="UTF-8">
<title>Captcha Test</title>
</head>
<body>
<fieldset><legend>CAPTCHA :</legend>
<?php
if (isset($_POST['submit'])) {
$post_captcha = $_POST['captcha'];
if ($post_captcha == $captcha_value) {
$clear_failed_logins = mysqli_query($conn,("Delete FROM
login_attempts where login =
'$_POST[login]'"))
or die(mysqli_error($conn));
header ("Location: /example.com/login.php");
exit();
}
else {
echo "<p style='color:red; font-weight:bold;'>The value you
entered is not correct! Please try again.</p>";
}
}
?>
<p>Please input the characters you see into the text-box below :</p>
<p> <?= $captcha_value ?> </p>
<form method="POST" action="captcha.php">
<input type="text" name="captcha" id="captcha" size=10
autocomplete="off" required><br><br><br>
<input type="submit" name="submit" id="submit" value="SUBMIT">
</form>
</fieldset>
【问题讨论】:
-
是的,因为在提交表单后它会再次为
$captcha_value生成一个新值 -
因为第一次加载页面时没有设置提交。这就是它显示错误消息的原因。您必须更改条件并引入更多错误检查变量。