php - sqlite登录表单无法正常工作

标签 php sqlite

我试图检查输入字段中输入的用户名和密码是否存储在我的数据库中。如果没有,则应该给出错误消息。我的数据库atm中有一个用户:
用户名:亚历山大
密码: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()

数据库被黑客入侵只是时间问题。

关于php - sqlite登录表单无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37259744/

相关文章:

nginx - APC 净化率和碎片

php - 来自 mysql/php Json 编码数据和 Jquery 的 LazyLoad 内容

php - 在 MySQL 中存储日志记录时的性能问题

php - Sonata Admin (2.3) 中的嵌套集合字段

android - 我怎样才能只从安卓电话簿中获取所有手机号码?

ios - 通过 Redland-ObjC 在 iOS 上使用 Sqlite3 作为 Redland RDF 存储

使用 Sqlite 和 GRDB 的 SwiftUI FileDocument

PHP 命名空间 - 如何包含不在命名空间中的第三方库?

c++ - sqlite 更新查询在 C++ 中不起作用

Android - BaseColumns 和 _id