我编写了一些PHP代码,允许我创建一个html下拉框,然后选择应该选择的值。代码是:
$role_drop = "<select name='role'>";
$role_drop .= "\r\n<option value='Resident Assistant'>Resident Assistant</option>";
$role_drop .= "\r\n<option value='Community Assistant'>Community Assistant</option>";
$role_drop .= "\r\n<option value='Head RA'>Head RA</option>";
$role_drop .= "\r\n</select>";
$result = mysql_query("SELECT role FROM users");
if (@mysql_num_rows($result)) {
while ($r=@mysql_fetch_assoc($result)) {
$role = $r["role"];
$role_drop = str_replace(">$role</option>", "selected=\"\" >$role</option>",$role_drop);
echo $role_drop;
}
}
实际上,这段代码中混合了一堆HTML,但这里是所有的PHP。当我运行它时,它似乎工作。但是,假设查询返回了带有角色的4个下拉框(来自4个用户),我要编辑或选择返回的第二个下拉框的新角色(带有UPDATE查询),然后当页面刷新时,全部我更新的下拉框后面的角色将显示他们选择的值作为我在第二个下拉框中选择的新值。
并不是实际数据库中的值是错误的,它们只显示错误的选定值。以下是为第二个下拉框选择新值后第三个下拉框的源代码:
<select name="role">
<option selected="" value="Resident Assistant">Resident Assistant</option>
<option value="Community Assistant">Community Assistant</option>
<option selected="" value="Head RA">Head RA</option>
</select>
所以,它似乎选择了正确的值(Resident Assistant),但是它也选择了“Head RA”,这就是我将之前的下拉框更改为。
这很奇怪,我不知道为什么会这样。有什么想法吗?
谢谢!
答案 0 :(得分:1)
这是因为您每次都在更新$role_drop
,因此之前的所有更改都会显示在后续下拉列表中。我将循环更改为:
if (@mysql_num_rows($result)) {
while ($r=@mysql_fetch_assoc($result)) {
$role = $r["role"];
$temp_role_drop = str_replace(">$role</option>", "selected=\"\">$role</option>", $role_drop);
echo $temp_role_drop;
}
}
这样你就不会覆盖原来的下拉标记。
答案 1 :(得分:1)
坚果 - 忘了逃避我的代码。我的意思是,“这只是<OPTION VALUE="foo" SELECTED>
”。
答案 2 :(得分:0)
Dunno如果这有帮助,但根据HTML规范,您不应该传递值和每个OPTION的SELECTED属性。这只是。