注意:未定义的变量

时间:2010-07-27 21:46:34

标签: php

error_reporting(E_ALL);删除,我的脚本工作正常,但是当我取消注释它时,会出现以下通知:

  

注意:未定义的变量:第11行/home/www/test/register/html/form_1.html.php中的消息

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

索引文件检查用户是否已填写值并验证它们,但是如果它们没有在相应的错误数组中放置错误,则显示错误函数应该显示它们传递给它的数组中的值。

我打赌解决方案非常基本,但我是一个菜鸟,它让我把头发拉出来。

2 个答案:

答案 0 :(得分:8)

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

那个时间点不存在该变量。

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

稍后在函数中调用isset将无法解决此问题:您的参数已设置为null(因为$ messages不存在),并且$array肯定作为函数参数存在。

答案 1 :(得分:2)

对于displayMessages($messages)函数调用,请确保存在$messages

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

empty()已经检查变量是否已设置,因此代码中不需要&& !isset($array)检查。

第二个elseif分支的条件等同于第一个elseif条件,因此永远不会输入第二个elseif块。