2012-09-26 68 views
-1

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

+3

如果将一个未定义的变量转换为'array',则会得到一个空数组。如果你不这样做,你仍然有'NULL',PHP中每个未定义变量的值。 'foreach'不适用于'NULL',但它适用于一个空数组。 – hakre

+0

@hakra如果变量被定义为空,那么不会生成通知 –

+0

它不是NULL或EMPTY - 循环如何工作,如果它是NULL或EMPTY,将我的代码写出来?我确实声明我在foreach循环之前做了一个var_dump,它包含了数据。 – azrickster

回答

1

你应该检查以确保会话变量存在之前设置为您的$分数变量,如果它不存在将$分数设置为一个空数组(根据@哈克拉说什么线)。这将停止通知。

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

我这样做,我只是没有在我的代码片段中显示。 – azrickster