Firefox没有$ _POST所有重复的区域值,它只发布最后一个

时间:2015-06-30 04:40:36

标签: php html firefox

因此,下面发布的代码在Internet Explorer中运行良好,但在Firefox中运行不正常。传递URL变量UserName时,无论选择哪个按钮,Firefox都只使用记录集中的最后一条记录。此页面使用重复区域,以允许站点管理员通过单击每个区域中的各个按钮来设置密码,更新用户配置文件和删除用户。应该发生的是,当单击一个按钮时,它应该转发到相应的页面,其中包含在URL末尾的区域UserName值。问题仅在Firefox中。 $_POST['UserName']始终等于SQL数据库中最后创建的记录的值。我对PHP很新,所以我不确定我在这里忽略了什么。我的搜索都没有任何帮助。

这是PHP:

<?php
$query_ManageUsers =$dbh->prepare("SELECT * FROM users WHERE UserLevel = 0 ORDER BY UserName ASC");
$query_ManageUsers->execute();
$row_ManageUsers = $query_ManageUsers->fetch(PDO::FETCH_ASSOC);
$query_RowCount = $dbh->prepare("SELECT COUNT(*) FROM users");
$totalRows_ManageUsers = $query_RowCount->fetchColumn();

if ((isset($_POST['UserID'])) && ($_POST['UserID'] != ""))
{
    $userName = $_POST['UserName'];
    switch ($_REQUEST['admin'])
    {
        case "Reset Password":
            $redirect = "SetPassword.php?UserName=$userName";
            header(sprintf("Location: %s", $redirect));break;
        case "Update Profile":
            $redirect = "UpdateUserProfile.php?UserName=$userName";
            header(sprintf("Location: %s", $redirect));break;
        case "Delete User":
            $redirect = "ConfirmDelete.php?UserName=$userName";
            header(sprintf("Location: %s", $redirect));break;
    }
}
?>

这是HTML

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=EDGE"/>
<meta http-equiv="Content-Type" content="text/html: charset=utf-8"/>
<title>Admin</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<script language="JavaScript" type="text/javascript">document.documentElement.className="xr_bgh2";</script>
<link rel="stylesheet" type="text/css" href="index_htm_files/xr_main.css"/>
<link rel="stylesheet" type="text/css" href="index_htm_files/xr_text.css"/>
<link rel="stylesheet" type="text/css" href="index_htm_files/custom_styles.css"/>
<script type="text/javascript" src="index_htm_files/roe.js"></script>
</head>
<body class="xr_bgb2">
<div style="width:625px;">
<label style="text-align:left; font-size:18px; font-weight:bold;" >User Administration</label>
<?php if ($row_ManageUsers != 'null') { // Show if recordset not empty ?>
<?php do { ?>
<table border="1">
    <tr>
    <td>
    <form id="ManageUsers" method="post" >
        <table width="615">
        <tr>
        <td style="width:250px">
        <input name="UserName" style="width:250px; background-color:#C8DACA; border:none; font-size:14px" id="UserName" value="<?php echo $row_ManageUsers['UserName']; ?>" readonly="readonly" /></td>
         <td style="width:100px">
         <input name="admin" type="submit" value="Reset Password" form="ManageUsers" /></td>
         <td style="width:100px">
         <input name="admin" type="submit" value="Update Profile" form="ManageUsers" /></td>
         <td style="width:100px">
         <input name="UserID" type="hidden" id="UserID" form="ManageUsers" value="<?php echo $row_ManageUsers['UserID']; ?>" />
         <input name="admin" type="submit" value="Delete User" form="ManageUsers"/>
         </td>
         </tr>
     </table>
  </form>
</td>
</tr>
</table>
<?php } while ($row_ManageUsers = $query_ManageUsers->fetch(PDO::FETCH_ASSOC)); ?>
<?php } // Show if recordset not empty ?>
</div>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

正如我在评论中提到的,问题是您的表单具有相同的ID,如果您查看您的html / php代码,您会注意到整个表单是为每个循环输出的,并且包括相同的循环的每次迭代的id。

有些浏览器会忽略其他浏览器可能只使用最后一次出现的ID。

如果不对此进行测试,我无法100%确定这是问题,但至少它是不好的做法,应该修复。

我建议使用唯一的ID,或者甚至将该ID用作类。

只是为了澄清,当我说表格ID时我的意思是

 <form id="ManageUsers" method="post" >