Php 你好,世界!实现密码验证

Php 你好,世界!实现密码验证,php,passwords,Php,Passwords,Im进入php并制作一个登录脚本除了 我在signup.php中对Bcrypt中的密码进行了哈希运算,因此我在输入密码使其匹配时遇到问题,因此我研究了VERIFY_密码,但我如何在自己的脚本中实现它? 为了澄清我是否只是以密码的形式从表中复制哈希,但我希望它以正常的输入密码的形式工作, 欢迎输入 login.php <?php ini_set('display_errors', 'On'); error_reporting(E_ALL | E_STRICT); require 'datab

Im进入php并制作一个登录脚本除了 我在signup.php中对Bcrypt中的密码进行了哈希运算,因此我在输入密码使其匹配时遇到问题,因此我研究了VERIFY_密码,但我如何在自己的脚本中实现它? 为了澄清我是否只是以密码的形式从表中复制哈希,但我希望它以正常的输入密码的形式工作, 欢迎输入

login.php

<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);
require 'database.php';

$username = $_POST["username"];
$password = $_POST["password"];

$sql = "SELECT * FROM table2 WHERE username = '".$username."' AND password = '$password'";
$result = $conn->query($sql);
$result->execute();
$count = $result->fetchcolumn();
var_dump($result);///if($result === FALSE) { 
if($count == 1 ){
    echo"login";
    header("location:login4.php");
} else { var_dump($count);
    echo"logout";
}  // die(mysql_error()); // TODO: better error handling
///}

///while($row = mysql_fetch_array($result))
///{
   /// echo $row['username'];
///}
///if(!$row = mysqli_fetch_assoc($result)) {
/// echo "dd";


//else {
//  echo "logged in";



?>

<html>



<form action="login3.php" method="post">

<input type="text" name="username">
<input type="password" name="password">
<button type="submit" name="submit">login</button>

</html>

首先,您只需使用WHERE username=。在执行请求时,您不必检查密码

其次,您必须验证密码

最后,您还应该使用准备好的语句,这样更安全

因此,您的代码应该如下所示:提供的代码可能无法按原样使用,但您可以调整它以获得所需的结果,并阅读文档以了解准备好的语句以及密码验证的工作方式:

$sql = "SELECT * FROM table2 WHERE username = :username";
$request = $conn->prepare($sql);
$request->execute([":username" => $_POST["username"]]);  
$user = $request->fetchAll()[0];

if(password_verify($_POST["password"], $user->password)){
    //user is logged in
}else{
    //password is wrong
}

在执行db操作$password=bcrypt$_POST[password]时,您应该对密码进行哈希运算;您不应该将其他哈希算法与and duo混合使用。显式地使用这两个。我在一个新脚本上尝试了ur版本的可能副本,但它返回了致命错误:调用一个成员函数fetch on boolean in,所以我不知道什么都不起作用。