PHP代码中未定义的变量通知
我要走了 “未定义的变量:行中的htmlPHP代码中未定义的变量通知,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.=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。