Php $\u POST仅从选择控件接收默认值

Php $\u POST仅从选择控件接收默认值,php,html,select,post,Php,Html,Select,Post,我有一个select控件,它将加载到每个用户旁边,根据MySQL数据库的结果,该值默认为该用户所在的楼层。编辑列表的人可以更改用户所在的楼层,并将更改提交到数据库。但是,当我收到$_POST['selFloor']值时,它总是以默认选择的值为准。无论用户是否更改它 <?php $floors = array('1st'=>"First", '2nd'=>"Second", '3rd'=>"Third",

我有一个select控件,它将加载到每个用户旁边,根据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>';
} ?>
选择的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>

弗斯特
第二
第三
第四
第五
第六

谢谢。

我在您的HTML中没有看到任何错误,除了您正在检查$\u POST['selFloor'],而选择的名称是field[1][floor]。尝试将其更改为“selFloor”:

echo '<select name="selFloor">';
...
echo';
...

我看不到select的收尾角括号(
)。

因为您的每个
菜单都有一个
selected
属性,即使浏览器正在触发
change
事件,它也不知道选择了哪一个

尝试仅将
选定的
属性放置在第一个

<?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>";
    }
?>


你的标签怎么办?如果每个用户的
选择
都被命名为
selFloor
,那将是你的问题。什么是$row['floor']?不,它们是单独命名的。我只是将其简化为示例
name=“field['.$i.][floor]”
其中$i在每个循环后为$i++,以使每个选择唯一。$row['floor]从以下位置返回:
$query=“select*from employees ORDER BY name asc”$结果=$db->query($query);而($row=$result->fetch_array())
这不是它。现在,If语句不执行任何函数,因为每个echo之间没有差异。而且楼层不一定总是第一层,可能是第二层到第六层。如果左回音与地板匹配,则左回音提供选定属性,而右回音不匹配。因为只有一个参数与楼层相等,所以两边都不应用选定的参数。
<?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>";
    }
?>