php - 密码系统不执行任何操作

标签 php mysql mysqli

下面的代码是一个登录系统。用户名是管理员,密码是密码(您可以稍后更改),它现在所做的是在发送表单后,它只显示登录页面。我找不到它有什么问题。请帮忙。 error_log 文件没有显示任何内容。可能是密码哈希值不正确。当我使用

设置密码时
echo password_hash("password", PASSWORD_DEFAULT);

然后插入结果。

<?php
session_start();
$message="";
require 'settings.php';


if(count($_POST)>0) {


$username = mysqli_real_escape_string($_POST['user_name']);
$password = mysqli_real_escape_string($_POST['password']);

$result = mysqli_query("SELECT * FROM members WHERE username='" . $username . "'");
$row = mysqli_fetch_array($result);
if(is_array($row)) {
$hash = $row['password'];
$passwordcheck = password_verify($password, $hash);
} 
if($hash == $passwordcheck){
$_SESSION["user_id"] = $row['id'];
$_SESSION["user_name"] = $row['username'];
} else {
$message = "Invalid Username or Password!";
}
if(isset($_SESSION["user_id"])) {
mysqli_query("DELETE * FROM LoginAttempts WHERE IP='".$ip."'"); 
header("Location:dashboard.php");
}
}
?>
<div class="panel-body">
                    <form name="frmUser" method="post" action="">
                        <fieldset>
                            <div class="form-group">
                                <input class="form-control" placeholder="Username" name="user_name" type="username" autofocus>
                            </div>
                            <div class="form-group">
                                <input class="form-control" placeholder="Password" name="password" type="password" value="">
                            </div>
                            <input type="submit" name="submit" value="Submit" class="btn btn-success btn-lg btn-block">
                        </fieldset>
                    </form>
                    <?php
                    if($locked == 'yes'){
                    echo "Sorry you are locked out of the system. Please try again in";
                    echo $timeleft;
                    }
                    ?>
                </div>

编辑:现在我收到这些错误: [2015 年 11 月 15 日 07:00:58 欧洲/莫斯科] PHP 警告:mysqli_connect(): (28000/1045):/home 中的用户“laughin1”@“176.31.10.37”(使用密码:NO)访问被拒绝/laughin1/public_html/admin/index.php 第 9 行 [2015 年 11 月 15 日 07:00:58 欧洲/莫斯科] PHP 警告:mysqli_select_db() 需要 2 个参数,其中 1 个在/home/laughin1/public_html/admin/index.php 第 10 行给出 [2015 年 11 月 15 日 07:00:58 欧洲/莫斯科] PHP 警告:mysqli_real_escape_string() 需要 2 个参数,其中 1 个在/home/laughin1/public_html/admin/index.php 第 11 行给出 [2015 年 11 月 15 日 07:00:58 欧洲/莫斯科] PHP 警告:mysqli_real_escape_string() 需要 2 个参数,其中 1 个在/home/laughin1/public_html/admin/index.php 第 12 行中给出 [2015 年 11 月 15 日 07:00:58 欧洲/莫斯科] PHP 警告:mysqli_query() 期望参数 1 为 mysqli, bool 值在/home/laughin1/public_html/admin/index.php 第 14 行给出 [2015 年 11 月 15 日 07:00:58 欧洲/莫斯科] PHP 警告:mysqli_fetch_array() 期望参数 1 为 mysqli_result,第 15 行/home/laughin1/public_html/admin/index.php 中给出的 null

但是如果我将 MySQLi 更改为 MySQL,一切都很好。

最佳答案

当用户注册时,您将使用 password_hash 哈希其密码并存储在数据库中,当用户尝试登录时,您将使用 password_verify 验证其密码

程序:

register->password_hash()->save_in_db()
login->fetch_hash_column_from_their_username->password_verify()
if verified->set_session->redirect, else stay_in_the_same_page

向您的表单添加一些验证,以便用户无法不断访问您的数据库,这会产生高负载并(稍微)阻止对您的网站的某些保护

此外,在这一行之后

header("Location:dashboard.php");

添加

exit();

有关原因的更多信息,请单击此处 Why I have to call 'exit' after redirection through header('Location..') in PHP?

更新:

password_verify 接受两个参数,( string $password , string $hash ),您将把登录密码作为第一个参数,并输入从数据库存储的哈希值进入第二个参数。如果匹配则返回 true,否则返回 false

关于php - 密码系统不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33715463/

相关文章:

来自 jQuery $.post 的 PHP session

mysql - 三个表,根据第一个表(mysql)得到第2个和第3个表的所有结果

php - 无法使用 PHP 将 JSON 文件中的数据添加到 MYSQL 数据库

php - SQL SELECT COUNT rawQuery 与 PHP-MySQLi-Database-Class

mysql - 如何使用 Laravel 从存储在数组中的单列获取数据?

php - 给出警告 : mysqli_real_escape_string() expects parameter 1 to be mysqli, 字符串

php - 如何在 symfony 中为枚举生成实体和模式

PHP 逻辑 - 对于每个内部 While 循环复制 MySQL 查询中的项目

php - 使用 Symfony 和 Doctrine 创建小页面来显示表格的内容

php - 如何在两个单独的 html5 表上显示两个具有不同数据量的表中的数据?