我有一个选择控件,它将在每个用户旁边加载,并且该值默认根据MySQL数据库的结果显示用户所在的楼层。编辑列表的任何人都可以更改用户所在的楼层并提交更改以推送到数据库。但是当我收到$ _POST ['selFloor']值时,它总是以默认选择值为准。无论用户是否改变它。
<?php
$floors = array('1st'=>"First",
'2nd'=>"Second",
'3rd'=>"Third",
'4th'=>"Fourth",
'5th'=>"Fifth",
'6th Control'=>"Sixth");
$query = "SELECT * FROM employees ORDER BY name asc";
$result = $db->query($query);
$i = 0;
while ($row = $result->fetch_array())
{
$i++;
echo '<select name="field['.$i.'][floor]"';
foreach($floors as $key=>$val) {
echo ($key == $row['floor']) ? "<option selected=\"selected\" value=\"$key\">$val</option>":"<option value=\"$key\">$val</option>";
}
echo '</select>';
} ?>
选择控件的示例。如果$ row ['floor']返回['1st'],它将使该选项成为选定值,但是一旦用户将其更改为'2nd'并点击提交,$ _POST只会看到选择的值,无论哪个选项具有选定的论点。
foreach ($_REQUEST as $key => $val) {
if (is_array($val)) {
foreach($val as $subkey => $sub) {
echo $sub['floor'] // Outputs first option that got selected set
}
}
}
选择的HTML输出:
<select name="field[1][floor]">
<option value="1st">First</option>
<option value="2nd">Second</option>
<option selected="selected" value="3rd">Third</option>
<option value="4th">Fourth</option>
<option value="5th">Fifth</option>
<option value="6th">Sixth</option>
</select>
感谢。
答案 0 :(得分:1)
我没有在HTML中看到任何错误,除了你正在检查$ _POST ['selFloor']这一事实,而select的名字是字段[1] [floor]。尝试将其更改为“selFloor”:
echo '<select name="selFloor">';
...
我没有看到选择的结束角括号(>
)。
答案 1 :(得分:0)
由于每个<option>
菜单都有selected
属性,因此浏览器即使触发了change
事件,也不知道选择了哪一个。
尝试仅将selected
属性放在第一个<option>
上。
<?php
foreach($floors as $key=>$val) {
// if first, place selected attribute
echo ($key == $row['floor'])
? "<option value=\"$key\">$val</option>" // selected att was removed
:"<option value=\"$key\">$val</option>";
}
?>