0

我越来越

“未定义的变量:html在线$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;
}
4

7 回答 7

5

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

尝试添加$html = "";$padding = str_repeat($spacer, $level);

于 2011-10-02T10:19:28.560 回答
1

$html在开始附加之前,您必须初始化它。想想$html .= something喜欢$html = $html . something,你应该看到这个问题。

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

于 2011-10-02T10:21:01.397 回答
0

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

于 2011-10-02T10:21:22.820 回答
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 注入。

于 2011-10-02T10:24:47.690 回答
0

以此开始代码: $html = "";

于 2011-10-02T10:28:32.390 回答
0

在开始行插入代码

if (!isset($html)) {
   $html = '';
};
于 2014-06-04T08:13:58.177 回答
-1
        $html .= generateOption($optstyle.'option', $level, $data, $padding); (this line)
        $html .= $children_html;

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

于 2011-10-02T10:18:44.520 回答