Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用PHP登录到系统_Php - Fatal编程技术网

无法使用PHP登录到系统

无法使用PHP登录到系统,php,Php,我可以知道为什么它没有重定向到我一直在寻找的页面,我有一些问题,如果我输入正确的用户名,它仍然显示我输入了错误的用户名/密码。这里是我的代码片段。有人能帮我吗?非常感谢。有人知道怎么做吗 <?php require('db.php'); session_start(); // If form submitted, insert values into the database. if (isset($_POST['username'])){

我可以知道为什么它没有重定向到我一直在寻找的页面,我有一些问题,如果我输入正确的用户名,它仍然显示我输入了错误的用户名/密码。这里是我的代码片段。有人能帮我吗?非常感谢。有人知道怎么做吗

 <?php
    require('db.php');
    session_start();
    // If form submitted, insert values into the database.
    if (isset($_POST['username'])){

        $username = stripslashes($_REQUEST['username']); // removes backslashes
        $username = mysqli_real_escape_string($con,$username); //escapes special characters in a string
        $password = stripslashes($_REQUEST['password']);
        $password = mysqli_real_escape_string($con,$password);

    //Checking is user existing in the database or not
        $query = "SELECT * FROM `user` WHERE username='$username' and password='".md5($password)."'";
        $result = mysqli_query($con,$query) or die(mysqli_error());
        $rows = mysqli_num_rows($result);
        if($rows==1){
            $_SESSION['username'] = $username;
            header("Location: home.php"); // Redirect user to homeA.php
            }else{
                echo "<center><div class='form'><br><br><h1>Username/password is incorrect.</h1><br/>Click here to <a href='main.php'>Try Again</a></div></center>";
                }
                }
    else{
?>

首先,请使用准备好的语句而不是字符串连接来构造sql语句。解决这个问题的一个简单方法是使用PDO。其次,永远不要使用MD5对密码进行哈希运算。PHP中的密码散列是使用
Password\u hash()
Password\u verify()
函数完成的。 下面是一个使用前面提到的方法登录页面如何工作的示例

创建用户时,您还需要使用
password\u hash()
散列密码


您是否尝试了带out
stripslah
和'mysqli\u real\u escape\u string'的代码?而且,您直接在
SQL
中使用变量的方式也会给代码带来风险。请更改它并开始使用准备好的语句。不要使用
stripslashes
,也不要转义、参数化。不要使用md5。另外,
标题后退出
。输出
$query
,并在数据库上执行它,它是否工作并返回结果?回答这样的问题很难,因为你没有回答一件事,你需要解决SQL注入问题,停止使用stripslashes,不要将密码存储为md5,不要使用$\u请求,在使用前检查VAR,在设置位置标题后退出,为这么少的代码和
1
rep用户覆盖这么多内容。应在返回教程时关闭
。。My2CentIt是否显示任何错误?那么您在谈论哪些安全缺陷?“您真的不应该使用mysqli。它存在一些安全缺陷”应该说“请使用而不是字符串连接来构造sql语句”。不幸的是,这可能无法回答“问题”——主要是因为问题的根源并不明显。从技术上讲,不是直接的安全缺陷,而是造成安全漏洞的巨大风险。Mysqli需要许多步骤来确保没有注入查询和类似操作的风险。PDO为您处理逃逸和更多问题,因此有可能错过重要步骤。
// Create a new PDO object using host (might be 127.0.0.1), dbname (your database name), user (your database username) and pass (your database password)
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

if (isset($_POST['username'])) {

    $stmt = $dbo->prepare('SELECT * FROM user WHERE username = :username');
    $stmt->bindParam(':username', $_POST['username']);

    if ($stmt->execute()) {
        $row = $stmt->fetch();

        if (password_verify($_POST['password'], $row['password'])) {
            // User password matched. Log them in
        } else {
            // User password didn't match
        }
    } else {
        // There was a problem executing query
    }

}
password_hash($password, PASSWORD_DEFAULT)