我今天已经问了一个问题,我得到了一个半好的脚本。
我的意思是什么?
我尝试制作一个“逻辑”的验证码。对真的。不要问问题,我会以某种方式写出来。但是我有一个包含这些行的表的数据库: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”语句中的某个地方,但不知道在哪里。请帮忙。
答案 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代码和数据库中!