PHP发布最后动态形式



我已经使用了一段时间循环显示下拉词是的,并且否显示了每个页面的用户权限,所以每个页面的页面名称和是或否下拉。

该表单看起来正确,并为每个用户显示正确的数据库值。但是,如果我将页面许可之一从Yes更改为否或VICE VERSER,则仅更新数据库中的最后一个下拉列表,而不是其余的,其余的都会更改。有什么想法我在这里缺少什么?

<?php
$sql = "SELECT DISTINCT username FROM users ORDER BY username";
$resultusers = $connect->query($sql);
?>
<?php
 require ("cw/connect.php");

?>
<?php
if(isset($_POST['selectbutton']))
{
    $username = $_POST['selectuser'];
$query = "SELECT
users.username, users.first, users.last, users.id, permissions.PermID, permissions.PermUserID, permissions.PermPagesID, permissions.view, pages.PagesName, pages.PagesLink, pages.PagesID
FROM users INNER JOIN permissions ON users.id = permissions.PermUserID INNER JOIN pages ON permissions.PermPagesID = pages.PagesID WHERE username = ?";
$stmt = mysqli_prepare($connect, $query);
if($stmt){
    //Put whats to be binded from the statement so in this case we want data for this username selected
    mysqli_stmt_bind_param($stmt,"s",$username);
    // here add all the varibles to be pulled from database
    mysqli_stmt_bind_result($stmt, $username, $first, $last, $id, $PermID, $PermUserID, $PermPagesID, $view, $PagesName, $PagesLink, $PagesID);

    mysqli_stmt_execute($stmt);
    mysqli_stmt_fetch($stmt);


?>

<b>First:</b><?php echo $first; ?><br>
<b>Last:</b><?php echo $last; ?><br>
<b>User:</b><?php echo $username; ?><br>
<hr>

<form action="user-permissions.php" method="post">
<?php
while ($stmt->fetch()) {
echo $PagesName;
echo "<br>"; 
echo "<select name="permissionSelect">";
?>
<option value="<?php echo $view; ?>"><?php echo $view; ?></option>
<option value="No">No</option>
<option value="Yes">Yes</option>
</select>
<br><br>
<?php
echo "<input type="hidden" name="PermPagesID" value="".$PermPagesID."">";
echo "<input type="hidden" name="PermUserID" value="".$PermUserID."">";
        }
        ?>
<?php
echo "<input type="submit" name="updatep">";
echo "<form>";

     }  
}
?>

<?php
//UPDATE PERSON
 require ("cw/connect.php");
if(mysqli_connect_error()){
    echo mysqli_connect_error();
    exit();
}
if(isset($_POST['updatep']))
{
    $view = mysqli_real_escape_string($connect,$_POST['permissionSelect']);
    $PermPagesID = mysqli_real_escape_string($connect,$_POST['PermPagesID']);
    $PermUserID = mysqli_real_escape_string($connect,$_POST['PermUserID']); 

$query = "UPDATE permissions SET view = ? WHERE PermPagesID = $PermPagesID AND PermUserID = $PermUserID";
$stmt = mysqli_prepare($connect, $query);
if($stmt){
    mysqli_stmt_bind_param($stmt, "s", $view);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_fetch($stmt);
    echo "Updated to: ".$username;

    }else{
    echo "object not created";
}
}
?>

原因是因为您的表单元素中不能使用多次使用的同名名称。否则,只会使用最后一个。

您将需要给他们所有不同的名称,或模仿阵列语法如下。例如,而不是:

echo '<select name="permissionSelect">';

使用:

echo '<select name="permissionSelect[]">';

然后,在您的PHP脚本中,您可以通过使用foreach循环来引用这些内容:

foreach($_POST['permissionSelect'] as $permissionSelect){
    //handle it here
}

您还需要为循环内的其他名称属性执行此操作。

最后,您会注意到我从代码中删除了您的后斜线。这是因为您可以使用单个引号或双引号。尽管PHP中的两者之间存在一些差异,但在大多数情况下,您可以互换它们。因此,如果PHP使用单引号,请使用双引号为您的HTML属性,反之亦然。

最新更新