我想运行迷你程序以确认安全问题:
$questions = array('dog legs','car legs','the best country in the world');
$answers = array(4,4,'USA');
$questionId = rand(0, (count($questions)-1));
然后
$ans = $_POST['answer'];
if($ans == $answers[$questionId]){echo 'Confirmed !';}
所以问题是,每次我回答答案都不正确,因为在发送表单后,rand函数会运行并更改问题!任何解决方案?
答案 0 :(得分:5)
您可以在表单中传入隐藏输入,其值为问号ID,这样就会重新发送ID。
<input type="hidden" name="questionId" value="<?php echo $questionId; ?>"></input>
然后检查表单是否已提交。
<?php
if ($_POST['questionID'])
$questionID = $_POST['questionID'];
else
$questionID = rand(0, (count($questions)-1));
您还可以使用base64编码
来保护所有这些答案 1 :(得分:4)
基本上,您需要将问题ID保存到用户会话中。
如果要复杂,请执行以下操作。
创建一个秘密字符串。 从秘密字符串+正确答案创建md5。 将md5写入表单隐藏字段。 在表单提交时,检查秘密字符串+给定答案是否从表单返回md5。
除非有人知道你的秘密字符串,否则即使没有会话也是安全的。
我的解决方法与在另一个答案中将问题ID存储到sugegsten表单中的问题相同:人们可以简单地操纵问题ID以始终显示一次解决的问题。会话是唯一或多或少安全的方式
祝你好运
泽索特
答案 2 :(得分:3)
你需要知道原始问题是什么。最简单的方法就是将表单中的问题作为隐藏输入发布:
<form>
<?php echo $questionID; ?>
<input type="text" name="answer" />
<input type="hidden" name="question" value="<?php echo $questionID; ?>" />
</form>
并做
$questions = array('dog legs','car legs','the best country in the world');
$answers = array(4,4,'USA');
$questionID = rand(0, (count($questions)-1));
if (isset($_POST['answer'])) {
$answer = $_POST['answer'];
$question = $_POST['question'];
if ( $questions[ $question ] == $answer ) // you're golden
}