PHP代码中未定义的变量通知

时间:2011-10-02 10:16:32

标签: php notice

我正在

“未定义的变量:html in the line $html .= generateOption($optstyle.'option', $level, $data, $padding);

我的功能出了什么问题?

function generateOptions($parent, $level, $padding, $menu, $db)
{
    $result=$db->query("SELECT id, name FROM menu WHERE parent='$parent' AND showinmenu='$menu'");
    $spacer = '  '; 
    $padding = str_repeat($spacer, $level);
    while($data=$result->fetch_row()){      
        $children_html = generateOptions($data[0], $level+1, $padding, $menu,$db);
        $optstyle = empty($children_html) ? 'std' : 'bold';
        $html .= generateOption($optstyle.'option', $level, $data, $padding); (this line)
        $html .= $children_html;
    }
    return $html;
}

7 个答案:

答案 0 :(得分:5)

在尝试使用它之前,你没有定义$ html。

尝试在$html = "";

之后添加$padding = str_repeat($spacer, $level);

答案 1 :(得分:1)

在开始追加$html之前,您必须先对其进行初始化。考虑$html .= something$html = $html . something一样,您应该看到问题。

此外,您的查询不安全。确保你逃避一切 - 以防万一。

答案 2 :(得分:0)

在附加变量之前先声明变量。使用点运算符只需添加内容。如果您只是在循环之前使用$html = '';,则警告应该消失。

答案 3 :(得分:0)

function generateOptions($parent, $level, $padding, $menu, $db)
{
    $html = ''; # define `$html` first
    $result = $db->query("SELECT id, name FROM menu WHERE parent='$parent' AND showinmenu='$menu'");
    $spacer = '  '; 
    $padding = str_repeat($spacer, $level);

    while($data = $result->fetch_row())
    {      
        $children_html = generateOptions($data[0], $level+1, $padding, $menu,$db);
        $optstyle = empty($children_html) ? 'std' : 'bold';
        $html .= generateOption($optstyle.'option', $level, $data, $padding);
        $html .= $children_html;
    }
    return $html;
}

正如其他人所提到的,您应该转义$parent$menu变量以防止SQL注入。

答案 4 :(得分:0)

用这个开始代码: $html = "";

答案 5 :(得分:0)

在开始行插入代码

if (!isset($html)) {
   $html = '';
};

答案 6 :(得分:-1)

        $html .= generateOption($optstyle.'option', $level, $data, $padding); (this line)
        $html .= $children_html;

删除第一行中第一个=前面的点。