2010-07-27 86 views
0

With error_reporting(E_ALL);去掉,我的腳本工作正常,但是當我取消它,會出現如下通知:注意:未定義變量

注意:未定義的變量:消息在/home/www/test/register/html/form_1.html.php第11行

form_1.html.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> 
<html> 
    <head> 
    <meta name="generator" content= 
      "HTML Tidy for Linux/x86 (vers 7 December 2008), see www.w3.org"> 
    <title>Sign in or Register</title> 
    </head> 


    <body> 
    <p><?php displayMessages($messages) ?></p><!-- line 11 --> 

第11行有一個函數調用,它在數組參數基本上迭代:

function displayMessages($array) 

{ 
    if (!empty($array) && isset($array)) 
    { 
     foreach ($array as $number => $error) 
     { 
      echo '<font size="3" color="#990000">' . "* $error" . "</font></br>"; 
     }  
    } 
    elseif (empty($array) || !isset($array)) 
    { 
     echo ""; 
    } 

    elseif (empty($array) || !isset($array)) 
    { 
     $array = array(); 
     $array = null; 
    } 

} 

我添加了if條件來檢查它是否爲空,因爲有時我會傳遞一個空數組。

這是這三個文件的一小部分,它應該是一個登記表:

  • 的index.php
  • output.php
  • form_1.html.php

此處全部(http://pastie.org/1062886

索引文件檢查用戶是否填寫了值並驗證它們,但是如果它們沒有在相應的錯誤數組中放置錯誤,則顯示錯誤函數應該顯示它們,如果數組中有值傳遞給它。

我敢打賭,解決方案是非常基本的,但我是一個noob,它使我拉我的頭髮。

+2

Just FYI - '!empty($ something)'意味着'isset($ something)'。 http://php.net/empty – gnarf 2010-07-27 22:03:42

回答

2

對於displayMessages($messages)函數調用,確保$messages存在:

if (isset($messages)) { 
    displayMessages($messages); 
} 

empty()如果變量設置已經檢查,所以&& !isset($array)檢查是在你的代碼不必要的。

第二個elseif分支的條件相當於第一個elseif條件,所以第二個elseif塊將永遠不會被輸入。

+0

代碼就像OP說的那樣:http://pastie.org/1062881 – Wrikken 2010-07-27 21:57:59

8
<p><?php displayMessages($messages) ?></p> 

該變量在該時間點不存在。

<p><?php if(isset($messages)) displayMessages($messages); ?></p> 

在功能以後調用isset不會解決:你的說法已經被設置爲null(如$消息不存在),並$array肯定存在作爲函數參數。

+0

你先生,是一個偉大的人!非常感謝。 – 2010-07-27 21:55:03

+0

@john mossel,請確保您點擊他的帖子左側的支票! – Warty 2010-07-27 22:01:57

+0

好的,如果有幾個人把它做對了,我也檢查他們的嗎? – 2010-07-27 22:16:36