php - 注意 : Undefined index: userid in. .. PHP 不发送隐藏的输入 id

标签 php mysql

我已经寻找解决我的问题的方法,但到目前为止还没有找到可行的解决方案。

我正在尝试使用 PHP 更新 MySQL 表,但我不断收到错误“未定义索引:用户 ID”。

下面是我的 editUsers.php 页面的所有代码。谁能看出我哪里出了问题吗?

confirm_is_admin();

$sessionid = $_SESSION['userid'];

$query = mysqli_query($db, "SELECT * FROM users JOIN users_in_roles ON users.id = users_in_roles.user_id WHERE users.id != $sessionid");

if(isset($_POST['delete'])){
$deleteid = $_GET['id'];

$deletequery = "DELETE FROM users WHERE id =?";

$deletestatement = $db->prepare($deletequery);
$deletestatement->bind_param('d', $deleteid);
$deletestatement->execute();
$deletestatement->store_result();

$deletesuccessful = $deletestatement->affected_rows == 1 ? true : false;
if($deletesuccessful){
    $userid = $deletestatement->delete_id;

    $deleteRoleQuery = "DELETE FROM users_in_roles WHERE id=?";

    $deleterolestatement = $db->prepare($deleteRoleQuery);
    $deleterolestatement->bind_param('d', $userid);
    $deleterolestatement->execute();
    $deleterolestatement->close();

    header('location: editUsers.php');
} else{
    echo "Failed";
}
}

if(isset($_REQUEST['update'])){
$updateid = $_REQUEST['id'];
$username = $_REQUEST['username'];
$userrole = $_REQUEST['roleid'];
$userpassword = $_REQUEST['password'];

$updatequery = "UPDATE users SET username=?, password=SHA(?) WHERE id =?";

$updatestatement = $db->prepare($updatequery);
$updatestatement->bind_param('ssd', $username, $password, $updateid);
$updatestatement->execute();
$updatestatement->store_result();

$updateSuccessful = $updatestatement->affected_rows == 1 ? true : false;
if($updateSuccessful){
    $userid = $updatestatement->update_id;

    $updateRoleQuery = "UPDATE users_in_roles SET role_id=? WHERE id=?";

    $updaterolestatement = $db->prepare($updateRoleQuery);
    $updaterolestatement->bind_param('dd', $userrole, $userid);
    $updaterolestatement->execute();
    $updaterolestatement->close();

    header('location: editUsers.php');
}
else {
    echo "Failed";
}

}


?>


<div id="container">
<?php
$row_count = mysqli_num_rows($query);
        if ($row_count == 0) {
            echo '<p style="color:red">No User details available</p>';
        } elseif ($query) {
            while($users = mysqli_fetch_array($query)){
                $user_id = $users['id'];
                $userrole = $users['role_id'];
                $username = $users['username'];

                echo '<div class="admin">';
                echo '<form method="post" action="editUsers.php"';
                echo '<input type="hidden" name="id" value="'.$user_id.'" />';
                echo 'Username: <input type="text" name="username" value="'.$username.'" /><br>';
                echo 'User Role: <input type="text" name="roleid" value="'.$userrole.'" /><br>(1 = admin, 2 = user)<br>';
                echo 'Password: <input type="password" name="password" value="" /><br>';
                echo '<input type="submit" name="update" value="Update" />&nbsp;<input type="submit" name="delete" value="Delete" />';
                echo '<br><br></form></div>';
            }
        }else {
             die('There was a problem with the query: ' .$query->error);             
         } 
         mysqli_free_result($query); 

?>
</div>

最佳答案

在 PHP 中,未定义索引通常指的是哈希数组表达式,您试图在该表达式中获取当前不存在于哈希数组中的键。

我看到两种情况,您试图获取可能导致此错误的关键“userid”(如果您注意到报告错误的代码行将会有所帮助)。

$sessionid = $_SESSION['userid'];

您的 session 数据中可能没有“userid”键。在尝试读取该 key 之前,您应该检查该 key 是否已设置。

if(isset($_POST['delete'])){
$deleteid = $_GET['userid'];

这是另一种情况,其中“userid”键可能未在 $_GET 超全局中设置。您应该在阅读之前检查它是否已设置。

关于php - 注意 : Undefined index: userid in. .. PHP 不发送隐藏的输入 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43567208/

相关文章:

php - glob() - 按上次修改的日期时间戳对文件数组进行排序

如果 this=1,mysql 使用一组不同的 WHERE 语句

mysql - 在表 mysql 中使用 IN 时非常慢 46.4878 秒

php - 如何检查一个词是否被 PHP 保留?

php - 如何将实体id与字符串连接起来生成代码用户?

php - 2 个 php.ini 文件

php - 命名键时获取 foreach 数字索引

php - 如何获取单个表中某些特定行的所有父行

php - 为什么我不应该在 PHP 中使用 mysql_* 函数?

php - 如何在单个 php 页面中将值插入到不同的表中?