【问题标题】:PHP - Comparing what the user entered to data in a databasePHP - 将用户输入的内容与数据库中的数据进行比较
【发布时间】:2015-05-01 11:12:16
【问题描述】:

我有一个简单的联系表单,它向 PHP 发布两个变量,然后我将其插入到这样的数据库中。

<?php
    $username = $_POST["username"];
    $password = $_POST["password"];
    $db->query("INSERT INTO users (username,password) VALUES ('$username', '$password')");
?>

我现在创建了 login.php,我希望用户能够使用存储在数据库中的信息登录。我不担心安全或任何事情,我只是想让自己放松一下。允许用户使用用户名和密码登录的最简单方法是什么?

【问题讨论】:

  • 这已经是最简单的用户名和密码方式了..
  • 是的,我有一个表单,用户可以在其中输入用户名和密码。我只是不确定如何将用户输入的内容与数据库中的实际内容进行比较。
  • 帮自己一个忙,从右脚开始。请参阅 ircmaxell 的回答 stackoverflow.com/a/29778421,其中他使用 PDO 和准备好的语句和 password_hash()

标签: php mysql sql


【解决方案1】:
 error_reporting(0);
  session_start();
  include_once '../example.php';

  /***************************** Step 2 ****************************/
  if(isset($_REQUEST['admsubmit']))
  {

      $result=executeQuery("select * from adminlogin where admname='".htmlspecialchars($_REQUEST['name'],ENT_QUOTES)."' and admpassword='".md5(htmlspecialchars($_REQUEST['password'],ENT_QUOTES))."'");

     // $result=mysqli_query("select * from adminlogin where admname='".htmlspecialchars($_REQUEST['name'])."' and admpassword='".md5(htmlspecialchars($_REQUEST['password']))."'");
      if(mysqli_num_rows($result)>0)
      {

          $r=mysqli_fetch_array($result);
          if(strcmp($r['admpassword'],md5(htmlspecialchars($_REQUEST['password'],ENT_QUOTES)))==0)
          {
              $_SESSION['admname']=htmlspecialchars_decode($r['admname'],ENT_QUOTES);

              header('Location: admwelcome.php');
          }else
      {
         echo "Check Your user name and Password.";

      }

      }
      else
      {
          echo "Check Your user name and Password.";

      }
      closedb();
  }

通过上面的代码..它是一个通过登录凭据表单检查登录页面后重定向的简单示例。

【讨论】:

【解决方案2】:

假设您不想要任何安全性。我会这样做:

$db->query("SELECT * from `users` where username = :username AND password = :password");

用用户输入替换用户名和密码。

警告:不要在生产环境中使用它。它存在 SQL 注入漏洞。

然后执行查询,检查查询行数,如果等于1,则表示有一个用户同时拥有usernamepassword。如果等于0,则表示未找到。然后您可以显示错误或其他内容。

类似这样的伪代码:

if(rowCount == 1) {
   // log the user in
}

// Invalid credentials. Print some errors.

如果您想要安全,请使用 PDO 或 mysqli 函数。因为mysql_* 函数已弃用且不再维护。并考虑使用password_hash API 对您的密码进行哈希处理。

【讨论】:

  • 这将失败。需要引用作为字符串的变量。
  • @Fred-ii- 我刚刚向 OP 提供了有关如何查询数据库的想法。我还添加了关于 SQL 漏洞的警告。
  • 当然,我同意,但需要引用变量。通过向他们展示您现在拥有的东西,他们会认为不这样做是可以的,并且会向他们发送错误的信息;-)
  • @Fred-ii- 编辑了帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多