-1

我试图构建一个简单的 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 !';
    }
  }

?>

回答第一个问题时,会显示第二个问题。但是在回答第二个问题时,它让我回到第一个问题并且没有显示祝贺信息。有人可以告诉我出了什么问题吗?提前致谢。

4

6 回答 6

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 } ?>
于 2013-09-04T17:28:49.113 回答
0

改变这个:

!isset($_POST['answer1']) OR $_POST['answer1'] != "blue"

对此:

(!isset($_POST['answer1']) OR $_POST['answer1'] != "blue") && !isset($_POST['answer2'])

添加 answer2 作为不设置在第一个条件中的要求将使其在提交第二个表单时传递到下一个条件。

于 2013-09-04T17:28:58.670 回答
0

您始终可以传递第三个检查变量,例如:

if(isset($_POST['completed'] && $_POST['completed'] == true){ 

    echo "Congratulations";
    exit();
}

将其放在其他语句之上,以便首先检查它。

于 2013-09-04T17:30:08.800 回答
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 !';
    }
  }
?>
于 2013-09-04T17:27:24.167 回答
0

您的脚本永远不会到达该else块,因为变量值不会永久存储。您需要使用会话,或引入不同的方法来解决此问题。

如果你想用一个页面来做,你可以在同一个页面中添加两个输入字段,然后只有当两个答案都正确时才转发用户。

在我看来,最好的方法是使用验证码。

于 2013-09-04T17:22:57.123 回答
0

您的错误很常见,这是一个逻辑错误:

在第一个 IF 语句中,您询问 POST answer1 是否存在或是否为蓝色。

但是..当你提交请求没有设置答案1的第二个表格时,所以..它回到第一个如果..

您的解决方案很简单:

 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 !';
}
于 2013-09-04T17:25:58.423 回答