2

チェックしたラジオ ボタンに応じて、ユーザーを別の Web ページにリダイレクトしようとしています。

関連するコードは次のとおりです。

  <form action="sample.php" method="post">
          <input name="survey" type="radio" value="Yes" /> Yes
          </br>
          <input name="survey" type="radio" value="No"  /> No
  </form>

  <? 
    if ($_POST['survey'] == "Yes")
    {
        header('Location: http://localhost/survey.php');
    }
    else if ($_POST['survey'] == "No")
    {
        header('Location: http://localhost/survey.php');
    }

  ?>

何らかの理由で、if ステートメント内でエラーが発生します。それは「調査」を有効なインデックスとして認識しません。フォームをphpコードにリンクするために何かをしていないのはどうしてですか?

4

5 に答える 5

2

GETあなたの警告は、(通常のリクエスト)を使用してページをロードするときに$_POST['survey']設定されていないという事実によって引き起こされます。

isset($_POST['survey'] ) &&使用するたびに の前に を追加して条件を変更するか、次のように投稿が行われたかどうかをチェックするブロックにコード全体を入れることができます。

if ($_SERVER['REQUEST_METHOD'] === 'POST')
{
    if ($_POST['survey'] == "Yes")
    {
        header('Location: http://localhost/survey.php');
    }
    else if ($_POST['survey'] == "No")
    {
        header('Location: http://localhost/survey.php');
    }
}
else
{
  // output html
}

headerいずれにしても、ヘッダーが既に送信されている場合は使用できないため、これを html の前に配置する必要があります(内容は既にブラウザーに出力されています)。

于 2012-11-21T00:58:02.300 に答える
0

フォームがどのように機能するかを考えてみましょう:

初めてページにアクセスしたとき、フォームは送信されません。それでも、あなたif/elseはあたかもそうであるかのように行動しています。それがエラーの原因です-$_POST['survey']最初は存在しません。

スクリプトを適切に記述します。HTML をレンダリングする前に、すべての潜在的なフォーム処理を行います。

<?php
if (isset($_POST['submit'])) {
    // handle the form
}
?>

<!doctype html>
<html>
    <head>
        <title>Blah</title>
    </head>

    <body>
        <!-- code -->
    </body>
</html>

これにより、フォームをそれ自体に送信したかどうかを確認し、 a を使用して、header()厄介な「ヘッダーが既に送信されました」エラーに遭遇することなくユーザーをリダイレクトできる可能性があります。

于 2012-11-21T00:58:14.380 に答える
0

簡単な print_r() ステートメントを試して、 $_POST にコンテンツがあるかどうかを確認してください。これをページの上部に置きます:

print_r($_POST);

また、フォームから結果ページをロードしていることを確認してください。ページの URL を入力するだけでは、POST データは送信されません。

于 2012-11-21T00:58:18.507 に答える
0

ファイル sample.php を初めてロードしたときは、POST データがないため、インデックス「調査」はありません。

別の if ステートメントにネストするか、次のように変更する必要があります。

  <form action="sample.php" method="post">
          <input name="survey" type="radio" value="Yes" /> Yes
          </br>
          <input name="survey" type="radio" value="No"  /> No
  </form>

  <? 
    if (isset($_POST) && $_POST['survey'] == "Yes")
    {
        header('Location: http://localhost/survey.php');
    }
    else if (isset($_POST) && $_POST['survey'] == "No")
    {
        header('Location: http://localhost/survey.php');
    }

  ?>
于 2012-11-21T00:58:35.607 に答える