Php登录脚本根本没有登录

Php登录脚本根本没有登录,php,webpage,login-script,Php,Webpage,Login Script,我创建了一个脚本将用户登录到一个网站,但是我永远无法获得身份验证,即使使用正确的密码。其他一切都正常工作。在文本框中键入用户名和密码后,按登录按钮可激活此脚本。以下是脚本: <?php session_start(); include('connection.php'); //STEP 2 Declare Variables $Name = $_POST['username']; $Pass = md5($_POST['password']); // Encrypt password

我创建了一个脚本将用户登录到一个网站,但是我永远无法获得身份验证,即使使用正确的密码。其他一切都正常工作。在文本框中键入用户名和密码后,按登录按钮可激活此脚本。以下是脚本:

<?php
session_start();
include('connection.php');

//STEP 2 Declare Variables

$Name = $_POST['username'];
$Pass = md5($_POST['password']); // Encrypt password with md5() function.
$Query = mysql_query("SELECT * FROM Users WHERE username='$Name' AND password='$Pass'");
$NumRows = mysql_num_rows($Query);
$_SESSION['username'] = $Name;
$_SESSION['password'] = $Pass;

//STEP 3 Check to See If User Entered All Of The Information

if(empty($_SESSION['username']) || empty($_SESSION['password']))
  {
    die("Go back and login before you visit this page!");
  }

if($Name && $Pass == "")
  {
    die("Please enter in a name and password!");
  }

if($Name == "")
  {
    die("Please enter your name!" . "</br>");
  }

if($Pass == "")
  {
    die("Please enter a password!");
    echo "</br>";
  }

//STEP 4 Check Username And Password With The MySQL Database

if($NumRows) 
  {
    // If The User Makes It Here Then That Means He Logged In Successfully
    echo "";
    $_SESSION['username']=$Database_Name;
  }

else 
  {
    die("Incorrect Username or Password!");
  }
?>
此代码:

if($NumRows != 0)
  {
    while($Row = mysql_fetch_assoc($Query))
      {
        $Database_Name = $Row['username'];
        $Database_Pass = $Row['password'];
      }
  }

else
  {
    die("Incorrect Username or Password!");
  }

if($Name == $Database_Name && $Pass == $Database_Pass)
  {
    // If The User Makes It Here Then That Means He Logged In Successfully
    echo "";
    $_SESSION['username']=$Database_Name;
  }
只需使用mysql\u num\u行即可简化:

if($NumRows) {
    // If The User Makes It Here Then That Means He Logged In Successfully
    echo "";
    $_SESSION['username']=$Database_Name;
} else {
    die("Incorrect Username or Password!");
}
说明:

因为您使用的是
mysql\u num\u rows
,如果您的查询匹配,它将返回
1
行,因此用户已经通过身份验证,否则它将返回
0
。使用
mysql\u fetch\u assoc
然后比较结果是多余的

if($NumRows)
将在一行匹配时返回
1
,并且
1
true

更新:

这很可能是因为数据库中的字段长度太短,无法成功插入整个
md5()
hash。因此,后一部分没有成功插入

重要提示:

您不应该使用
MySQL
,因为它已经被弃用,请改用
MySQLi
<代码>MySQL
函数在PHP7中不可用

另外,您需要使用
MySQL\u real\u escape\u string
来防止MySQL注入


md5()
不是一种非常安全的密码存储方式,请改用
crypt()

谢谢您的帮助。当我正式启动网站时,我会记住这一点。现在,我只是想让这个旧脚本正常工作。即使在所有这些之后,我仍然会犯同样的错误。还有其他想法吗?@CyberizedNinja诊断问题的一个快速方法是回显
$name
$pass
并手动将其与数据库中的记录进行比较我在问题中添加了两个屏幕截图。一个名为bob的用户,其用户名为Bobby,密码为password,作为md5哈希。由于某些原因,回显结果不完全匹配,因为它添加了额外的垃圾。@CyberizedNinja这应该是由于数据库结构中的最大长度,因此哈希的后一部分没有插入到数据库中db@CyberizedNinja尝试将
密码
字段的长度加长。您当前的代码有SQL注入,这意味着任何人都可以读取或销毁任何数据。请阅读:您也不想使用
md5()
进行密码哈希,因为它不安全,很容易被黑客攻击。改用
crypt()
。另外,
mysql
扩展在PHP7中被弃用和删除。使用
mysqli
或PDO。