检查用户名是否在数据库php&;从两个表中获取要登录的数据
我正在创建一个有三种不同访问级别的网站检查用户名是否在数据库php&;从两个表中获取要登录的数据,php,mysqli,login,multiple-users,Php,Mysqli,Login,Multiple Users,我正在创建一个有三种不同访问级别的网站 0=正常 1=工作人员 2=管理员 在登录表单中,我设法检查了密码(SHA1)是否与数据库中的密码(已加密)匹配,但没有检查用户id 注册用户或职员/管理员后,其详细信息将存储到 包含更多详细信息(姓名、出生日期等)的单独表格 问题 我将如何在代码中实现这一点 $result = mysql_query( $qs ) or die( mysql_error() ); while( $row = mysql_fetch_array( $result )
- 0=正常
- 1=工作人员
- 2=管理员
$result = mysql_query( $qs ) or die( mysql_error() );
while( $row = mysql_fetch_array( $result ) ){
$stored_password = $row['Password'];
if( $stored_password == sha1( $pw ) ){
$_SESSION['Status'] = $row['Status'];
if( $_SESSION['Status'] == 0 ){
echo "<h1>User Menu Loading...</h1>";
echo"<META HTTP-EQUIV='Refresh' Content='1;URL=http://***/'>";
}else{
echo "<h1>Incorrect Password.</h1>";
echo"<META HTTP-EQUIV='Refresh' Content='1;URL=http://**/login.php'>";
}
}
如果没有,我想我应该创建单独的登录区域
谢谢(我正在将mysql改为mysqli)
编辑
添加了$qs的最近一次尝试
问题1)要检查用户id:首先检查数据库中的用户id,然后检查密码
$db=new mysqli("host", "sqlusername","sqlpassword","database");
$stmt = $db->prepare("select * from your_table_name where user_ID = ?");
$stmt->bind_param("s",$un);
$stmt->execute();
$result=$stmt->get_result();
问题2)是。有一种方法可以做到这一点。但问题有点不完整。添加一些代码。Q.1)要检查用户id,请首先检查数据库中的用户id,然后检查密码
$db=new mysqli("host", "sqlusername","sqlpassword","database");
$stmt = $db->prepare("select * from your_table_name where user_ID = ?");
$stmt->bind_param("s",$un);
$stmt->execute();
$result=$stmt->get_result();
问题2)是。有一种方法可以做到这一点。但问题有点不完整,请添加一些代码。我会在您编辑问题时更新我的答案,以包含更多信息 A) 您不应该使用mysql库,因为它不安全且已弃用(即将删除): 您应该使用mysqli或PDO库 B) sha1是不安全的,您应该使用类似于或的东西,但我想sha1可以用于教育目的 C) 问题1:您不需要检查ID。
您在($row=mysql\u fetch\u array($result)){时使用
,但由于您正在寻找唯一的用户名/组合,因此应该只有一个结果或没有:
if ($record = mysql_fetch_array($result)) {
您似乎只是在检查密码是否正确,但实际上应该检查用户名和密码的唯一组合(如果两个用户拥有相同的密码怎么办?sha1()
在这方面对您没有帮助
所以你应该有这样的东西:
$qs = "SELECT * FROM users WHERE username = '$username' AND password = '" . sha1($pw) ."'"
或者,如果您使用实际员工ID作为用户名:
$qs=“从用户名为“$id”和密码为“.sha1($pw)”的用户中选择*。”
D) 您将无法看到此消息echo“用户菜单加载…”;
,因为您在加载后立即有一个重定向
E) 问题2:您需要进一步澄清,是否有2个或3个表格(因为您提到有3种类型的用户)。我将在您编辑问题时更新我的答案,以包含更多信息
A) 您不应该使用mysql库,因为它不安全且已弃用(即将删除):
您应该使用mysqli或PDO库
B) sha1是不安全的,您应该使用类似于或的东西,但我想sha1可以用于教育目的
C) 问题1:您不需要检查ID。
您在($row=mysql\u fetch\u array($result)){
时使用,但由于您正在寻找唯一的用户名/组合,因此应该只有一个结果或没有:
if ($record = mysql_fetch_array($result)) {
您似乎只是在检查密码是否正确,但实际上应该检查用户名和密码的唯一组合(如果两个用户拥有相同的密码怎么办?sha1()
在这方面对您没有帮助
所以你应该有这样的东西:
$qs = "SELECT * FROM users WHERE username = '$username' AND password = '" . sha1($pw) ."'"
或者,如果您使用实际员工ID作为用户名:
$qs=“从用户名为“$id”和密码为“.sha1($pw)”的用户中选择*。”
D) 您将无法看到此消息echo“用户菜单加载…”;
,因为您在加载后立即有一个重定向
E) 问题2:您需要进一步澄清,是否有2个或3个表(因为您提到有3种类型的用户)。您应该包括您的数据库结构或一些查询请使用$qs
值更新问题(您现在使用的查询)@bg17aw完成-添加了我最近的一次尝试。谢谢sorry@Veej,我认为$qs是用于第2个问题的。您还应该包括用于第1个问题的$qs。您还应该提供数据库结构,或者至少更好地解释它。您应该包括您的数据库结构或一些查询请使用$qs
的值(您当前使用的查询)@bg17aw完成-添加了我最近的一次尝试。谢谢sorry@Veej,我认为$qs是你在第2题中使用的。你还应该包括你在第1题中使用的$qs。你还应该提供数据库结构,或者至少更好地解释它。嘿,所以我和我的老师谈了这个问题,他说我应该给我们一个用户标签le也是,因为这有助于解决问题-这是$qs将从用户表中选择用户名、密码和状态,而不是试图从两个不同的表中查找它。他还提到,如果可能的话,我应该更改sha1,我之前已经阅读了您的答案,所以我告诉了他关于crypt,他说那很好,非常感谢!!嘿,我和我的老师谈了这个问题,他说我也应该给我们一个用户表,因为这有助于解决问题-这是$qs将从用户表中选择用户名、密码和状态,而不是试图从两个不同的选项卡中查找它les他还提到,如果可能的话,我应该更换sha1,我之前看过你的答案,所以我告诉了他关于crypt的事,他说那很好,非常感谢!!