2014-10-02 57 views
0

我有一個關於如何從SQL數據庫填充兩個單獨列表的查詢,我的數據庫看起來像這樣;從SQL數據庫動態填充兩個<select>列表

shoe_id  shoe_type  shoe_color 
_________________________________________ 
001   Hi-Top   Blue 
002   Loafer   Black 
003   Brogue   Brown 
004   Brogue   Black 
005   Loafer   Brown 
006   Loafer   Red 
007   Hi-Top   Yellow 

我想知道如何創建一個選擇列表顯示shoe_type,第二個要取決於shoe_type動態變化,以顯示shoe_color。

例如,在第一個選擇列表中選擇'Brogue',然後在第二個選擇列表中顯示'Brown'和'Black'。

預先感謝您。

+0

AJAX會產生這種動態負載。 – Rasclatt 2014-10-02 19:53:00

+1

您可以重新加載'shoe_type'上的頁面並加載'shoe_color',否則您需要使用客戶端,即。 javascript和可能的ajax,來改變'shoe_color'。 – Sean 2014-10-02 19:54:58

回答

0

你就可以生產基於數據庫這種結構如果預取:

shoes array(3) { 
    ['Hi-Top'] => array(2) { 
     [1] => 'Blue', 
     [7] => 'Yellow' 
    } 
    ['Loafer'] => array(3) { 
     [2] => 'Black', 
     [5] => 'Brown', 
     [6] => 'Red', 
    } 
    ['Brogue'] => array(2) { 
     [3] => 'Brown', 
     [4] => 'Black' 
    } 
} 

,並在HTML生成:

<select name="type"> 
    <?php foreach($shoes as $shoeType => $shoeColors): ?> 
     <option value="<?= $shoeType ?>" <?php if(isset($_POST['type']) && $_POST['type'] == $shoeType) echo 'selected="selected"'?>><?= $shoeType?></option> 
    <?php endforeach; ?> 
</select> 
<select name="color"> 
    <?php if (isset($_POST['type']) foreach($shoes[$_POST['type']] as $k => $v): ?> 
     <option value="<?= $k ?>" <?php if(isset($_POST['color']) && $_POST['color'] == $k) echo 'selected="selected"'?>><?= $v ?></option> 
    <?php endforeach; ?> 
</select> 

現在,如果你可以節省$ _ POST [「型」]和$ _POST ['color']在會話中稍後使用,您根本不需要JS,即使瀏覽器禁用了JS,代碼也能正常工作。

但是如果你喜歡,你可以使用JS。 Json對它進行編碼並在你的javascript中使用它。而不是唯一的方法是使用AJAX。

var shoes = <?= json_encode($shoes) ?>