将是真棒,如果你能帮助我! 我想建立一个简单的页面来显示随机数学问题。 这些问题的答案应该由用户键入的,应在同一页面上进行验证,让他对成功和失败的反馈。
问题是,通过提交输入到同一页的形式(我把它叫做“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!";};
}
?>
任何帮助,不胜感激! 由于我不是专业编码器,更具体的你可以得到更好的!
一个POST
版的形式将刷新你的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
}
}
?>
如果你不希望在您的形式解决方案(无论是隐藏的),你必须存储在一个单独的文本文件,可以在其中,例如,序列化数据的解决方案。
或者,您可以使用会话或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']);
}
if(isset($_POST['answer'])===true){
if ($_POST["answer"] == $solution)
{echo "That's right";}
else
{echo "That's wrong!";};
}
如果您正在使用isset($_POST['answer'])
你必须包括在最后===真还要确保您使用的,而不是整数。
@ 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
S:
http://www.w3schools.com/php/php_sessions.asp http://www.php.net/manual/en/session.examples.basic.php
<?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!";};
}
?>