我正在研究一个注册登录系统,但我面临以下问题:-我可以有两个(或更多)员工具有相同的名字和相同的姓氏,和可能具有相同的密码,每个位于相同的位置,或不同。当我试图注册它们时,显然没有问题,但当我想登录它们时,问题出现了。
Users表:
id int (11) A_I P_K,
firstname varchar (50),
lastname varchar(50),
password varchar(150)
Register.php
<?php
$db = new PDO('mysql:host=127.0.0.1;dbname=xxx', 'root', '');
$fname = isset($_POST['fname]) ? $_POST['fname'] : '';
$lname = isset($_POST['lname']) ? $_POST['lname'] : '';
$pass = isset($_POST['pass']) ? password_hash($_POST['pass'], PASSWORD_DEFAULT) : '';
$stmt = $db->prepare('INSERT INTO users SET fname=?,lname=?,pass=?');
$stmt->execute([$fname,$lname,$pass]);
?>
<form method="POST">
<input type="text" name="fname"/><br/>
<input type="text" name="lname"/><br/>
<input type="password" name="pass"/><br/>
<input type="submit" value="Register"/>
</form>
假设以下用户将注册:
fname=aaa lname=bbb pass=123456 // password_hash(123456) = hash1
fname=aaa lname=bbb pass=123456 // password_hash(123456) = hash2
login。
<?php
$db = new PDO('mysql:host=127.0.0.1;dbname=xxx', 'root', '');
$fname = isset($_POST['fname]) ? $_POST['fname'] : '';
$lname = isset($_POST['lname']) ? $_POST['lname'] : '';
$pass = isset($_POST['pass']) ? $_POST['pass'] : '';
$stmt = $db->prepare('SELECT * FROM users WHERE fname=? AND lname=?');
$stmt->execute([$fname,$lname]);
while ($row = $stmt->fetch(PDO::FETCH_OBJ)){
if (password_verify($pass, $row->pass)) {
echo $row->fname,' ',$row->lname,'<br/>',$row->pass,"<br/>";
// header('Location: app.php');
}
}
?>
<form method="POST">
<input type="text" name="fname"/><br/>
<input type="text" name="lname"/><br/>
<input type="password" name="pass"/><br/>
<input type="submit" value="Login"/>
</form>
如果我运行Login.php脚本,我会得到以下输出:
aaa bbb
$2y$10$Onkd3S06bOuOuyEH0/I9Be4jry1G8uIXgb3LxwroBZfZzywHKA6Eq (== hash1)
aaa bbb
$2y$10$ss0n1iBYPN4LG2VLP90Yc.vH109Y1Lq54X0bI/TGS242Hn/VkGwVi (== hash2)
我的问题是,我如何区分这两个用户,使他们能够成功登录app.php页面,我必须显示他们的凭据和其他个人信息,这明显不同于另一个用户。谢谢!
LE:如果我尝试使用LIMIT 1
进行登录查询,那么它将只显示将在db中找到的第一个记录。
您可以在表中使用其他唯一字段,如用户名或电子邮件,这样您就可以确保获得正确的帐户,即使最后一个&名字不同
如果用户具有相同的名、姓和密码,则无法确定数据库中的哪个用户是正确的。你需要给他们一个独特的部分。可以是登录名或者邮箱地址
您确实需要为每个用户分配一个惟一的id来处理此类情况。如何生成id取决于您。
不强制用户使用username
是强制性的吗?
你也可以有email
,它总是不同的。
目前大多数网站要么强制用户使用唯一的username
或email
。
email
必须是唯一的,因为它是用户与站点管理员的联系点。