2011-10-02 112 views
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; 
} 
+0

这意味着变量中的一个缺失和/或没有给出。 – Thew

回答

5

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

尝试后$padding = str_repeat($spacer, $level);

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

在第一行中删除在所述第一=前面的点。

+1

这不起作用,因为它不会在while循环中追加,而是覆盖它。 – Dan

+1

这将覆盖每行的$ html。我不认为这是理想的结果。 – rwilliams

+0

@丹你还尝试过吗?由于$ html在其不工作之前未被创建/创建。 – Thew

1

加入$html = "";你必须初始化$html你开始追加到它之前。考虑$html .= something就像$html = $html . something,你应该看到这个问题。

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

0

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

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

0

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

0

开始线插入代码

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