Php 如何启动会话并为使用mysql的用户设置访问级别

Php 如何启动会话并为使用mysql的用户设置访问级别,php,mysql,mysqli,Php,Mysql,Mysqli,我已经有了一个登录系统,并且100%正常工作,但是现在我想在登录时添加访问级别,我不知道如何添加。在我的数据库中,在我的登录表中,我创建了一个名为“权限\级别”的列,默认设置为“默认”,管理员设置为“主” 我怎样才能解决这个问题 不成功的尝试: <?php $mysqli = new mysqli('', '', '', ''); if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mys

我已经有了一个登录系统,并且100%正常工作,但是现在我想在登录时添加访问级别,我不知道如何添加。在我的数据库中,在我的登录表中,我创建了一个名为“权限\级别”的列,默认设置为“默认”,管理员设置为“主”

我怎样才能解决这个问题

不成功的尝试:

<?php

$mysqli = new mysqli('', '', '', '');

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$query = "SELECT permission_level FROM authme WHERE = '".$user."'";
echo $user;

if ($result = $mysqli->query($query)) {

    /* fetch associative array */
    while ($row = $result->fetch_assoc()) {
        printf ("%s \n", $row["permission_level"]);
    }

    /* free result set */
    $result->close();
}


session_start();
$_SESSION['UserSession'] = $_POST['username'];

您需要在sql查询之后将db表数据存储到会话变量中

(1) 请移动会话_start();到页面的开头

(2) 然后改变

if ($result = $mysqli->query($query)) {

    /* fetch associative array */
    while ($row = $result->fetch_assoc()) {
        printf ("%s \n", $row["permission_level"]);
    }

    /* free result set */
    $result->close();
}

然后,您可以使用$\u SESSION['permission\u level']执行您想要的操作(请记住使用SESSION变量将SESSION\u start()放在所有PHP脚本的开头)

例如,如果您只希望permisson level=“master”用户访问某个页面(例如admin.php),那么在此admin.php中,您应该在脚本顶部添加以下内容:

<?php
session_start();

if ($_SESSION['permission_level']!="master")
{
echo "You are not allowed to access this page";
exit();
}

// add other codes below this line.

?>



另一方面,正如@esquw所提到的,也请使用参数化的prepared语句来避免SQL注入。

在继续执行上述要求之前,您应该知道您的脚本存在严重的SQL注入漏洞。永远不要将用户输入直接连接到查询文本中。改用。它们只是获得我期望的结果的方法,但在几次尝试失败后,我在这里问,sql注入我担心以后的步骤,以及我也将使用的其他语言,如jquery
$user
,没有分配,所以它将为空?在阅读了这个问题之后,不清楚问题是什么。(除了sql注入)$user被分配到超级全局“$\u POST['username'],并且此页面是有条件的,只有在有人成功登录的情况下才有可能访问它。我如何使用列值来限制某些级别无法访问某些内容?请参阅我的略作修改的答案,其中给出了一个示例。我不知道发生了什么,但“if($result=$mysqli->query($query)){”不再工作,我用一个echo测试了它,但没有显示echo编辑:我的查询定义如下:“$query=”SELECT username,permission_level FROM authme WHERE username=?”;如果要在SQL语句中实现参数化的prepared语句,请检查您的服务器是否支持Mysqli/PDO。(否则将无法工作)。即使它支持,您也需要修改代码以使用参数化准备语句,并请参考网络上的一些工作示例。以前,我测试了类似fetch_assoc的查询,但我的查询不同,我不是只搜索一个用户,而是搜索了几个用户,但是,当我添加e查询“WHERE username=?”if停止工作。如何在不出现此错误的情况下仅搜索一个用户?
<?php
session_start();

if ($_SESSION['permission_level']!="master")
{
echo "You are not allowed to access this page";
exit();
}

// add other codes below this line.

?>