好的,我已经搜索并阅读了许多“未定义”的变量问题,无法找到我的问题的解决方案。我是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期望数组作为第一个参数?也许是因为它是一个数组的数组(或者你称之为的任何数组)。无论如何使用(数组)都没有解决未定义的变量错误。
有什么想法吗?
编辑:感谢您到目前为止的快速回复。对不起,我从答案中看到,也许我的问题并不完全清楚。我包含的代码片段不包括我的所有PHP代码,其中$得分已设置 - 我使用if (isset($_SESSION['scores']))
来验证$ _SESSION ['得分']已设置。
我刚注意到一些非常奇怪的事情。在IE 8中不会发生这种情况,它只发生在谷歌浏览器中。但我认为PHP是SERVER端脚本,所以为什么我只能在谷歌浏览器中收到这条消息?
答案 0 :(得分:1)
在将会话变量设置为$ scores变量之前,您应该检查以确保会话变量存在,如果它不存在,则将$ score设置为空数组(沿着@hakra所说的行)。这将停止通知。
<?php $scores = isset($_SESSION['scores']) ? $_SESSION['scores']:array(); ?>
<html>
.
.
.
<?php
foreach ($scores as $row) {
echo '<td>' . $row['date'] . '</td>';
.
.
.
}
?>
</html>