我有一个基本的数学问题,用户在发送电子邮件之前必须回答:
$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在加载页面时立即执行有关,因此用户一按下提交按钮就会生成新的数字?还是我离这儿很远?如果是这样的话,我们可以做些什么来解决这个问题?
问题是每次调用脚本时都要设置值。因此,当您发布表单时,会设置两个新值,它们可能与您第一次调用脚本显示表单时的值不同。
您应该将变量存储在会话中,并在处理post请求时检索这些值。
类似于:
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']);
...
请注意,您现在需要在使用自己的变量的任何地方使用会话变量。
您应该将这两个数字作为隐藏的表单输入包含在HTML中,然后对$_POST数组中的条目进行计算。
让你的代码像这样开始:
$first_num = $_POST["first_num"];
$second_num = $_POST["second_num"];