当用户输入用户名和密码时,我试图将此用户输入与已存储在数据库中的数据进行比较。为了试图让它工作,如果输入正确的用户名和密码,屏幕应显示“Yay”,否则它应显示“No”。
现在,只要用户在登录中输入任何信息(无论是否正确),屏幕就是空白。请告知需要做些什么来解决这个问题,谢谢。
要访问登录页面,请转到:http://www.montecarlohotel.co.nf/Membership.html 用户名和密码已在数据库中:585791,密码1
<!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>
答案 0 :(得分:1)
您提供的代码非常不安全:
如果您重构使用PDO(强烈推荐)和PHP的密码哈希API,您可以安全,轻松地实现此功能。
首先,走这些路线......
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'];
}
}
请注意,我在查询字符串中使用?
而不是连接$_POST['username']
变量?而我把它作为一个数组传递给execute()
? 这就是你应该如何编写数据库代码。它们被称为预备语句。
注意:这需要在注册期间使用password_hash()
,而不是将密码直接存储在数据库中。 您必须始终使用password_hash()
和password_verify()
来获取密码。
进一步阅读:
最终,a curated list for learning about application security。有大量可用于学习编写安全Web应用程序的材料。请尽量利用这一点并尽可能多地学习。
答案 1 :(得分:-1)
改变这个:
$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。