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/

相关文章:

c# - 使用 Xamarin 连接到远程 MySQL

php - 如何修复PHP中的“ header 已发送”错误

php - 在不使用类的情况下返回具有 __toString 功能的对象

PHP - 查询 mysql 时的错误处理

android - 我可以在 Android 操作系统应用程序中使用的数据库大小是否有限制?

apache-flex - Flex 4如何创建加密的SQLite数据库

python - Django:无法将空表单字段保存到数据库 - 基数为 10 的 int() 的无效文字: ''

javascript - 如何在 Laravel 的 cookie 中的表单步骤之间存储 Vue 状态?

php - Laravel MIME 验证

javascript - 让 Webkit executeSql 事务返回一个值