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;
}

他の人が述べたように、SQL インジェクションを防ぐために変数$parentと変数をエスケープする必要があります。$menu

于 2011-10-02T10:24:47.690 に答える
0

これでコードを始めます: $html = "";

于 2011-10-02T10:28:32.390 に答える
-1
        $html .= generateOption($optstyle.'option', $level, $data, $padding); (this line)
        $html .= $children_html;

最初の行の最初の = の前にあるドットを削除します。

于 2011-10-02T10:18:44.520 に答える