PHP自制的CAPTCHA问题

时间:2015-04-28 03:09:03

标签: php

所以我创建了自己的PHP CAPTCHA,这是我创建它的方法:

我的数据库中有一个名为'Captchas'的表,在该表中,我有两个类别:ID和Captcha。

在Captcha页面上,我就是这样设置的:

$record = mysql_query("SELECT * FROM captchas ORDER BY rand() LIMIT 1");
while($row=mysql_fetch_array($record)){

$captcha = $row['captcha'];

echo $captcha;

}

然后我有一个带有两个输入的表单,文本和提交

我有以下代码:

echo "<form method='POST'>";
if(isset($_POST['submit'])){
$input_captcha = $_POST['input_captcha'];

if($input_captcha == $captcha){

echo "<p>Correct Captcha.</p>";

} else {


echo "<p>Incorrect Captcha.</p>";

}

}
echo "<input type='text' name='input_captcha'/>";
echo "<input type='submit' name='submit'/>";
echo "</form>";
}

此代码的作用是检查用户的输入是否等于验证码,以便它回显“正确的验证码”,如果不是,则“错误的catpcha”。 但问题是它检查输入的文本是否等于随机数组中的NEXT验证码。我不知道为什么会这样?

2 个答案:

答案 0 :(得分:0)

我认为正在发生的是,当您尝试检查用户输入时,它正在重新加载变量验证码。首先使它不是保存为局部变量,而是将其另存为会话变量。然后尝试使验证码生成器成为一个函数,并且仅在未设置验证码的会话变量时调用它,因此阻止它覆盖您的变量以供以后使用。

这是怎么回事:

  1. 是否设置了验证码变量?是或否:否(我们只是加载页面所以没有设置任何内容)
  2. 继续生成新的验证码会话变量
  3. 现在,当我们检查针对验证码的用户输入时,它将尝试重新生成,但它会询问是否已先设置会话变量。它会发现它实际上已经设置好而不会再生成。
  4. 然后应该导致您与相同的两个变量进行比较。

答案 1 :(得分:0)

不是将验证码代码存储到系统变量中,而是将其存储在会话变量中,然后检查它,因为通过提交表单再次重新加载页面,从而更改/替换先前验证码的值。新的。

希望这可能会有所帮助