2011-12-30 54 views
1

我目前面臨着兩難境地。我試圖構建一個菜單,它將顯示來自數據庫的一組數據。然後用戶將從該列表中選擇一個項目,並基於此,我需要進行數據庫調用以檢索與之相關的數據。這是我現有的代碼。使用PHP和SQL創建帶有子項的列表

function foobar() { 
    $first_option_sql = "SELECT * from {location} l ORDER BY name ASC"; 
    $list_first_option = db_query($first_option_sql); 

    $output .= "<p><b>Please select the primary location that you would like to check.</b><p>" 
    $output .= "<br><b>Location: </b> <select id='list'><option>Available locations</option>"; 

    while($first_option_available = db_fetch_object($list_first_option)){ 
    $output .="<option locationid='$first_option_available->lid'>".$first_option_available->name."</option>"; 
    } 

    $output .="</select><input type=submit value='Search'>"; 
    $output .="<p><b>Children: </b><select id='child'><option selected='yes'>Available children</option><p>"; 

    $children_available_sql = "SELECT complexquery WHERE lid='%d' ORDER BY l.name ASC"; 
    $list_children = db_query($children_available_sql); 

    while($children_available = db_fetcj_object($list_children)){ 
    $output .="<option>".$children_available->name."</option>"; 
    } 

    return $output; 

}

這裏的問題是,使用此代碼,我無法檢索所選擇的「第一選擇」,因此第二查詢從來沒有實際發生的價值;這不會填充第二個列表。

我正在考慮使用AJAX或Javascript,但我不太熟悉。因此,我想了解我可以如何執行此操作。

+0

如果你只使用PHP,你不能真正做到這一點沒有提交表單,並重新顯示網頁,因爲PHP處理服務器端。 正如你所提到的,你可以更有效地使用Ajax,將所選的第一個選項傳遞給一個PHP頁面,該頁面然後將返回包含第二個列表值的數據庫請求的JSON數據。 – julio 2011-12-30 16:58:27

+0

因爲我對AJAX不太熟悉,所以我想知道如何做到這一點。由於我基本上使用PHP生成網頁,因此我認爲將此功能引入另一個功能可能會更好一些。 – Hectron 2011-12-30 17:06:04

+0

那麼,你將表單提交給第一個選項列表的onChange,並將第一個選擇列表的值作爲POST或GET參數傳遞。然後,在頁面的頭部,檢查該參數是否爲「isset」。如果是,那麼您知道該表單已提交,並且您使用該值觸發第二個選擇列表查找。 – julio 2011-12-30 20:34:15

回答

1

首先,您的HTML無效或僅僅是缺少細節。

你需要一個name元素爲您的選擇框:

<option locationid='$first_option_available->lid'> 

你需要一個value屬性,而不是:

<option value='$first_option_available->lid'> 
提交表單時

<select name="lid" id='list'> 

locationid將無法正常工作

使用正確的HTML,$ _POST ['lid']將是您想要的位置標識。你可以傳遞給你的函數:

$menu = foobar($_POST['lid']); 

function foobar($lid) { 
    //... 
} 
+0

至於整個POST ['lid'] ...是因爲POST命令只傳遞HTML標記中的值而不是自定義值(即locationid)? – Hectron 2011-12-30 17:13:35

+0

正確。如果存在正確的HTML屬性,該值只會在POST中結束。 – popthestack 2011-12-30 17:38:02

+0

如果您使用javascript,您可以使用任何您希望從中獲取值的屬性,但我發現沒有理由使用默認html名稱和值屬性以外的任何內容,即使使用javascript。 – popthestack 2011-12-30 17:39:06

相關問題