使用PHP填充 <select></select> 下拉菜单?

10
<select name="select">
      
</select>

我希望从数据库中获取值来填充上述标签。

我已经编写了以下PHP代码。

while($row=mysql_fetch_array($result))
{

}

$row正常获取值。如何将其添加到

7个回答

15
这个怎么样:
echo '<select name="select">';
while($row=mysql_fetch_array($result))
{
    echo '<option value="' . htmlspecialchars($row['column_for_value']) . '">' 
        . htmlspecialchars($row['column_for_label']) 
        . '</option>';
}
echo '</select>';

当然,由你决定从$row中选择哪些项目作为每个<option>的值和文本。
请确保对来自数据库的数据进行转义,尤其是如果数据可能包含HTML标签;由于您要输出HTML,可以使用[`htmlspecialchars`][1]或[`htmlentities`][2]来实现。

请注意,这些函数可能还有一些额外的参数,我在示例中没有使用 -- 根据您使用的字符集,设置这些参数可能会很有用。


4

您可以通过以下方式在 while 循环中查看可用内容:

var_dump($result);
exit;

这将打印第一个结果及其数组内容。然后您可以看到要使用哪个字段来填充选项。从那里开始,您可以执行以下操作:

foreach ($result['field'] as $field) {
   print '<option value="'.$field.'">$field</option>';
}

当然,这只是一个非常基本的例子,正如其他人所指出的,您可能希望在将数据放入表单之前清理数据。

1
在 foreach 中使用数组而非 MySQL 获取函数,会让你的程序更高效。请优先考虑使用数组。 - Bart van Heukelom
请注意,声明 value="'.$field.'" 没有任何好处,因为它与选项文本完全相同。这实际上是不必要的标记膨胀,因为所有表单提交和 JavaScript 操作都将正确地选择文本作为值。 - mickmackusa

3

$selected_value="selected_value";
echo '<select name="select">';
while($row=mysql_fetch_array($result))
{
    if($selected_value==htmlspecialchars($row['column_for_value']))
    $selected=' selected';
    else
    $selected='';
    echo '<option value="'.htmlspecialchars($row['column_for_value']).'"'.$selected.'>'
    .htmlspecialchars($row['column_for_label']).
    '</option>';
}
echo '</select>';

对Pascal MARTIN的代码进行了一些补充,以便自动选择一些预定义值


3
所有上述答案都可以工作,但并不适当且需要额外的工作。您不应该使用echo输出到屏幕,也不必这样做。下面的示例假设您正在使用包含数据的对象,但您能够理解这个想法。
<select name="sales_person">
        <?php foreach ($sales_people as $sales_person){?>
            <option value="<?=$sales_person->first_name?> <?=$sales_person->last_name?>"><?=$sales_person->first_name?> <?=$sales_person->last_name?></option>
        <?php }?>
        </select>

重点是您不必回显出HTML。

3

我编辑了上一篇文章,现在它运行得非常完美。唯一的麻烦是,一旦用户提交表单,下拉框就会变空白... 有人知道一个简单的解决方案吗?

echo '<select name="course" id="course" >';
                while( $option = mysql_fetch_array($course_results)) {
echo "<option    value=".htmlspecialchars($option['cid']).">".htmlspecialchars($option['cname'])."</option>";
}
echo "</select>";

1
echo "<select>";
while( $option = mysql_fetch_array($result)) {
  echo "<option>".htmlspecialchars($option['column'])."</option>";
}
echo "</select>";

0
echo '<select>';
while($row=mysql_fetch_array($result)) {
  echo '<option>'.$row['whatever_index'].'</option>';
}
echo '</select>';

将“whatever_index”替换为您要获取的列名。


我认为您忘记了value属性。 - Kevin
如果未指定value属性,则将提交/使用<option></option>之间的文本。 - KJ Saxena

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接