2012-08-07 70 views
-1

我還沒有確定如何正確地說出問題 - 但這只是出於真正的興趣而已。不斷,我不得不從數據庫加載信息,並預先填充一個表單。因此,在文本框的情況下,它很容易,我只需設定值:如何從數據庫中選擇<select>語句?

<input type="text" value="<?=$foo;?>" name="foobar">

然而,當我來選擇框中找到我的代碼變得相當草率,因爲我需要放置selected值某處的線路。因此,其實我有兩個選擇,這兩者我不喜歡:

$one = $two = ""; 
switch ($myval) { 
    case "1": $one = " selected"; 
    case "2": $two = " selected"; 

} 

然後在HTML:

<select name="myval"> 
<option value="1"<?=$one;?>>One</option> 
<option value="1"<?=$two;?>>Two</option> 
</select> 

或另一個選項是將一個速記,如果在選擇的中間聲明:

<select name="myval"> 
<option value="1"<?=($myval=="1") ? " selected" : "";?>>One</option> 
<option value="1"<?=($myval=="2") ? " selected" : "";?>>Two</option> 
</select> 

看起來稍微更乾淨,但它仍然讓我感到困擾。

任何人有這樣做的任何多比較有效的方法呢?當它僅僅是一個Yes/No下拉框,我必須爲每個值寫愚蠢的if語句。

同樣的問題也適用於複選框。

+2

IF語句不'在這種情況下stupid' – Gntem 2012-08-07 10:46:42

+0

它只是似乎有點對於這樣一個簡單的任務來說是漫長而無意義 – Chud37 2012-08-07 10:48:09

+0

我認爲你指定的最後一個選項更好 – WatsMyName 2012-08-07 10:48:29

回答

1

作爲除了昆汀(只是一些代碼來幫助你),我傾向於使用數組爲好,像這樣:

<select name="myval"> 
    <?php 
     $options = array(
      "1" => "One", 
      "2" => "Two" 
     ); 
     foreach ($options as $value => $text) { 
      echo '<option value="' . $value . '"' . ($myval == $value ? ' selected' : '') . '>' . $text . '</option>'; 
     } 
    ?> 
</select> 
+0

+1給他他的代碼讓他在路上 – Menztrual 2012-08-07 10:51:19

+0

是啊所以如果聲明打印'選擇'在那裏,同我建議.. – Chud37 2012-08-07 10:51:30

+0

@tehlulz我不是在尋找答案,只是建議,如果你看代碼與我的基本相同。 – Chud37 2012-08-07 10:52:04

5

在輸出中用你想要的數據創建一個數組。在它上面循環。爲其中的每個項目生成一個選項元素。

+0

這就是我所做的,但我也有一個函數,我將它傳遞給參數,我傳遞了我感興趣的ID,如果該行匹配,我拋出'selected'標籤。 +1 – Fluffeh 2012-08-07 10:49:03

0

有一個更清晰的代碼確實很多方面。找到一個或發明你自己:)

對於SELECT語句,我喜歡用實用方法。例如:

<?= HTML::createSelect($name, $actualvalue, $optionslist, $passthrough) ?> 

該行上的內容。從數據庫中讀取選項列表和實際值。 Passthrough用於添加HTML裝飾器,例如ID,類等

+0

啊哈好,問我的問題是要看看別人做了什麼。但我從來沒有見過這個 - 我會查找它。 – Chud37 2012-08-07 10:50:54

+0

我無法找到關於HTML :: createSelect的任何文檔?這是你自己的職責之一嗎? – Chud37 2012-08-07 10:52:46

+0

當然,這是我寫的一個方法。這只是一個例子。大多數MVC框架都有類似的「表單助手」來生成表單元素。使代碼看起來更清潔,並且減少了鍋爐電鍍。 – 2012-08-07 22:56:32

1

那麼這種重複輸出最簡單的方法是自己寫一個函數,例如:

function selectbox(array $options, $name, $value = null) { 
    $out = '<select name="' . $name . '">'; 
    foreach($options as $key => $text) { 
     $out .= '<option value="' . $key. '"' . ($key == $value ? ' selected="selected"' : null) . '>' . $text . '</option>'; 
    } 

    return $out . '</select>'; 
} 
+0

我喜歡這個,好主意。 – Chud37 2012-08-07 10:55:48