Php 无法从数据库中获取我的登录页的数据:(

Php 无法从数据库中获取我的登录页的数据:(,php,html,database,phpmyadmin,Php,Html,Database,Phpmyadmin,我试图从数据库中获取登录页面的数据,但似乎无法做到。它不断告诉我用户名或密码错误 我是这个领域的初学者,我的代码来自youtube form1.html <!DOCTYPE html> <html> <head> <title>Login Site</title> </head> <body> <form method="POST" action="connect2.php"> Username :

我试图从数据库中获取登录页面的数据,但似乎无法做到。它不断告诉我用户名或密码错误

我是这个领域的初学者,我的代码来自youtube

form1.html

<!DOCTYPE html>
<html>
<head>
 <title>Login Site</title>
</head>
<body>
<form method="POST" action="connect2.php">
Username : <input type="text" name="username"><br><br>
Password : <input type="password" name="password"><br>
<input type="submit" value="Login" name="submit">
</form>
</body>
</html>
connect2.php

<?php
$con = mysqli_connect("localhost", "root", "") or die("Failed to connect to MySQL."); 
mysqli_select_db($con, "abc") or die("Database does not exist."); 
//require ('sql_connect.php');
if (isset($_POST['submit'])){
    $username=mysqli_escape_string($_POST['username']);
    $password=mysqli_escape_string($_POST['password']);
    if (!$_POST['username'] | !$_POST['password']) {
        echo ("<SCRIPT LANGUAGE='JavaScript'>
            window.alert('You did not complete all of the required fields')
            window.location.href='form1.html'
        </SCRIPT>");
        exit();
    }
    $sql= mysqli_query("SELECT * 
                        FROM `account` 
                        WHERE username = $username 
                        AND password = $password ");
    if(mysqli_num_rows($sql) > 0) {
        echo ("<SCRIPT LANGUAGE='JavaScript'>
            window.alert('Login Succesfully!.')
            window.location.href='form1.html'
        </SCRIPT>");
        exit();
    }else{
        echo ("<SCRIPT LANGUAGE='JavaScript'>
            window.alert('Wrong username or password. Please re-enter.')
            window.location.href='form1.html'
        </SCRIPT>");
        exit();
    }
}else{
}
?>
我认为PHP编码有问题,因为我一直收到“错误的用户名和密码”消息

更新:我的数据库截图

我想

从用户名=$username和密码=$password的帐户中选择*

应该是


选择*FROM account WHERE username=\$username\和password=\$password\

作为快速修复,在用户名和密码变量周围加引号:

SELECT * FROM `account` WHERE username = '$username' AND password = '$password'
改进此代码的一些技巧:

使用准备好的语句避免SQL注入 不要将密码存储在纯文本中,用盐将其散列

同样,在第一个条件下,你有一个错误,你使用的是位运算符,而不是逻辑或运算符

使用逻辑或运算符,你的脚本是开放攻击的。即使你应该考虑在MySQL或PDO API中使用,而不是级联值。d代码,更重要的是,它将帮助您为自己的利益调试代码。您可能会在几周/几个月内被要求修改此代码,最终您将感谢我。纯文本密码是一个非常糟糕的主意:PHP提供并请使用它们以确保用户的安全。此外,应该使用PHP标头重定向,而不是javascriptI我仍然是这个领域的初学者,我还没有学会如何用salt对密码进行哈希运算。我尝试在变量周围加引号,但仍然不起作用……Joffrey建议使用password\u hash和password\u verify,让它们在内部创建一个非常好的salt,而不是简单地建议使用salt进行哈希运算。