好的,我搜索并阅读了许多“未定义”的变量问题,并找不到解决我的问题。我是PHP的新手,所以我希望我在这里传达的内容很明确。 。 。PHP - 为什么我的变量仍未定义?
我有一个选择下拉列表的形式。根据用户选择的内容,我的php脚本使用PDO从mySql数据库检索记录,并将FetchAll输出分配给Session变量,然后返回到初始表单。
在表单中,我为变量设置了一个变量$分数。在表单中,我使用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()提供的无效参数”,这令人困惑,直到找到(array )解决方案(谢谢!)。我仍然不明白为什么我必须这样做,因为无论如何,foreach需要一个数组作为第一个参数?也许是因为它是一个数组的数组(或任何你所说的)。无论如何使用(数组)没有解决未定义的变量错误。
任何想法?
编辑:感谢迄今为止的快速反应。对不起,我从答案中看到,也许我的问题并不完全清楚。我包含的代码段不包括我的所有PHP代码,其中$分数被设置 - 我使用if (isset($_SESSION['scores']))
来验证是否设置了$ _SESSION ['scores']。
我刚注意到一些非常奇怪的东西。这在IE 8中不会发生,它只发生在Google Chrome中。但我认为PHP是SERVER方脚本,所以为什么我只能在Google Chrome中收到这条消息?
如果将一个未定义的变量转换为'array',则会得到一个空数组。如果你不这样做,你仍然有'NULL',PHP中每个未定义变量的值。 'foreach'不适用于'NULL',但它适用于一个空数组。 – hakre
@hakra如果变量被定义为空,那么不会生成通知 –
它不是NULL或EMPTY - 循环如何工作,如果它是NULL或EMPTY,将我的代码写出来?我确实声明我在foreach循环之前做了一个var_dump,它包含了数据。 – azrickster