Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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_Mysql - Fatal编程技术网

Php 登录不太好

Php 登录不太好,php,mysql,Php,Mysql,我试图在我的新登录系统中工作,我用做了一个简单的密码,并用下一个代码将哈希传递到我的MySQL表 makepass.php dologin.php 所以我试着用testpass和whoala登录:无效密码 有什么想法吗?如果可以,我看不出任何语法或其他问题。$dbconn=mysqli\u query$query,选择*FROM cm\u users,其中Username='$Username'或diemysqli\u error$query 应该看起来更像 $userQuery=mysqli\

我试图在我的新登录系统中工作,我用做了一个简单的密码,并用下一个代码将哈希传递到我的MySQL表

makepass.php

dologin.php

所以我试着用testpass和whoala登录:无效密码

有什么想法吗?如果可以,我看不出任何语法或其他问题。

$dbconn=mysqli\u query$query,选择*FROM cm\u users,其中Username='$Username'或diemysqli\u error$query

应该看起来更像

$userQuery=mysqli\u query$variableToConnectToDatabase,从cm\u用户中选择*用户名=“$Username”和密码=“$Password”限制1

不确定你的主要目标是什么。您希望用户能够输入自己的密码,还是密码应该是恒定的?

$dbconn=mysqli\u query$query,选择*FROM cm\u users,其中Username='$Username'或diemysqli\u error$query

应该看起来更像

$userQuery=mysqli\u query$variableToConnectToDatabase,从cm\u用户中选择*用户名=“$Username”和密码=“$Password”限制1

不确定你的主要目标是什么。您希望用户能够输入自己的密码,还是密码应该是恒定的?

您不应该是这方面的foreach,但首先要查询,获取您不使用的数组,然后将其与行的密码进行比较

旁注:用您自己的凭证替换xxx,xxx,xxx。然而,使用$query并不是一个应该用作连接变量的词,因为它非常容易混淆

甚至我在写我的答案时也感到困惑。使用$connection或$conn,我在这里更改了它们,请改用它

$conn = new mysqli("xxx", "xxx", "xxx", "xxx");
if ($conn->connect_error) {
    die('Connect Error (' . $conn->connect_errno . ') '
            . $conn->connect_error);
}

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

$username = $_POST['username']; // you could use a conditional !empty() here
$password = $_POST['password']; // here also

    $query = "SELECT * FROM cm_users WHERE Username = '".$conn->real_escape_string($username)."';";
    $result = $conn->query($query);

// error checking on the query
if (!$result) {
    echo "<p>There was an error in query: $query</p>";
    echo $conn->error;
}

    $row_hash = $result->fetch_array();
    if (password_verify($password, $row_hash['Password'])) {
        echo "Welcome!";
    }
    else{
        echo "Invalid";
    }

}
检查您的查询是否有错误:

和错误报告:

您不应该是foreach,但首先要查询,获取您不使用的数组,然后将其与行的密码进行比较

旁注:用您自己的凭证替换xxx,xxx,xxx。然而,使用$query并不是一个应该用作连接变量的词,因为它非常容易混淆

甚至我在写我的答案时也感到困惑。使用$connection或$conn,我在这里更改了它们,请改用它

$conn = new mysqli("xxx", "xxx", "xxx", "xxx");
if ($conn->connect_error) {
    die('Connect Error (' . $conn->connect_errno . ') '
            . $conn->connect_error);
}

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

$username = $_POST['username']; // you could use a conditional !empty() here
$password = $_POST['password']; // here also

    $query = "SELECT * FROM cm_users WHERE Username = '".$conn->real_escape_string($username)."';";
    $result = $conn->query($query);

// error checking on the query
if (!$result) {
    echo "<p>There was an error in query: $query</p>";
    echo $conn->error;
}

    $row_hash = $result->fetch_array();
    if (password_verify($password, $row_hash['Password'])) {
        echo "Welcome!";
    }
    else{
        echo "Invalid";
    }

}
检查您的查询是否有错误:

和错误报告:


请尝试将dologin.php编辑为

<?php
session_start(); 
error_reporting(E_ALL);
ini_set('display_errors', 1);

include('includes/functions.php');

