-1

好的,我已经搜索并阅读了许多“未定义”变量问题,但找不到解决问题的方法。我是 PHP 新手,所以我希望我在这里要传达的内容很清楚。. .

我有一个带有选择下拉列表的表单。根据用户选择的内容,我的 php 脚本使用 PDO 从 mySql 数据库中检索记录,并将 FetchAll 输出分配给 Session 变量,然后返回到初始表单。

在表单中,我将变量 $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 数组。

我已经厌倦了使用 foreach ((array)$scores as $row),因为我必须在初始选择下拉列表中这样做以避免出现此错误消息“为 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 回答