来自数据库的验证码答案验证无效

时间:2013-04-16 17:35:34

标签: php mysql


我今天已经问了一个问题,我得到了一个半好的脚本。 我的意思是什么? 我尝试制作一个“逻辑”的验证码。对真的。不要问问题,我会以某种方式写出来。但是我有一个包含这些行的表的数据库:id,question,answer。现在,代码来了。它显示了问题,但是当我输入答案时,它什么也没做。它应该根据答案重定向到page success.php或error.php。

<?php

$database_db="general";
$user_db="root";
$password_db="somepass";
$host_db="localhost";

$link = mysqli_connect($host_db, $user_db, $password_db, $database_db);

/* check connection */
if (mysqli_connect_errno()) 
{
    die ("couldnot connect: ".mysqli_connect_error());
    exit();
}   
if (array_key_exists("answer", $_POST) AND array_key_exists("id", $_POST))
{
    $id = intval($_POST['id']);
    $sql="SELECT question, answer FROM captcha WHERE question='$id' AND              answer='".mysqli_real_escape_string($link, $answer)."'";
    $result = mysqli_query($link, $sql)  or exit('$sql failed: '.mysqli_error($link)); 
    $num_rows = mysqli_num_rows($result);
    if($num_rows > 0)
    {
        header("Location: success.php");
    } 
    else 
    {
        header("Location: error.php");
    }
    exit;
}
else
{
    $query = "SELECT id, question FROM `captcha` ORDER BY RAND() LIMIT 1";
    if ($result = mysqli_query($link, $query))
    {
        if ($row = mysqli_fetch_assoc($result)) 
        {
            $id = $row["id"];
            $question = $row["question"];
        }
    }
 }

 ?>
<html>
<body>
    <form method="post">
        <?php echo $question; ?><br />
        <input type="hidden" name="question" id="question" value="<?php echo $id; ?>" />
        <input type="text" name="answer" id="answer" /><br />
        <input type="submit" name="submit" value="submit" /><br />
       </form>
    </body>
</html>



问题出在哪里?我知道它在第二个“if”语句中的某个地方,但不知道在哪里。请帮忙。

1 个答案:

答案 0 :(得分:1)

问题在于

if (array_key_exists("answer", $_POST) AND array_key_exists("id", $_POST))
{
    $id = intval($_POST['id']);

为什么?在表单中,您正在使用另一个“id”作为输入:

<input type="hidden" name="question" id="question" value="<?php echo $id; ?>" /> 因此,要么将输入更改为:

<input type="hidden" name="question" id="id" value="<?php echo $id; ?>" />

或者更改PHP代码中的一些变量:

if (array_key_exists("answer", $_POST) AND array_key_exists("question", $_POST))
{
    $id = intval($_POST['question']);

建议:选择正确的变量名称,并在任何地方坚持使用:在HTML代码,PHP代码和数据库中!