1

メイン項目とその子項目を含むデータベースからドロップダウン リストを作成しようとしています。主な項目を optgroup ラベルにし、子項目をオプション項目にしたいと考えています。

<select>
  <optgroup label="$rs_pa['Name']">
    <option value="$rs_ch['Link']">$rs_ch['Name']</option>
    <option value="$rs_ch['Link']">$rs_ch['Name']</option>
  </optgroup>
  <optgroup label="$rs_pa['Name']">
    <option value="$rs_ch['Link']">$rs_ch['Name']</option>
    <option value="$rs_ch['Link']">$rs_ch['Name']</option>
  </optgroup>
</select>

上記は、各変数がどこに収まるかを示すための単なるスキームです..

$rs_pa['Name] - 親アイテムの名前です。

$rs_ch['Name] - 子アイテムの名前です。

$rs_ch['Link'] - 子アイテムのリンクです。

これは私が今持っているコードです:

$mysql_table_items      = "sys_menu_top";
$mysql_table_options    = "sys_options";

// SQL QUERY
$mysql_result_number    = mysql_query("SELECT VALUE FROM $mysql_table_options WHERE Name LIKE 'nav_menu_elements_on_line_usr'") or die($myQuery . "<br/><br/>" . mysql_error());
$mysql_select_parent    = "SELECT * FROM $mysql_table_items WHERE `Parent` = '0' AND Type LIKE 'top' AND Active = 1 ORDER BY `Order` ASC";
$mysql_select_child     = "SELECT * FROM $mysql_table_items WHERE `Parent` = '" . $rs_pa['ID'] . "' AND Active = 1 ORDER BY `Order` ASC";

// SQL RESULT
$mysql_result_number    = mysql_fetch_array($mysql_result_number, MYSQL_ASSOC) or die("Error: Query Failed! " . mysql_error());
$mysql_result_parent    = mysql_query($mysql_select_parent) or die("Error: Query Failed! " . mysql_error());
$mysql_result_child     = mysql_query($mysql_select_child) or die("Error: Query Failed! " . mysql_error());

$output .= "<select>";
while ($rs_pa = mysql_fetch_array($mysql_result_parent)) {
    $output .= "<optgroup label='" . $rs_pa['Name'] . "'>";
    while ($rs_ch = mysql_fetch_array($mysql_result_child)) {
        $output .= "<option value='" . $rs_ch['Link'] . "'>" . $rs_ch['Name'] . "</option>";
        }
    $output .= "</optgroup>";
    }

$output .= "</select>";

echo $output;

問題は、これが正しく表示されないことです..私はすべてを試しましたが、私はphpが得意ではありません..助けてくれてありがとう..

4

1 に答える 1

1

この行で参照し$rs_pa['ID']ています:

$mysql_select_child     = "SELECT * FROM $mysql_table_items WHERE `Parent` = '" . $rs_pa['ID'] . "' AND Active = 1 ORDER BY `Order` ASC";

$rs_pa['ID']その時点で定義されていますか?

このようなものがうまくいくはずです:

$mysql_table_items      = "sys_menu_top";
$mysql_table_options    = "sys_options";

// SQL QUERY
$mysql_result_number    = mysql_query("SELECT VALUE FROM $mysql_table_options WHERE Name LIKE 'nav_menu_elements_on_line_usr'") or die($myQuery . "<br/><br/>" . mysql_error());
$mysql_select_parent    = "SELECT * FROM $mysql_table_items WHERE `Parent` = '0' AND Type LIKE 'top' AND Active = 1 ORDER BY `Order` ASC";

// SQL RESULT
$mysql_result_number    = mysql_fetch_array($mysql_result_number, MYSQL_ASSOC) or die("Error: Query Failed! " . mysql_error());
$mysql_result_parent    = mysql_query($mysql_select_parent) or die("Error: Query Failed! " . mysql_error());

$output = "<select>";

while ($rs_pa = mysql_fetch_array($mysql_result_parent))
{
    $output .= "<optgroup label='" . $rs_pa['Name'] . "'>";

    $mysql_select_child     = "SELECT * FROM $mysql_table_items WHERE `Parent` = '" . $rs_pa['ID'] . "' AND Active = 1 ORDER BY `Order` ASC";
    $mysql_result_child     = mysql_query($mysql_select_child) or die("Error: Query Failed! " . mysql_error());

    while ($rs_ch = mysql_fetch_array($mysql_result_child))
    {
        $output .= "<option value='" . $rs_ch['Link'] . "'>" . $rs_ch['Name'] . "</option>";
    }

    $output .= "</optgroup>";
}

$output .= "</select>";

echo $output;

さらにいくつかの改善を行うことができます。

  • 使用をやめて、より安全なPDO ( http://php.net/manual/en/ref.pdo-mysql.phpmysql_query )に切り替えてください。とにかく、関数は PHP 5.5.0 以降では非推奨です。mysql_query
  • クエリを書き直して、1 つのクエリで必要なすべてのデータをフェッチします。これは本当に物事をスピードアップします。
  • テンプレートを使用して、PHP を HTML から分離します。
于 2013-07-04T21:58:58.583 に答える