Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP&;MySQL用户登录和权限系统_Php_Mysql - Fatal编程技术网

PHP&;MySQL用户登录和权限系统

PHP&;MySQL用户登录和权限系统,php,mysql,Php,Mysql,我有一个用PHP和MySQL建立的网站的用户登录系统。我的问题是我是否可以修改我现在拥有的,以创建一个“权限”系统。换句话说,只为用户显示某些控件,为管理员显示不同的控件。在我的mysql表中,我有'id','username','password',以及一个带有“a”和“b”的枚举“permissions”“a”是默认值(不是管理员)。下面我将向你展示我的尝试 这个文件是“checklogin.php”(为了节省空间,我不会添加所有代码) 因此,在这个文件中,我将检查表中有多少行与用户输入匹配

我有一个用PHP和MySQL建立的网站的用户登录系统。我的问题是我是否可以修改我现在拥有的,以创建一个“权限”系统。换句话说,只为用户显示某些控件,为管理员显示不同的控件。在我的mysql表中,我有
'id'
'username'
'password'
,以及一个带有“a”和“b”的枚举“permissions”“a”是默认值(不是管理员)。下面我将向你展示我的尝试

这个文件是“
checklogin.php
”(为了节省空间,我不会添加所有代码)

因此,在这个文件中,我将检查表中有多少行与用户输入匹配,以及是否为admin,如果有,则使用用户名、密码和权限注册会话

接下来,我有一个文件“
login\u success.php


登录成功

上面的代码只是检查会话是否已注册,如果未注册,则返回登录表单。下面是一段代码,用于检查用户是否是管理员。 登录部分的工作,我只是无法计算出权限


所以最后,我想我的问题是为什么这不起作用?这在逻辑上似乎是正确的。很抱歉邮件太长。感谢您的帮助。

我建议您遵循以下逻辑:如果用户的某个列中有“a”,那么您将以不同的方式对待他。这意味着每个用户只会出现一行。只有一次会议。同样的数据结构。同一届会议。但是,基于“权限”列的价值,您可以在应用程序中为他打开更多的“门”。你要做的一切就是检查他会话的“权限”是否设置为“a”或任何标识他为管理员的内容

希望这有帮助。
maxim

我向您建议如下逻辑:如果用户的某个列中有“a”,那么您将以不同的方式对待他。这意味着每个用户只会出现一行。只有一次会议。同样的数据结构。同一届会议。但是,基于“权限”列的价值,您可以在应用程序中为他打开更多的“门”。你要做的一切就是检查他会话的“权限”是否设置为“a”或任何标识他为管理员的内容

希望这有帮助。
maxim

首先,您使用的是弃用的
会话\u寄存器,会话\u已注册
。Php手册建议使用
$\u会话
session\u已注册
需要字符串,但您不传递字符串-它应该类似于
session\u已注册(“admin”)
,而不是
session\u已注册(admin)

此外,我认为你可以改进整个程序:

  • 从数据库读取
    从$tbl\u name中选择*其中username='$myusername'
    (假设$myusername正确转义)
  • 若记录不存在,则用户名无效
  • 检查密码(或从安全角度看更好的哈希和)是否与存储值匹配。如果不是,您可能希望增加“失败的登录尝试”字段
  • 然后检查权限。我猜客户可能有不止一个角色

  • 首先,您使用的是弃用的
    会话\u寄存器,会话\u已注册
    。Php手册建议使用
    $\u会话
    session\u已注册
    需要字符串,但您不传递字符串-它应该类似于
    session\u已注册(“admin”)
    ,而不是
    session\u已注册(admin)

    此外,我认为你可以改进整个程序:

  • 从数据库读取
    从$tbl\u name中选择*其中username='$myusername'
    (假设$myusername正确转义)
  • 若记录不存在,则用户名无效
  • 检查密码(或从安全角度看更好的哈希和)是否与存储值匹配。如果不是,您可能希望增加“失败的登录尝试”字段
  • 然后检查权限。我猜客户可能有不止一个角色

  • 首先,您很懒,有引号,例如在下面几行:

    $user=a;
    $admin=b;
    if(!session_is_registered(myusername)){
    
    但我不知道这是否是问题所在

    其次,在使用会话之前,需要调用
    session\u start()

    你为什么不做下面的查询呢

    SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'
    
    然后,您可以读取返回的权限,而不必处理复杂的双重查询设置。
    当然,您必须确保没有重复的用户名,但始终如此。

    首先,您不喜欢使用引号,例如在以下几行中:

    $user=a;
    $admin=b;
    if(!session_is_registered(myusername)){
    
    但我不知道这是否是问题所在

    其次,在使用会话之前,需要调用
    session\u start()

    你为什么不做下面的查询呢

    SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'
    
    然后,您可以读取返回的权限,而不必处理复杂的双重查询设置。
    当然,您必须确保没有重复的用户名,但始终如此。

    没错,很多地方都缺少引号。。。这是一种非常糟糕的编码风格,而且让
    PHP
    允许它语法化是一种耻辱。现在这是一种临时代码。。。当我做session时,它是注册的(admin),没有引号,它不是在检查之前声明的$admin吗?我相信我能够检查权限,但如何在多个页面上存储权限信息?注册会话?谢谢@DenimVallorosi:通常你们注册会话,并在那个里存储一些关于用户的信息,这样你们就不必每次都查询数据库了。我更喜欢定义一个类,该类包含基本用户数据的字段,几乎每个页面都需要这些数据(比如用户名、电子邮件、头像、角色等),并在会话中存储和实例该类。许多其他人使用数组而不是类。@a1ex07是的,我知道关于注册会话。由于某种原因,我在另一个专栏中获取信息并注册时遇到了困难。我的逻辑正确吗