Php 登录脚本根本无法登录
Php Login Script Not Logging In At All
我创建了一个脚本来让用户登录网站,但是我永远无法通过身份验证,即使使用正确的密码也是如此。其他一切正常。在文本框中输入用户名和密码后按登录按钮激活此脚本。以下是脚本:
<?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!");
}
?>
登录后我得到 "Incorrect Username or Password!",即使输入的用户名和密码是正确的。密码在数据库中作为 md5() 哈希值输入。当我第一次创建这个脚本时,它在几年前就起作用了。下面发布的是数据库的屏幕截图。任何帮助将不胜感激
这是我的 DB named Bob who is using an MD5 hash of the word "Password" as his Password.
中一位用户的照片
这是他尝试登录时 results 回显的图片。
此代码:
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_num_rows
即可简化:
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_num_rows
,如果您的查询匹配,它将 return 1
行,因此用户已经通过身份验证,否则它将 return 0
。使用 mysql_fetch_assoc
然后比较结果是多余的。
如果一行匹配,if($NumRows)
将 return 1
,而 1
是 true
.
更新:
这很可能是因为您数据库中的字段长度太短,无法成功插入整个 md5()
哈希。因此,后面的部分没有插入成功。
重要提示:
您不应使用 MySQL
,因为它已被弃用,请改用 MySQLi
。 MySQL
功能在 PHP 7.
中不可用
此外,您需要使用 mysql_real_escape_string
.
来防止 MySQL 注入
md5()
不是一种非常安全的密码存储方式,请使用 crypt()
.
我创建了一个脚本来让用户登录网站,但是我永远无法通过身份验证,即使使用正确的密码也是如此。其他一切正常。在文本框中输入用户名和密码后按登录按钮激活此脚本。以下是脚本:
<?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!");
}
?>
登录后我得到 "Incorrect Username or Password!",即使输入的用户名和密码是正确的。密码在数据库中作为 md5() 哈希值输入。当我第一次创建这个脚本时,它在几年前就起作用了。下面发布的是数据库的屏幕截图。任何帮助将不胜感激
这是我的 DB named Bob who is using an MD5 hash of the word "Password" as his Password.
中一位用户的照片这是他尝试登录时 results 回显的图片。
此代码:
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_num_rows
即可简化:
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_num_rows
,如果您的查询匹配,它将 return 1
行,因此用户已经通过身份验证,否则它将 return 0
。使用 mysql_fetch_assoc
然后比较结果是多余的。
if($NumRows)
将 return 1
,而 1
是 true
.
更新:
这很可能是因为您数据库中的字段长度太短,无法成功插入整个 md5()
哈希。因此,后面的部分没有插入成功。
重要提示:
您不应使用 MySQL
,因为它已被弃用,请改用 MySQLi
。 MySQL
功能在 PHP 7.
此外,您需要使用 mysql_real_escape_string
.
md5()
不是一种非常安全的密码存储方式,请使用 crypt()
.