我得到
"未定义的变量:$html .= generateOption($optstyle.'option', $level, $data, $padding);
行中的html">
我的功能出了什么问题?
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之前,您没有定义它。
尝试在$padding = str_repeat($spacer, $level);
之后添加$html = "";
在开始追加$html
之前,您必须初始化它。将$html .= something
想象成$html = $html . something
,您应该会看到问题。
此外,您的查询是不安全的。确保你逃离一切——以防万一。
在追加变量之前先声明变量。使用点运算符只追加内容。如果您只是在循环之前使用$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注入。
以以下内容开始代码:$html = "";
在开始行插入代码
if (!isset($html)) {
$html = '';
};
$html .= generateOption($optstyle.'option', $level, $data, $padding); (this line)
$html .= $children_html;
删除第一行中第一个=前面的点。