im试图检查输入字段中的用户名和密码是否存储在我的数据库中。如果没有,那么它应该给出一条错误消息。我的数据库atm中有一个用户:用户名:alexander
密码:alexalex
但是,当我运行代码登录时,它并没有说这是正确的登录。
<?php
try{
$db = new PDO('sqlite:users.db');
}
catch(PDOException $err){}
if(isset($_POST['username'])){
$username = $_POST['username'];
$password = $_POST['password'];
try{
$sql = "SELECT * FROM players WHERE username='$username' AND password='$password'";
$st = $db->prepare($sql);
$st->execute();
if($st->fetchColumn() == 1){
//SUCCES LOGIN
}else{
//FAILED LOGIN
}
}catch(PDOException $err){}
}
...HTML CODE...
<form action="" method="POST" class="login-form">
<input type="text" id="one" name="username" placeholder="Username">
<input type="password" id="two" name="password" placeholder="Password">
<input type="submit" value="LOGIN" class="three">
</form>
非常感谢任何能够解决此登录问题的人!
如Jay Blanchard所述:
if($st->fetchColumn() == 1)
您应该使用fetch()
。
然而,一旦更改为fetch()
:,这个条件语句仍然会失败
if($st->fetch() == 1)
因为这检查是否只有1并且还需要满足这两个条件。
如果有多行相同的用户名,也会使您失败。
因此,使用>1
或>=1
。
也如评论中所述。如果这是一个直播网站或打算上线,请使用准备好的声明和password_hash()
。
你的数据库被黑客入侵只是时间问题。