2010-11-18 34 views
5

我有一個包含以下列的mysql表。列出下拉列表中的枚舉值php mysql

Id  Name  Sex 

和性別欄具有枚舉類型(「男」,「女」,「未指定」)

如何列出枚舉值在下拉,使當前的存儲值作爲選擇

+1

在我看來,使用ENUM是,大部分的時間,一個概念的錯誤。您始終可以選擇創建額外的表格。這將使這個查詢非常容易。在這種情況下,性別基本上是一個布爾值(例如,男性爲true,女性爲false,未指定爲NULL)和額外的表可能是矯枉過正的,但我絕對儘量少使用ENUM(不要說永遠不會)。 – 2010-11-18 03:32:52

+0

您是否試圖直接從數據庫結構中列出ENUM值,還是試圖找出如何將選定的ENUM值存儲在記錄中? – enobrev 2010-11-18 06:56:21

回答

5

創建select(下拉)字段時,它是枚舉字段的事實並不重要。枚舉字段的行爲與文本輸入字段的行爲相同,只是拒絕與枚舉選項不匹配的任何數據並更有效地存儲數據。因此,與枚舉字段交互與用文本輸入字段進行交互相同。

所以,你需要一個普通的HTML選擇字段:

<form> 
    <select name="gender"> 
    <option value="Unspecified">Unspecified</option> 
    <option value="Male">Male</option> 
    <option value="Female">Female</option 
    </select> 
</form> 

而且你需要選擇你的價值:

<form> 
    <select name="gender"> 
    <option value="Unspecified" <?php if($gender == "Unspecified") { echo "SELECTED"; } ?>>Unspecified</option> 
    <option value="Male" <?php if($gender == "Male") { echo "SELECTED"; } ?>>Male</option> 
    <option value="Female" <?php if($gender == "Female") { echo "SELECTED"; } ?>>Female</option 
    </select> 
</form> 

這可以被分解成功能:

function gender_select($default_value='') { 
    $select = '<select name="gender">'; 
    $options = array('Unspecified','Male','Female',); 
    foreach($options as $option) { 
    $select .= write_option($option, $option, $default_value); 
    } 
    $select .= '</select>'; 
    return $select; 
} 

function write_option($value, $display, $default_value='') { 
    $option = '<option value="'.$value.'"'; 
    $option .= ($default_value == $value) ? ' SELECTED' : ''; 
    $option .= '>'.$display.'</option>'; 
    return $option; 
} 

所以你的最終代碼是:

<form> 
<?php echo $gender_select($gender); ?> 
</form>