php - 如何在 php 中使用 password_hash 加密密码?
问题描述
我想加密密码并将其存储在数据库中,但我不太了解如何使用 password_hash。我找到了一些教程,但它不起作用。
下面是connection.php
<?php
$conn = new mysqli("localhost","root","","mydata");
if (!$conn) {
die('Please Check your connection'/mysqli_error($conn));
}
?>
下面是login.php
<?php
require_once('connection.php');
$msg="";
if (isset($_POST['login'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$password_encrypted = password_hash($password, PASSWORD_DEFAULT);
$sql = "SELECT * FROM login WHERE UserName=? AND Password=? ";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ss",$username,$password_encrypted);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
session_regenerate_id();
$_SESSION['username'] = $row['UserName'];
session_write_close();
if($result-> num_rows==1 && $_SESSION['username']=="admin")
{ header("location:home.php"); }
else{ $msg = "Username or Password is Incorrect!!!";}
}
?>
解决方案
Try the below code for verifying password
<?php
require_once('connection.php');
$msg="";
if (isset($_POST['login'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$password_encrypted = password_hash($password, PASSWORD_DEFAULT);
$sql = "SELECT * FROM login WHERE UserName=? ";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ss",$username);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
if ($result->num_rows > 0) {
while($row){
if(password_verify($row['password'], $password_encrypted)) {
session_regenerate_id();
$_SESSION['username'] = $row['UserName'];
session_write_close();
if ($_SESSION['username']=="admin") {
$msg = "Login successfully!!!";
header("location:home.php");
}else{
$msg = "Login successfully!!!";
header("location:user.php");
}
}else{
$msg = "Username or Password is Incorrect!!!";
}
}
}else{
$msg = "Username or Password is Incorrect!!!";
}
}
?>
推荐阅读
- javascript - 这叫什么(JS)
- java - 如何格式化常规日期时间+0000
- sql-server - 将 .SHP 文件上传到 SQL Server?
- c# - 如何取消上传?
- java - 读取属性 Weblogic Server 时出现 NullpointerException
- r - dbFetch,写入另一个表,然后再次 dbFetch?
- javascript - 如何让“dialog.showMessageBoxSync”中的按钮在 Electron.js 中工作
- c# - 用单行语法实例化一个对象并调用返回 C# 或 C++ 中的值的方法?
- java - 如何使状态栏完全变白?
- php - 如何将 WEI 转换为 ETHER php