我正在使用此代码检查答案是否正确:
<?php
$con=mysqli_connect("localhost","root","","teachme");
//check connection
if (mysqli_connect_errno()) {
echo 'Failed to connect to MySQL: ' . mysqli_connect_error();
}
$query = "SELECT question, answer, explanation FROM grade8u1 WHERE id BETWEEN 1 AND 10 ORDER BY RAND()";
$result = mysqli_query($con, $query);
$row = mysqli_fetch_row($result);
echo ("<b>Question</b>: $row[0]<br>");
echo ("<b>Answer</b>: $row[1]<br>");
echo ("<b>Explanation</b>:<br> $row[2]<br>");
if (isset($_POST['answer'])) {
$answer = $_POST['realanswer'];
if ($_POST['answer'] == $answer) {
echo "<br>";
echo "Last answer was correct";
}
else {
echo "<br>";
echo "Last answer was incorrect";
}
}
?>
<form action="random.php" method="post">
<input type="hidden" name="realanswer" value="<?php echo $row[1]; ?>">
Answer: <input type="text" name="answer">
<input type="submit" value="Submit">
</form>
有一个问题,因为任何人都可以检查或编辑隐藏字段的值。我尝试了其他方式,例如使用会话,但每次用户按下提交时都会替换它们。 谢谢,汤姆。
答案 0 :(得分:2)
您有2个选项。
如果之前的会话不适合你,你就没有正确使用它们! (可能是一个被遗忘的session_start()
电话;这就是通常的情况)
此外,如果这是针对CAPTCHA或类似的,那么不要使用选项(1);黑客可以多次重复使用相同的隐藏答案/真实答案组合。您可以通过添加&amp;来减少问题。检查时间戳或使值一次性使用,但使用会话会更容易。