-1

ユーザーが 2 つの質問に答えて先に進む単純な 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 !';
    }
  }

?>

最初の質問に答えると、2番目の質問が表示されます。しかし、2 番目の質問に答えると、最初の質問に戻り、お祝いのメッセージが表示されません。誰かが何がうまくいかないのか教えてもらえますか? 前もって感謝します。

4

6 に答える 6

0

あなたの間違いは一般的であり、論理的なエラーです:

最初の IF ステートメントでは、POST answer1 が存在するかどうか、またはその青色かどうかを尋ねます。

しかし..リクエストがanswer1を設定していない2番目のフォームを送信すると、最初のフォームに戻ります..

あなたのソリューションは簡単です:

 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 に答える
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 を追加すると、2 番目のフォームが送信されたときに次の条件に渡されます。

于 2013-09-04T17:28:58.670 に答える
0

これは、2番目のフォームに隠しフィールドを追加するだけで機能します

<?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

次のような 3 番目のチェック変数をいつでも渡すことができます。

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

    echo "Congratulations";
    exit();
}

それを他のステートメントの上に置いて、最初にチェックされるようにします。

于 2013-09-04T17:30:08.800 に答える