下拉选择基于数据库条目

时间:2010-02-01 20:59:41

标签: php mysql database codeigniter

所以,我想选择自动填充下拉列表的“是”选项,或者选择“否”。数据库查询返回的值将用于评估将选择哪个下拉列表。

我曾经想过,因为它只是编写2个条件,这是一个真/假的自动填充,但我认为会有一个更好的(读取:更少杂乱的代码)方式编写代码,从而自动填充正确的选择根据数据库的结果下拉。

我正在尝试编写的代码的基础是针对所有选择检查变量,然后附加一个字符串,该字符串将为视图中的用户选择下拉。

我的问题是有没有更简单的方法来做到这一点,而不是为每个可能的下拉值写条件?

按请求编写代码,用CodeIgniter 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
       }

4 个答案:

答案 0 :(得分:3)

您是否在CI中查看了Form Helper?您可以使用form_radio并在第三个参数中提供要选择的值:

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

第一个参数是字段名,第二个参数是字段的值,第三个参数是布尔值(TRUE:选择无线电,FALSE:未选中)。由于这是一个无线电,因此字段名称应相同。

答案 1 :(得分: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>';

答案 2 :(得分: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
        }
    }
}

你甚至可以把它包装成一个可重复使用的功能。

答案 3 :(得分:0)

感谢Erisco,你刚刚通过帖子帮我解决了一些问题。

我的版本虽然更基本但更简单,没有引用任何键=&gt;价值对。它只是设置一个数组,其中包含上一个下拉菜单中的所有选项,循环显示它[因为它也填充下拉菜单],并将选项设置为'selected'(如果它与用户之前选择的选项匹配)存储到数据库中:

<?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是最好的。你们摇滚:)。