2013-07-04 14 views
0

我嘗試從包含主項目及其子項目的數據庫創建下拉列表。我希望主項目成爲optgroup標籤,子項目是選項。將主項目作爲optgroup和子項目作爲選項的PHP下拉列表

<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 ['名稱] - 是父項的名稱。

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

的prblem的是,這並沒有顯示正確的。我都試過了,但我沒有那麼好用PHP ..謝謝您的幫助..

+0

確定你不需要3個查詢 – 2013-07-04 20:33:48

+0

你目前的輸出是什麼樣的?所有的孩子都出現在第一位父母之下,就是這樣嗎?我不明白你是如何沒有得到上述代碼的錯誤。更具體地說與你的孩子的查詢。 – hungerstar

+0

他們看起來像家庭(主要項目)是optgroup然後所有項目的主要項目,包括家庭和孩子是選項下的第一個optgroup(家庭),然後所有其餘的父項目是optgroups .. –

回答

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; 

一些進一步的改進,可以作出:

  • 停止使用mysql_query並切換到PDO(http://php.net/manual/en/ref.pdo-mysql.php),這是更安全的。無論如何,從PHP 5.5.0開始,mysql_query函數已被棄用。
  • 重寫您的查詢以在單個查詢中獲取所需的所有數據。這會真的加快速度。
  • 使用模板將PHP從HTML中分離出來。
相關問題