Php 登录表单出错

Php 登录表单出错,php,html,forms,Php,Html,Forms,在我的登录表单中,我尝试输入我插入到与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."); 这是当有人在登录表单中输入

在我的登录表单中,我尝试输入我插入到与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和5.6

我遵循了3年前的教程,所以请原谅任何过时的代码

格式化代码外的额外括号应该在我提供的代码框中,但出于某种原因它不在其中


表名或字段名周围不应加引号。

在查询中:

从“用户”中选择*,其中“用户名”=“$Username”&&“密码”=“$Password”

我认为你把反勾号和单引号混淆了。单引号属于您正在检查的值,如“$password”和“$username”。您不需要反勾号,除非您需要转义保留的MySQL命令,因为您将它们用作字段名

你能试试这个查询吗

"SELECT * FROM users WHERE Username = '$username' && Password ='$password'"

我希望这对你有帮助,也许我错过了其他的东西,但这正是我最突出的地方

试着把它分成几个部分:

 $query=  mysql_query("SELECT * FROM `users` WHERE `Username` = '".$username."' AND `Password` ='".$password."' ") or die(mysql_error());

 $user = mysql_fetch_array($query);

请确保不能将表名或列名放在引号内

您可以使用倾斜操作符“`”

此外,最好坚持使用标准的SQL AND运算符,而不是&&


希望这有帮助。

这不是问题的原因,但您不需要在SQL查询内外检查用户的密码匹配情况。你只需要做一次,就像@Chris说的,你应该只检查PHP中的密码,而不是SQL,同样,如果你再次散列密码并检查它与DB中的密码不匹配。使用hash_等于您的查询不正确$user=mysql_fetch_arraymysql_querySELECT*来自'users',其中'Username'='$Username'&&&'Password'='$Password';删除表名和字段名周围的单引号。1。如上所述,您已在查询中检查密码,无需再次检查。2.您使用的引号是错误的,请参见下面的dupe,这意味着您的查询失败,您从未真正检查过。3.自PHP5.5以来,mysql_*函数已被弃用,并在PHP7中完全删除,如果可以的话,您应该删除它。你应该选择另一个API,它允许你使用你真正应该使用的准备好的语句,比如mysqli_*或PDO-see。你已经发布了这个API,我用它关闭了它-你的API与你的第一个API完全相同,因此关闭了它。请不要重新发布。请确保不能将表名或列名放在引号内。您可以使用倾斜操作符“`”。此外,最好坚持使用标准的SQL AND运算符,而不是&&。