我正在尝试构建一个简单的php页面,其中用户正在回答两个问题以继续进行。我的代码是:
<?php
if (!isset($_POST['answer1']) OR $_POST['answer1'] != "blue")
{
?>
<form action="index.php" method="post">
<p>What color is the sky ?</p>
<input type="text" name="answer1">
<input type="submit" value="Send">
</p>
<?php }
else {
if (!isset($_POST['answer2']) OR $_POST['answer2'] != "white")
{
?>
<form action="index.php" method="post">
<p>What color is the milk ?</p>
<input type="text" name="answer2">
<input type="submit" value="Send">
</p>
<?php }
else {
echo 'Congratulation !';
}
}
&GT;
回答第一个问题时,会显示第二个问题。但是在回答第二个问题时,它让我回到第一个问题而没有显示祝贺信息。 谁能告诉我出了什么问题?提前谢谢。
答案 0 :(得分:0)
您的脚本永远不会到达else
块,因为变量值不会永久存储。您需要使用会话,或引入不同的方法来解决此问题。
如果您想使用单个页面执行此操作,则可以在同一页面中添加两个输入字段,然后仅在两个答案都正确的情况下转发用户。
在我看来,最好的方法是使用验证码。
答案 1 :(得分:0)
你的错误是它的共同点,这是一个逻辑错误:
在第一个IF状态中,你询问POST answer1剂量是否存在或者是否为蓝色。
但是..当你提交第二个表格时,请求没有设置answer1,所以..它回到第一个if ..
您的解决方案很简单:
else {
if (!isset($_POST['answer2']) OR $_POST['answer2'] != "white")
{
?>
<form action="index.php" method="post">
<p>What color is the milk ?</p>
<input type="hidden" name="answer1" value="blue"> <--- add this line to skip the first if uin the second submit
<input type="text" name="answer2">
<input type="submit" value="Send">
</p>
<?php }
else {
echo 'Congratulation !';
}
答案 2 :(得分:0)
这个作品 只需在第二种形式中添加隐藏字段
<?php
if (!isset($_POST['answer1']) OR $_POST['answer1'] != "blue")
{
?>
<form action="index.php" method="post">
<p>What color is the sky ?</p>
<input type="text" name="answer1">
<input type="submit" value="Send">
</p>
<?php }
else {
if (!isset($_POST['answer2']) OR $_POST['answer2'] != "white")
{
?>
<form action="index.php" method="post">
<p>What color is the milk ?</p>
<input type="hidden" name="answer1" value="blue">
<input type="text" name="answer2">
<input type="submit" value="Send">
</p>
<?php }
else {
echo 'Congratulation !';
}
}
?>
答案 3 :(得分:0)
如果您不想更改表单结构,请更改if / else子句:
<?php
if(isset($_POST['answer2']) && $_POST['answer2'] == "white")
{
echo 'Congratulation !';
} else if((isset($_POST['answer1'] && $_POST['answer1'] == "blue") || (isset($_POST['answer2'] && $_POST['answer2'] != "white"))
{ ?>
<form action="index.php" method="post">
<p>What color is the milk ?</p>
<input type="text" name="answer2">
<input type="submit" value="Send">
</form>
<?php } else { ?>
<form action="index.php" method="post">
<p>What color is the sky ?</p>
<input type="text" name="answer1">
<input type="submit" value="Send">
</form>
<?php } ?>
答案 4 :(得分:0)
改变这个:
!isset($_POST['answer1']) OR $_POST['answer1'] != "blue"
到此:
(!isset($_POST['answer1']) OR $_POST['answer1'] != "blue") && !isset($_POST['answer2'])
添加answer2作为未在第一个条件中设置的要求将使其在提交第二个表单时传递给下一个。
答案 5 :(得分:0)
您始终可以传递第三个检查变量,例如:
if(isset($_POST['completed'] && $_POST['completed'] == true){
echo "Congratulations";
exit();
}
把它放在其他陈述之上,这是检查的第一件事。