如果你可以帮帮我的话会很棒!我正在尝试构建一个简单的页面来显示随机数学问题。答案应由用户输入,并应在同一页面上进行验证,并向他提供有关成功和失败的反馈。
问题在于,通过将表单输入提交到同一页面(我称之为“form6.php”),页面会重新加载并生成一组新的数字 - 这就是为什么“解决方案”变量是新定义的不能用来测试用户答案的准确性。
这是我到目前为止的代码(适用于固定数字,但随着随机数生成失败):
<?php
$number1 = rand(1,100);
$number2 = rand(1,100);
$solution = $number1+$number2;
echo "$number1+$number2=?";
?>
<form action="form6.php" method="post">
Your Answer:<br>
<input type="integer" name="answer">
<input type="Submit" value="Submit!">
</form>
<?php
if(isset($_POST['answer'])){
if ($_POST["answer"] == $solution)
{echo "That's right";}
else
{echo "That's wrong!";};
}
?>
非常感谢任何帮助!由于我不是一个专业的程序员,你可以获得的越多,越好!
答案 0 :(得分:2)
POST
ed表单将重新加载您的PHP脚本,从而生成2个新的rand()
个数字。您将要在表单中传递解决方案。
编辑:我更新了答案,以显示使用随机操作数进行验证的快速解决方案。这只是通过切换随机整数来完成的。请注意,使用-
或/
时,您可能会收到非整数(3 / 58
或15 - 86
),因此您可能需要添加一些自定义逻辑来防止这种情况发生。
<?php
$number1 = rand(1,100);
$number2 = rand(1,100);
switch(rand(0,3)) {
case 0:
$solution = $number1 + $number2;
echo "$number1+$number2=?";
break;
case 1:
$solution = $number1 - $number2;
echo "$number1-$number2=?";
break;
case 2:
$solution = $number1 * $number2;
echo "$number1*$number2=?";
break;
case 3:
$solution = $number1 / $number2;
echo "$number1/$number2=?";
break;
}
?>
<form action="form6.php" method="post">
Your Answer:<br><input type="integer" name="answer">
<input type="hidden" name="solution" value="<?php echo $solution; ?>">
<input type="Submit" value="Submit!">
</form>
<?php
if(isset($_POST['answer']) && isset($_POST['solution'])) {
if ($_POST["answer"] == $_POST['solution']) {
// Valid
} else {
// Incorrect
}
}
?>
答案 1 :(得分:1)
如果您不想在表单中包含解决方案(隐藏),则必须将解决方案存储在单独的文本文件中,例如,您可以在其中序列化数据。
或者,您可以使用会话或cookie。
但你必须将解决方案存储在某个地方。
以下是对会话的尝试:
<?php
session_start();
$nb1 = rand(1,100);
$nb2 = rand(1,100);
$_SESSION['number1'] = $nb1;
$_SESSION['number2'] = $nb2;
$_SESSION['solution'] = $nb1 + $nb2;
// (...)
if(isset($_POST['answer']))
{
if ($_POST["answer"] == $_SESSION['solution'])
{echo "That's right";}
else
{echo "That's wrong!";};
unset($_SESSION['nb1']);
unset($_SESSION['nb2']);
unset($_SESSION['nbsolution']);
}
答案 2 :(得分:0)
if(isset($_POST['answer'])===true){
if ($_POST["answer"] == $solution)
{echo "That's right";}
else
{echo "That's wrong!";};
}
如果您使用isset($_POST['answer'])
,则必须在结尾处包含=== true
另外请确保使用而不是整数。
答案 3 :(得分:0)
@ user3261573,
正如@Sam所指出的,你可以在隐藏字段中传递值,但正如@Jivan所说,更好的方法是使用会话来存储解决方案。
以下是代码:
Ps。:我简化了代码以便更好地理解。
<?php
// Initiate session
session_start();
// If the FORM has been submited, verify answer
if( isset($_SESSION['solution']) === TRUE && $_SESSION['solution'] !== NULL && isset($_POST['answer']) === TRUE && isset($_POST['solution']) == TRUE ){
if( $_SESSION['solution'] == $_POST['answer'] ){
echo 'That\'s right';
}else{
echo 'That\'s wrong';
}
}
// If the FORM ain't submited yet, display the question
else{
// Random numbers
$number1 = rand(1,100);
$number2 = rand(1,100);
// Store solution in session for further comparison
$_SESSION['solution'] = $number1+$number2;
// Echo question
echo "$number1+$number2=?";
echo '<form action="form6.php" method="post">
Your Answer:<br>
<input type="integer" name="answer">
<input type="Submit" value="Submit!">
</form>';
}
?>
如果您喜欢,请参阅以下有关使用PHP SESSION
的一些教程:
http://www.w3schools.com/php/php_sessions.asp http://www.php.net/manual/en/session.examples.basic.php
答案 4 :(得分:0)
<?php
$number1 = rand(1,100);
$number2 = rand(1,100);
echo "$number1+$number2=?";
?>
<form action="form6.php" method="post">
Your Answer:<br>
<input type="integer" name="answer">
<input type="Submit" value="Submit!">
<input type="hidden" name="n1" value="$number1">
<input type="hidden" name="n2" value="$number2">
</form>
<?php
if(isset($_POST['answer'])){
$solution = $_POST['n1'] + $_POST['n2'];
if ($_POST["answer"] == $solution)
{echo "That's right";}
else
{echo "That's wrong!";};
}
&GT;