Php 登录脚本:将用户输入与数据库中已有的数据进行比较
当用户输入用户名和密码时,我试图将此用户输入与数据库中已存储的数据进行比较。为了使其正常工作,如果输入了正确的用户名和密码,屏幕应显示“是”,否则应显示“否” 现在,每当用户在登录中输入任何信息(无论是否正确),屏幕都是空白的。请告知需要做什么来修复此问题,谢谢 要访问登录页面,请转到: 数据库中已存在用户名和密码:585791,密码1Php 登录脚本:将用户输入与数据库中已有的数据进行比较,php,database,security,password-hash,Php,Database,Security,Password Hash,当用户输入用户名和密码时,我试图将此用户输入与数据库中已存储的数据进行比较。为了使其正常工作,如果输入了正确的用户名和密码,屏幕应显示“是”,否则应显示“否” 现在,每当用户在登录中输入任何信息(无论是否正确),屏幕都是空白的。请告知需要做什么来修复此问题,谢谢 要访问登录页面,请转到: 数据库中已存在用户名和密码:585791,密码1 <!DOCTYPE html> <html> <head> <meta charset = "u
<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<title>Search Results</title>
<style type = "text/css">
body{font-size: 300%;}
</style>
</head>
<body>
<?php
$query = "SELECT *
FROM UserAccount
WHERE Username = '$usr' and Password = '$password'";
$usr = $_POST['memberid'];
$password = $_POST['password'];
// Connect to MySQL
if ( !( $database = mysql_connect( "xxxxxxxx", "xxxxxxx", "xxxxxxxx" ) ) )
{
die( "<p>Could not connect to database</p></body></html>" );
}
// open hotel database
if ( !mysql_select_db( "1994715_hotel", $database ) )
{
die( "<p>Could not open Hotel database</p></body></html>" );
}
// query hotel database
if ( !( $result = mysql_query( $query, $database ) ) )
{
print( "<p>Could not execute query!</p>" );
die( mysql_error() . "</body></html>" );
}
for ($counter = 0; $row = mysql_fetch_row($result); ++$counter)
{
if($result['Username'] == $usr && $result['Password'] == $password)
{
print("Yay");
}
else
{
print("No");
}
}
?>
</body>
</html>
搜索结果
正文{字体大小:300%;}
更改此选项:
$query = "SELECT *
FROM UserAccount
WHERE Username = '$usr' and Password = '$password'";
$usr = $_POST['memberid'];
$password = $_POST['password'];
为此:
$usr = $_POST['memberid'];
$password = $_POST['password'];
$query = "SELECT *
FROM UserAccount
WHERE Username = $usr and Password = $password";
我刚刚修复了您的语法,建议您使用PDO。您提供的代码非常不安全:
- 如前所述,它很容易受到攻击
- 您正在以明文形式存储用户密码这是你能做的最糟糕的事情。
mysql_connect("localhost", "username", "password");
mysql_select_db("database");
。。。然后像这样重写它们:
$db = new PDO("mysql:localhost;dbname=database", "username", "password");
对于每个查询,您都需要$db
对象,但一旦您习惯了它,它就不会那么糟糕了
$stmt = $db->prepare("SELECT * FROM UserAccount WHERE Username = ?");
if ($stmt->execute(array($_POST['username']))) {
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
$firstRow = $data[0];
if (password_verify($_POST['password'], $firstRow['password'])) {
// Success, mark them as logged in here.
$_SESSION['UserId'] = $data[0]['UserId'];
}
}
注意,在查询字符串中,我使用了?
而不是连接$\u POST['username']
变量?相反,我将它作为数组传递给execute()
?这就是您应该如何编写数据库代码。它们被称为准备好的声明
注意:这需要在注册期间使用,而不是将密码直接存储在数据库中必须始终使用password\u hash()
和password\u verify()
作为密码。
进一步阅读:
最终。有大量的资料可供学习编写安全的web应用程序。请利用这一点,尽可能多地学习。请使用PHP处理密码安全问题。如果您使用的PHP版本低于5.5,您可以使用
密码\u hash()
。请。已在PHP7中删除。了解使用PDO的语句,并考虑使用PDO,将错误报告添加到您的文件的顶部(在您的开机代码> > JayBrAcQuald-同意LOL OP代码到处都是,在错误的地方^ ^ ^ -赫克,我会重新编写代码,如果酒店可以给我终身免费通行证留在那里XDNO!这很容易受到SQL注入的攻击。他只是想比较数据库中的值和POST值。所以我只是纠正了他的语法。