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

PHP代码中未定义的变量通知,php,notice,Php,Notice,我要走了 “未定义的变量:行中的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 showinme

我要走了

“未定义的变量:行中的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;
}
删除第一行中第一个=前面的点


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

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


尝试添加
$html=”“
$padding=str\u repeat($spacer,$level)之后

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


尝试添加
$html=”“
$padding=str\u repeat($spacer,$level)之后

在开始附加到
$html
之前,必须对其进行初始化。想想
$html.=类似
$html=$html的东西。您应该看到问题所在


此外,您的查询是不安全的。确保您避开了所有内容,以防万一。

在开始附加到
$html
之前,您必须初始化它。想想
$html.=类似
$html=$html的东西。您应该看到问题所在


此外,您的查询是不安全的。确保转义所有内容,以防万一。

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

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

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注入

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

以以下内容开始代码:
$html=”“

以以下内容开始代码:
$html=”“

在起始行插入代码

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

起始行内插入代码

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

这意味着其中一个变量缺失和/或未给定。这意味着其中一个变量缺失和/或未给定。这将不起作用,因为它不会在while循环中追加,而是覆盖它。这将覆盖每行的$html。我认为这不是你想要的结果。@Dan你试过了吗?因为$html在它不起作用之前没有给出/创建。@我不必尝试它。因为他使用的是while循环,所以我假设他希望将多个结果连接成一个字符串。您的解决方案不允许这样做,因为它会在第二次迭代期间覆盖$html。这不会起作用,因为它不会在while循环中追加,而是覆盖它。这将覆盖每行的$html。我认为这不是你想要的结果。@Dan你试过了吗?因为$html在它不起作用之前没有给出/创建。@我不必尝试它。因为他使用的是while循环,所以我假设他希望将多个结果连接成一个字符串。您的解决方案不允许这样做,因为它会在第二次迭代中覆盖$html。