2010-02-01 101 views
2

所以,我想一個選擇自動填充下拉的「是」的選擇,或者「否」。數據庫查詢返回的值將用於評估將選擇哪個下拉列表。下拉框中選擇基於數據庫條目

我認爲,因爲它是一個真/假自動填充只寫2條件,但我認爲會有一個更好的(閱讀:較少雜亂的代碼)的方式來編寫代碼,將自動填充正確的選擇基於數據庫結果的下拉列表。

我想寫將檢查對所有選擇的變量,則追加,將選擇下拉在視圖中的用戶的字符串代碼的基礎。

我的問題是有沒有一個簡單的方法來做到這一點,而不是寫條件語句爲每一個可能的下拉值?通過要求

代碼,寫在PHP笨:

$this->db->select('row'); 
$result = $this->db->get('table'); 

// This just selects and returns the values. This code does work, I'm just looking for a better way to do this task that someone might know, because I'm going to have drop downs with hundreds of possibilities, of which, I want the predefined one to be selected. 

// Assume $result->row = "Yes" 

if ($result = "Yes") { 
    #Code for echo'ing radio button with "Yes" selected 
     } 

else { 
    #Code for echo'ing radio button with "No" selected 
     } 
+2

你能詳細解釋一下你的問題嗎?也許顯示一些代碼? – 2010-02-01 21:02:10

+1

顯示你的亂碼,我們會告訴你如何做得更好。 – Flavius 2010-02-01 21:07:13

回答

3

你有沒有檢查CI Form Helper?您可以使用form_radio和供應要在第三個參數選擇數值:

form_radio('field_name', 'Yes', $result == 'Yes'); 
form_radio('field_name', 'No', $result == 'No'); 

第一個參數是字段名,第二個參數是值的字段,以及第三個參數是一個布爾(TRUE:選擇電臺, FALSE:未選中)。由於這是一臺收音機,因此字段名稱應該相同。

+1

不要忘記$ result是一個行數組,所以你需要添加$ result = $ this-> db-> get('table') - > row() - > whateverthefieldnameis; – 2010-02-02 14:59:58

0

這樣的事情應該工作。不過,我對你的要求和數據做了很多假設。

// The selected value 
$selectedValue = 'foo'; 

// Database results, assuming a structure like so 
$results = array(
    array(
    'id' => 1, 
    'value' => 'foo' 
), 
    array(
    'id' => 2, 
    'value' => 'bar' 
) 
); 

echo '<select name="selectField">'; 

foreach ($results as $result) { 
    echo '<option value="'.$result['id'].'"'; 

    // Here we see if this result is the selected value. 
    // If so, we spit out the HTML so the user's browser renders it as such. 
    if ($result['value'] == $selectedValue) { 
    echo ' selected="selected"'; 
    } 

    echo '>'.$result['value'].'</option>'; 
} 

echo '</select>'; 
+0

這實際上不是你在CodeIgniter中做的。 – 2010-02-02 14:55:37

+0

然而,這個答案並沒有錯,因爲它可以很容易地應用於代碼點火器。Code Igniter沒有做任何事情來使這種方法錯誤。實際上,Code Igniter鼓勵更糟糕的事情,我不會推薦它。在其他地方投下你的票。 – erisco 2010-02-02 18:19:46

0

你的問題似乎有點混淆。你在代碼中提到了單選按鈕,但是你的問題是關於下拉菜單的問題。

如果您需要顯示一組單選按鈕或基於給定值下拉選項中,你可以定義你的選擇,作爲一個數組:

$data = array(
    'yes' => array('option1', 'option2', 'option2', 'etc'), 
    'no' => array('option1', 'option2', 'option2', 'etc'), 
    'somethingelse' => array('option1', 'option2', 'option2', 'etc') 
); 

而且使用這樣的:

$query = $this->db->select('row')->get(); 

if ($query->num_rows() > 0) { 
    $result = $query->row(); 

    if (array_key_exists(strtolower($result->row), $data)) { 
     foreach ($data[$result->row] as $row) { 
      // Use $row as you need 
     } 
    } 
} 

你甚至可以把它包裝成一個可重用的函數。

0

感謝Erisco,你只要幫了我與你的帖子的東西。

我的版本,雖然是更基本和削減下來,沒有任何參考鍵=>值對。它只是設置一個數組,其中包含上一個下拉菜單中的所有選項,並在其中循環[因爲它也填充下拉菜單],並將選項設置爲「已選擇」(如果它與用戶先前選擇的選項相匹配)存儲到數據庫:

<?php   
$naybpopulate = array('Bernal Heights', 'Castro', 'Chinatown', 'Cole Valley', 'Fishermans Wharf', 'Forest Hill', 'Haight-Ashbury', 'Hayes Valley', 'Inner Richmond', 'Inner Sunset', 'Japantown', 'Marina', 'Mission', 'Mission Bay', 'Nob Hill', 'Noe Valley', 'North Beach', 'Outer Richmond', 'Outer Sunset', 'Pacific Heights', 'Potrero Hill', 'Presidio', 'Russian Hill', 'SoMa', 'South Beach', 'Telegraph Hill', 'Tenderloin', 'Union Square', 'Western Addition', 'West Portal'); 

     echo '<select name="neighborhood" id="neighborhood">'; 

foreach ($naybpopulate as $nayb) { 
echo '<option value="'.$nayb.'"'; 

// Here we see if this result is the selected value. 
// If so, we spit out the HTML so the user's browser renders it as such. 
if ($nayb == $neighborhood) { 
echo ' selected="selected"'; 
} 

echo '>'.$nayb.'</option>'; 
} 

echo '</select>'; 
?> 

Stack Overflow是最好的。你們好棒 :)。

相關問題