好的,我已经搜索并阅读了许多“未定义”变量问题,但找不到解决问题的方法。我是 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 中收到此消息?