检查用户名在数据库 php 中并从两个表中获取数据以登录
Check Username is in database php & get data from two tables to login
我正在创建一个网站,其中有三个不同的访问级别
- 0 = 正常
- 1 = 员工
- 2 = 管理员
在登录表单中,我设法检查密码 (SHA1) 是否与数据库中的密码(已加密)相匹配,但没有检查用户 ID。
当用户或员工/管理员注册时,他们的详细信息将存储到
包含更多详细信息(姓名、出生日期...)的单独表格。
问题
如何在我的代码中实现它?
$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'>";
}
}
有没有办法让这三类用户都通过登录页面登录,并从两个不同的表中检索数据?
我已经尝试了很多方法,但总是出现黑屏或显示
incorrect password
即使密码正确。
变量
$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: 先查询数据库中的userid,再查询密码
$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();
Q.2) 是的。有一种方法可以这样做。但是问题有点不完整添加一些代码。
我会在您编辑问题时更新我的答案以包含更多信息。
A) 您不应使用 mysql 库,因为它不安全且已弃用(即将删除):Why shouldn't I use mysql_* functions in PHP?
您应该使用 mysqli 或 PDO 库。
B) sha1 不安全,你应该使用类似 password_hash() or crypt() 的东西,但我想 sha1 可以用于教育目的。
C) 问题一:不需要查ID。
您使用 while ($row = mysql_fetch_array($result)) {
但由于您正在寻找唯一的 username/combination,因此应该只有一个结果或 none:
if ($record = mysql_fetch_array($result)) {
您似乎只检查密码是否正确,但实际上您应该检查用户名和密码的唯一组合(如果两个用户的密码相同怎么办?sha1()
对您没有帮助那里。
所以你应该有这样的东西:
$qs = "SELECT * FROM users WHERE username = '$username' AND password = '" . sha1($pw) ."'"
或者如果您使用实际员工 ID 作为用户名:
$qs = "SELECT * FROM users WHERE username = '$id' AND password = '" 。 sha1($pw) ."'"
D) 您将无法看到此消息 echo "<h1>User Menu Loading...</h1>";
,因为您在
之后立即进行了重定向
E) 问题 2:你需要再说明一下,是 2 还是 3 个表(因为你提到有 3 种类型的用户)。
我正在创建一个网站,其中有三个不同的访问级别
- 0 = 正常
- 1 = 员工
- 2 = 管理员
在登录表单中,我设法检查密码 (SHA1) 是否与数据库中的密码(已加密)相匹配,但没有检查用户 ID。
当用户或员工/管理员注册时,他们的详细信息将存储到 包含更多详细信息(姓名、出生日期...)的单独表格。
问题
如何在我的代码中实现它?
$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'>"; } }
有没有办法让这三类用户都通过登录页面登录,并从两个不同的表中检索数据?
我已经尝试了很多方法,但总是出现黑屏或显示
incorrect password
即使密码正确。
变量
$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: 先查询数据库中的userid,再查询密码
$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();
Q.2) 是的。有一种方法可以这样做。但是问题有点不完整添加一些代码。
我会在您编辑问题时更新我的答案以包含更多信息。
A) 您不应使用 mysql 库,因为它不安全且已弃用(即将删除):Why shouldn't I use mysql_* functions in PHP? 您应该使用 mysqli 或 PDO 库。
B) sha1 不安全,你应该使用类似 password_hash() or crypt() 的东西,但我想 sha1 可以用于教育目的。
C) 问题一:不需要查ID。
您使用 while ($row = mysql_fetch_array($result)) {
但由于您正在寻找唯一的 username/combination,因此应该只有一个结果或 none:
if ($record = mysql_fetch_array($result)) {
您似乎只检查密码是否正确,但实际上您应该检查用户名和密码的唯一组合(如果两个用户的密码相同怎么办?sha1()
对您没有帮助那里。
所以你应该有这样的东西:
$qs = "SELECT * FROM users WHERE username = '$username' AND password = '" . sha1($pw) ."'"
或者如果您使用实际员工 ID 作为用户名:
$qs = "SELECT * FROM users WHERE username = '$id' AND password = '" 。 sha1($pw) ."'"
D) 您将无法看到此消息 echo "<h1>User Menu Loading...</h1>";
,因为您在
E) 问题 2:你需要再说明一下,是 2 还是 3 个表(因为你提到有 3 种类型的用户)。