2012-08-07 32 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