繁体   English   中英

PHP设置下拉框的选定值

[英]PHP set selected value of dropdown box

我有一个用PHP构建的下拉框。 这是代码:

 $region_result = mysql_query("SELECT * FROM region ORDER BY region");    

 $dropdown = "<select name='region'>";
while($row = mysql_fetch_assoc($region_result)) {
    $rid = $row["id"];
    $region = $row["region"];

    $dropdown .= "\r\n<option value='{$row['rid']}'>{$region}</option>";
}
 $dropdown .= "\r\n</select>";

处理完以上代码后,我需要设置下拉框的选定值。 有没有简单的方法可以做到这一点?

有没有人有什么建议? 谢谢!

编辑:

谢谢大家的答案。 让我解释一下我在做什么。 我正在设置“编辑用户”页面,您可以在其中按多个条件搜索用户,然后在“编辑模式”中(即在文本框和下拉框中)列出结果。 这样您就可以编辑和更新用户。 对于两个用户字段,我需要在下拉框中列出数据(以确保数据完整性和约束)。 因此,我想显示那些下拉框,其中包含您可以更改的所有可能值,但我希望下拉列表的选定值是当前与用户关联的值。

因此,我能够按照deceze的建议进行工作-在我的while循环中使用数据库结果设置PHP值,我插入了一个嵌套的while循环,该循环将构造$ dropdown,并在其中嵌套一个if -环。 我不为所有这些嵌套循环而疯狂。 这是该代码段:

 if (@mysql_num_rows($result)) {
        while ($r=@mysql_fetch_assoc($result)) {    
            $fname = $r["fname"];
            $lname = $r["lname"];
            $region = $r["region"];
            $role = $r["role"];
            $extension = $r["extension"];
            $username = $r["username"];
            $building = $r["building"];
            $room = $r["room"];?>

            <?php
            $dropdown = "<select name='region'>";
            while($row = mysql_fetch_assoc($region_result)) {
                $rid = $row["id"];
                $region2 = $row["region"];

                if($region == $region2){
                    $dropdown .= "\r\n<option selected='selected' value='{$row['rid']}'>{$region}</option>";
                }else{
                    $dropdown .= "\r\n<option value='{$row['rid']}'>{$region2}</option>";
                }
            }
            $dropdown .= "\r\n</select>";
            ?>

但是,我正在考虑将其更改为文本替换(由soulscratch和zombat建议),因为我认为这样做会更好。

...但是,当一个以上的结果集满足搜索条件时,这似乎不起作用(因为第二和第三等结果的下拉框为空)。

你们有什么感想?

使用字符串的构建方式,这是一个相当简单的str_replace() ,它很不错,因为它节省了需要正则表达式的麻烦:

$dropdown = str_replace("value='".$rid."'","value='".$rid."' selected=\"selected\"",$dropdown);

如果您想在事实之后更改组装的HTML ,则需要使用复杂的字符串替换方法或Javascript,但这两种都不是一个好的选择。

最好的选择是重组程序,以便在第一次遍历循环时可以设置selected属性。

您将可以在$ _REQUEST ['region']中找到它

我敢打赌,您会再次遇到这个问题,这意味着值得提出一个更灵活的解决方案。 为此有一个想法:

首先,使用数组保存下拉列表的选项。 如果需要具有相同选项的多个选择元素,则可以免费重用该数组:

$options = array ();
while ($row = mysql_fetch_assoc($region_result)) {
  $options[$row['id']] = $row['region'];
}

然后,您可以将其输入到生成选择控件的函数中:

function getSelect ($name, $options, $current)
{
  $markup = '<select name="' . htmlspecialchars($name) . '">';
  foreach ($options as $value => $label)
  {
    $selected = ($value == $current) ? ' selected="selected"' : '';
    $markup .= sprintf(
      "<option value=\"%s\"%s>%s</option>\r\n",
      htmlspecialchars($value), 
      $selected, 
      htmlspecialchars($label)
    );
  }
  $markup .= '</select>';
  return $markup;
}

(您还可以添加一个或多个可选参数来设置idclass等)

另外,您提到您出于速度考虑正在考虑使用切换方法,但这不太可能是时候和地方来担心性能了。 现在关注可维护的代码,以后需要进行的任何性能调整都将变得更加容易和有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM