-1

OK、「未定義」変数の問題の多くを検索して読みましたが、問題の解決策が見つかりません。私は PHP を初めて使用するので、ここで伝えようとしていることが明確であることを願っています。. .

選択ドロップダウンリストのあるフォームがあります。ユーザーが選択した内容に基づいて、php スクリプトは PDO を使用して mySql データベースからレコードを取得し、FetchAll 出力をセッション変数に割り当ててから、初期フォームに戻ります。

フォームでは、変数 $scores をセッション変数に設定します。フォーム内では、foreach ループを使用して結果をループ処理し、HTML をエコー出力します。うまく機能しますが、ブラウザーからソースを表示すると、次の通知が表示されます (ただし、ページには表示されません)。

Notice: Undefined variable: scores in C:\inetpub\wwwroot\content\viewScores.php on line 187

動作すると言ったので、これは私のページには実際には影響しませんが、なぜメッセージが表示されるのか知りたいだけです。

これが私のコードのスニペットです。. .

<?php $scores = $_SESSION['scores'];?>
<html>
  .
  .
  .
    <?php
        foreach ($scores as $row) {
            echo '<td>' . $row['date'] . '</td>';
               .
               .
               .
        }
    ?>
</html>

foreach ループは、メッセージの発信元です。変数は PDO fetchAll 出力配列の内容に設定され、ループは機能しますが、なぜメッセージが表示されるのでしょうか? ループの前に vardump を配置すると、$scores 配列が正常にダンプされます。

((array)$scores as $row)このボードで(配列)ソリューションが見つかるまで、このエラーメッセージ「無効な引数が foreach() に指定されました」を回避するために、最初の選択ドロップダウンでそれを行う必要があったため、foreach の使用に疲れました。 (ありがとう!)。とにかく foreach は最初の引数として配列を期待しているので、なぜそれをしなければならないのかまだわかりませんか? たぶん、それは配列の配列(またはあなたがそれを呼ぶもの)だからです。とにかく (array) を使用しても、未定義変数エラーは解決しませんでした。

何か案は?

編集:これまでの迅速な対応に感謝します。申し訳ありませんが、私の質問が完全に明確ではない可能性があります。私が含めたコード スニペットには、$scores が設定されるすべての PHP コードが含まれているわけではありませんif (isset($_SESSION['scores']))。$_SESSION['scores'] が設定されていることを確認するために使用します。

本当に奇妙なことに気づきました。これは IE 8 では発生せず、Google Chrome でのみ発生します。しかし、PHP はサーバー側のスクリプトだと思っていたのに、なぜ Google Chrome でしかこのメッセージが表示されないのでしょうか?

4

1 に答える 1

1

$scores 変数に設定する前にセッション変数が存在することを確認し、存在しない場合は $scores を空の配列に設定する必要があります (@hakra が言ったことの行に沿って)。これで通知が止まります。

<?php $scores = isset($_SESSION['scores']) ? $_SESSION['scores']:array(); ?>
<html>
  .
  .
  .
    <?php
        foreach ($scores as $row) {
            echo '<td>' . $row['date'] . '</td>';
               .
               .
               .
        }
    ?>
</html>
于 2012-09-26T17:23:25.933 に答える