密码\u verify()备选方案?-PHP

密码\u verify()备选方案?-PHP,php,passwords,Php,Passwords,我正在尝试做一个简单的登录,如果你愿意的话。我正在使用MySQLi,到目前为止它看起来不错 <?php ob_start(); $myusername = @$_POST['username']; $mypassword = @$_POST['password']; if (isset($_POST['logged'])) { $link->escape_string($myusername); $link->

我正在尝试做一个简单的登录,如果你愿意的话。我正在使用MySQLi,到目前为止它看起来不错

<?php
    ob_start();

    $myusername = @$_POST['username'];
    $mypassword = @$_POST['password'];

    if (isset($_POST['logged'])) {
        $link->escape_string($myusername);
        $link->escape_string($mypassword);
        $stmt = $link->prepare("SELECT * FROM members WHERE username=?") or die ($link->error);
        $stmt->bind_param('s', $myusername);
        $stmt->execute() or die($stmt->error);
        $stmt->store_result();
        $count = $stmt->num_rows();

        if (!empty($myusername) && !empty($mypassword)) {
            if($count == 1) {
                $rs = $link->query("SELECT * FROM members WHERE username='$myusername'");
                $row = $rs->fetch_array(MYSQLI_ASSOC);
                if (password_verify($mypassword, $row['password'])) {
                    $_SESSION['username'] = $myusername;
                    $_SESSION['first_name'] = $row['first_name'];
                    $_SESSION['last_name'] = $row['last_name'];
                    $_SESSION['email'] = $row['email'];
                    $_SESSION['loggedIn'] = true;
                    header("Location: login.php");
                }
                else {
                    echo "<p style=\"color: red\">Wrong Password</p>";
                }
            }
            else {
                echo "<p style=\"color: red\">Wrong Username</p>";
            }
        }
        else {
            echo "<p style=\"color: red\">Fill in all fields</p>";
        }
    }
?>

密码\u验证是否可用于PHP>=5.5.0,因此您的主机可能没有所需的PHP版本

见:

您可以尝试以下方法:

crypt($row['password'], $mypassword) == $mypassword

password\u hash
及其配套的
password\u verify
在PHP>=5.5中可用


但是有一个兼容性库/后端口,使它们可用于PHP>=5.3.10 at

password\u verify()
仅可从PHP 5.5获得。如果您的托管公司尚未安装该版本,您的代码将因
未定义函数
错误而崩溃,并留下一个空白的白色屏幕。什么是
escape\u string
,它不是php函数?嗯。。我创建了一个用户名和密码为123的虚拟帐户,当我输入用户并通过时,它回显“错误密码”。不过,我删除了“==$mypassword”,并将$row['password']变量与$mypassword变量切换。太棒了!我很高兴它做到了:)我只使用了库中的两个函数来实现PHP5.3.10:函数_strlen($binary_string)和函数password_verify()。它工作得很好!