我有一个基本的数学问题,用户必须先回答才能发送电子邮件:
$first_num = rand(1, 4);
$second_num = rand(1, 4);
$send = @$_POST['send'];
if($send){
//The user's answer from the input box
$answer = @$_POST["answer"];
if($answer == $first_num + $second_num) {
//Do stuff
}
else {
$error_message = "You answered the question wrong!";
}
}
我正确地回答了这个问题(除非我的一年级数学已经关闭!)但它说我的问题是错误的。我不确定问题是什么,但我想这与php在页面加载时立即执行的事实有关,所以一旦用户按下提交按钮就会生成新的数字?还是我离开了?如果是这种情况,可以采取哪些措施来解决这个问题?
答案 0 :(得分:3)
问题是每次调用脚本时都要设置值。因此,当您发布表单时,会设置两个新值,它们可能与您第一次调用脚本以显示表单时的值不同。
您应该将变量存储在会话中,并在处理发布请求时检索这些值。
类似的东西:
session_start();
if (!isset($_SESSION['numbers']))
{
$_SESSION['numbers']['first'] = rand(1, 4);
$_SESSION['numbers']['second'] = rand(1, 4);
}
...
if ($answer == $_SESSION['numbers']['first'] + $_SESSION['numbers']['second']) {
//Do stuff
/**
unset the variables after successfully processing the form so that
you will get new ones next time you open the form
*/
unset($_SESSION['numbers']);
...
请注意,您现在需要在使用自己的变量的任何地方使用会话变量。
答案 1 :(得分:0)
您应该在HTML中包含两个数字作为隐藏表单输入,然后使用$ _POST数组中的条目进行数学运算。
让代码以这样的方式开始:
$first_num = $_POST["first_num"];
$second_num = $_POST["second_num"];