if(isset($_POST['login'])) {
if(isset($_POST['username'])) {
    if(isset($_POST['password'])) {
        $username = $_POST['username'];

$hash = password_hash($_POST['password'], PASSWORD_DEFAULT);


        $dbconn = mysqli_query($query, "SELECT * FROM cm_users WHERE Username = '$username'") or die(mysqli_error($query));
        foreach ($dbconn as $user) {
            if ($hash == $user['Password']) {
                $_SESSION['user'] = $user['Username'];
            } else {
               echo 'Invalid password!';
            }
        }
    } else {
      echo 'Invalid username!';
    }
}
}
?>

请尝试将dologin.php编辑为

<?php
session_start(); 
error_reporting(E_ALL);
ini_set('display_errors', 1);

include('includes/functions.php');

if(isset($_POST['login'])) {
if(isset($_POST['username'])) {
    if(isset($_POST['password'])) {
        $username = $_POST['username'];

$hash = password_hash($_POST['password'], PASSWORD_DEFAULT);


        $dbconn = mysqli_query($query, "SELECT * FROM cm_users WHERE Username = '$username'") or die(mysqli_error($query));
        foreach ($dbconn as $user) {
            if ($hash == $user['Password']) {
                $_SESSION['user'] = $user['Username'];
            } else {
               echo 'Invalid password!';
            }
        }
    } else {
      echo 'Invalid username!';
    }
}
}
?>

规则1。。。。使用准备好的语句/绑定变量来防止SQL注入。规则2。。。。对于无效用户名和无效密码,不要有不同的消息,这是在告诉潜在的黑客对他们有用的信息,你在查询中有错误$dbconn=mysqli_query$query,从cm_用户中选择*用户名=“$Username”。以过程方式使用mysqli_查询时需要2个参数;+始终在语句中添加“{$variable}”。@MilosM它们的方法没有任何问题。您不应该在这里使用foreach。另外,我们不知道您的POST数组是否有值。@MilosM其中Username='$Username'有效。除非用户名是john's barber,否则他们需要避开它。规则1。。。。使用准备好的语句/绑定变量来防止SQL注入。规则2。。。。对于无效用户名和无效密码,不要有不同的消息,这是在告诉潜在的黑客对他们有用的信息,你在查询中有错误$dbconn=mysqli_query$query,从cm_用户中选择*用户名=“$Username”。以过程方式使用mysqli_查询时需要2个参数;+始终在语句中添加“{$variable}”。@MilosM它们的方法没有任何问题。您不应该在这里使用foreach。另外,我们不知道您的POST数组是否有值。@MilosM其中Username='$Username'有效。除非用户名是john's barber,否则他们需要转义。你怎么知道$query不是他们的连接?不!在查询中使用密码将永远找不到匹配项,您需要使用查询检索哈希密码值以使用Password_verifyNope,之前刚刚使用过md5,我想使用哈希密码,以确保系统安全。这是登录部分,它检查散列密码是否与用户密码相匹配$2y$10$SJKb1N88oDhU83iNQ4SR6uMujG8Q3jcqKc0jX851lMgohleQEDiFi密码在表中看起来像这样。密码验证函数声明在哪里?这真是一团糟。。真正的问题是。。。你到底想对代码做什么?你怎么知道$query不是他们的连接?不!在查询中使用密码将永远找不到匹配项,您需要使用查询检索哈希密码值以使用Password_verifyNope,之前刚刚使用过md5,我想使用哈希密码,以确保系统安全。这是登录部分,它检查散列密码是否与用户密码相匹配$2y$10$SJKb1N88oDhU83iNQ4SR6uMujG8Q3jcqKc0jX851lMgohleQEDiFi密码在表中看起来像这样。密码验证函数声明在哪里?这真是一团糟。。真正的问题是。。。你到底想用代码做什么??
<?php
session_start(); 
error_reporting(E_ALL);
ini_set('display_errors', 1);

include('includes/functions.php');

if(isset($_POST['login'])) {
if(isset($_POST['username'])) {
    if(isset($_POST['password'])) {
        $username = $_POST['username'];

$hash = password_hash($_POST['password'], PASSWORD_DEFAULT);


        $dbconn = mysqli_query($query, "SELECT * FROM cm_users WHERE Username = '$username'") or die(mysqli_error($query));
        foreach ($dbconn as $user) {
            if ($hash == $user['Password']) {
                $_SESSION['user'] = $user['Username'];
            } else {
               echo 'Invalid password!';
            }
        }
    } else {
      echo 'Invalid username!';
    }
}
}
?>