在我的登录表单中,我尝试输入我插入到与PHP连接的MySQL表中的值,但无论我输入到输入字段的值是什么,我总是得到我设置的错误,当用户名和密码是不正确的:
die("The username or password is incorrect. Click <a href='http://growtapians.com/Login & Register System/index.php'>here</a> and try again.");
当有人在登录表单中输入凭据时,这是整个功能的代码:
if ($_POST['login']) {
if ($_POST['username'] && $_POST['password']) {
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string(hash("sha512", $_POST['password']));
$user = mysql_fetch_array(mysql_query("SELECT * FROM 'users' WHERE 'Username' = '$username' && 'Password' ='$password'"));
if ($user == '0' || $user['Password'] != $password) {
die("The username or password is incorrect. Click <a href='http://growtapians.com/Login & Register System/index.php'>here</a> and try again.");
};
$salt = hash("sha512, rand() . rand() . rand()");
setcookie("c_user", hash("sha512", $username), time() + 24 * 60 * 60, "/");
setcookie("c_salt", $salt, time() + 24 * 60 * 60, "/");
$userID = $user['ID'];
mysql_query("UPDATE 'users' SET 'Salt'='$salt' WHERE 'ID'='$userID'");
die("You have logged in successfully, $username!");
};
};
HTML:
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='UTF-8'>
<meta name='viewport' content='width=device, height=device=height, initial-scale=1'>
</head>
<body>
<div id='logindiv' style='width: 50%; padding: 10px; border: 5px solid #316ED6; background-color: #648CD1; color: #31D8EB; margin: auto; border-radius: 1.3em; text-align: center;'>
<h1>Login</h1>
<br />
<form action='' method='post'>
<div>
<b>Username:</b>
<input type='text' name='username' style='padding: 4px;'/>
</div>
<div>
<b>Password:</b>
<input type='password' name='password' style='padding: 4px; '/>
</div>
<div>
<input type='submit' value='Login' name='login'/>
</div>
</form>
<div>
<h4>No Account? Register <a href='register.php'>Here!</a></h4>
</div>
</div>
</body>
注意:
我的托管服务支持的PHP版本是5.5&amp; 5.6
我遵循3年前的教程,所以请原谅任何过时的代码
格式化代码之外的额外括号应该在我提供的代码框中,但由于某种原因它不在那里
答案 0 :(得分:0)
您不应该在表名或字段名称周围加上引号。
答案 1 :(得分:0)
在您的查询中:
SELECT * FROM&#39;用户&#39;用户名&#39;用户名&#39; =&#39; $ username&#39; &安培;&安培; &#39;密码&#39; =&#39; $密码&#39;
我认为你用单引号混淆反引号(`)。单引号属于您正在检查的值,例如&#39; $ password&#39;和&#39; $ username&#39;。除非您需要转义保留的MySQL命令,否则您不需要反引号,因为您将它们用作字段名称。
您可以尝试使用此查询吗?
"SELECT * FROM users WHERE Username = '$username' && Password ='$password'"
我希望这会对你有所帮助,也许我错过了其他一些东西,但无论如何这对我来说都很突出!
答案 2 :(得分:0)
尝试将其分解为部分:
$query= mysql_query("SELECT * FROM `users` WHERE `Username` = '".$username."' AND `Password` ='".$password."' ") or die(mysql_error());
$user = mysql_fetch_array($query);
请确保您不能将表名或列名放在引号中。&#39;&#39;。
你可以使用倾斜算子``。
此外,最好坚持使用标准SQL AND运算符而不是&amp;&amp;。
希望这有帮助。