2012-09-26 66 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