我正在为我的登录页面创建一个操作代码。这是我的尝试:
if(isset($_POST['sign_in'])){
if(empty($_POST['uname'])){
echo "<script>alert('Enter Username')</script>";
}else{
$uname = $_POST['uname'];
if(empty($_POST['pass'])){
echo "<script>alert('Enter Password')</script>";
}else{
$pass = $_POST['pass'];
$select = $db->prepare("SELECT * FROM users WHERE uname = '$uname' AND pass = '$pass'");
$select->setFetchMode(PDO::FETCH_ASSOC);
$select->execute();
$data = $select->fetch();
if($data['uname'] != $uname){
echo "<script>alert('Username Does Not Exist')</script>";
}elseif($data['uname'] == $uname AND $data['pass'] != $pass){
echo "<script>alert('Password Is Not Correct')</script>";
}elseif($data['uname'] == $uname AND $data['pass'] == $pass){
$_SESSION['uname'] = $data['uname'];
$_SESSION['pass'] = $data['pass'];
echo "<META HTTP-EQUIV='Refresh' Content='0; URL=profile.php'>";
}else{
echo "<script>alert('Please Try Again')</script>";
}
}
}
}
因此,如您所见,我已经通过嵌套的if / else语句分隔了每个检查。
现在我的这段代码问题是,当用户在正确的用户名内输入错误密码时,它不会显示消息密码不正确。
elseif($data['uname'] == $uname AND $data['pass'] != $pass){
echo "<script>alert('Password Is Not Correct')</script>";
而不是此消息,出现用户名不存在错误消息!
所以我的问题是,如何解决此问题?
答案 0 :(得分:0)
这是您选择的查询:
$select = $db->prepare("SELECT * FROM users WHERE uname = '$uname' AND pass = '$pass'");
$select->setFetchMode(PDO::FETCH_ASSOC);
$select->execute();
$data = $select->fetch();
现在您要测试什么?
if($data['uname'] != $uname){ ... }
elseif($data['uname'] == $uname AND $data['pass'] != $pass){ ... }
elseif($data['uname'] == $uname AND $data['pass'] == $pass){ ... }
您正在以SELECT
和WHERE
为uname = '$uname'
条件的pass = '$pass'
请求,所以有两种可能性:
1 /如果用户具有良好的一致并通过,则将使用$data['uname'] == $uname
和$data['uname'] == $uname
因此您将满足以下条件:$data['uname'] == $uname AND $data['pass'] == $pass)
2 /如果为$data['uname'] != $uname
或$data['uname'] != $uname
,您将只选择$data
中的任何内容
这样,您将满足第一个条件:$data['uname'] != $uname
,无论如何
编辑:我也会添加一些很好的建议,人们也会在评论中给您
答案 1 :(得分:0)
如果密码错误,则$ data中将没有任何内容,因此如果显示错误的用户名不存在,它将首先被捕获。
最简单的解决方案是您必须获取该用户的密码。
$q1 = "select password from users where uname= $uname;
然后,如果密码为空,则将该密码与用户密码一起使用,则该用户不存在,否则密码错误。