繁体   English   中英

检查用户名是否在数据库php中并从两个表中获取数据以进行登录

[英]Check Username is in database php & get data from two tables to login

我正在创建一个具有三种不同访问级别的网站

  • 0 =正常
  • 1 =员工
  • 2 =管理员

在登录表单中,我设法检查密码(SHA1)是否与数据库中的密码(已加密)匹配,但未检查用户ID。

注册用户或职员/管理员时,他们的详细信息存储在单独的表中,这些表具有更多详细信息(Name,DateOfBirth,...)。

问题

  1. 如何在我的代码中实现呢?

     $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'>"; } } 
  2. 这三种类型的用户都可以通过登录页面登录并从两个不同的表中检索数据吗?

我已经尝试了很多方法,但是一直显示黑屏,或者说

密码错误

即使密码正确。

变数

$un = $_POST['User_ID'];
$sf = $_POST['Staff_ID'];
$pw = $_POST['Password'];
$st = $_POST['Status'];

如果没有,我想我应该创建单独的登录区域。

谢谢( 我目前正在将mysql更改为mysqli

编辑

$ qs 最近最多尝试

$qs="SELECT Cadets.Cadet_ID, Cadets.Password, Cadets.Status, 
        Staff.Staff_ID, Staff.Password, Staff.Status, 
 FROM   Cadets, Staff
 WHERE  Cadets.Cadet_ID ='$un' AND Staff.Staff_ID = '$sf'";

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库,因为它不安全且已弃用(很快将被删除): 为什么我不应该在PHP中使用mysql_ *函数呢? 您应该使用mysqli或PDO库。

B)sha1是不安全的,您应该使用诸如password_hash()crypt()之类的东西,但我想sha1可以用于教育目的。

C)问题1:您不需要检查ID。
您可以使用while ($row = mysql_fetch_array($result)) {但是由于您正在寻找唯一的用户名/组合,因此应该只有一个结果或没有结果:

if ($record = mysql_fetch_array($result)) {

您似乎只是在检查密码是否正确,但是您实际上应该在检查用户名和密码的唯一组合(如果两个用户使用相同的密码, sha1()不能为您提供帮助sha1()

因此,您应该具有以下内容:

$qs = "SELECT * FROM users WHERE username = '$username' AND password = '" . sha1($pw) ."'"

或者,如果您使用实际的员工ID作为用户名:

$ qs =“选择*来自用户的用户名='$ id'和密码='”。 sha1($ pw)。“'”

D)您将无法看到此消息echo "<h1>User Menu Loading...</h1>"; 因为您之后有重定向

E)问题2:您需要多说明一点,是否有2或3个表(因为您提到了3种类型的用户)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM