Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-为什么我的变量仍然未定义?_Php_Html_Arrays - Fatal编程技术网

PHP-为什么我的变量仍然未定义?

PHP-为什么我的变量仍然未定义?,php,html,arrays,Php,Html,Arrays,好的,我已经搜索并阅读了许多“未定义”的变量问题,但找不到解决问题的方法。我是PHP新手,所以我希望我在这里要表达的是清楚的 我有一个带有选择下拉列表的表单。根据用户选择的内容,我的php脚本使用PDO从mySql数据库检索记录,并将FetchAll输出分配给会话变量,然后返回初始形式 在表单中,我将变量$scores设置为session变量。在表单中,我使用foreach循环遍历结果并回显HTML。它工作得很好,但当我从浏览器中查看源代码时,我会收到以下通知(但它不会显示在页面上): 注意:未

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

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

在表单中,我将变量$scores设置为session变量。在表单中,我使用foreach循环遍历结果并回显HTML。它工作得很好,但当我从浏览器中查看源代码时,我会收到以下通知(但它不会显示在页面上):

注意:未定义变量:第187行C:\inetpub\wwwroot\content\viewscorres.php中的分数

正如我所说,这并没有真正影响到我的页面,但我只是好奇为什么我会得到这个信息

这是我的一段代码

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

.
.
.
foreach循环是消息的来源。变量被设置为PDO fetchAll输出数组的内容,循环工作,那么为什么要显示消息呢?如果我在循环之前放置一个vardump,它会很好地转储$scores数组

我已经厌倦了使用foreach
((数组)$scores as$row)
,因为我必须在初始选择下拉列表中这样做,以避免出现错误消息“为foreach()提供的参数无效”,直到我在这块板上找到(数组)解决方案(谢谢!),我才明白这一点。我仍然不明白为什么我必须这样做,因为foreach希望数组作为第一个参数?可能是因为它是一个数组中的一个数组(或者你管它叫什么)。无论如何,使用(数组)并不能解决未定义的变量错误

有什么想法吗

编辑:感谢您到目前为止的快速回复。对不起,我从答案上看可能我的问题不太清楚。我包含的代码片段不包括设置$scores的所有PHP代码-我确实使用
if(isset($\u SESSION['scores'))
来验证设置了$u SESSION['scores')


我只是注意到一些非常奇怪的事情。在IE8中,这种情况并没有发生,而只是在Google Chrome中发生。但是我认为PHP是服务器端脚本,那么为什么我只能在Google Chrome中看到这条消息呢?

在将会话变量设置为$scores变量之前,您应该检查它是否存在,如果它不存在,则将$scores设置为空数组(正如@hakra所说的那样)。这将停止通知

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

.
.
.

如果将未定义的变量强制转换为
数组
,将得到一个空数组。如果不这样做,您仍然有
NULL
,PHP中每个未定义变量的值
foreach
不适用于
NULL
,但它适用于空数组。@hakra如果变量定义为NULL,则不会生成通知它不是NULL或空的-如果它是NULL或空的,循环将如何工作并写出我的代码?我确实说过我在foreach循环之前做了一个var_转储,它包含了数据。我做了,只是在我的代码片段中没有显示。