无法识别数据库PHP MYSQLi中的密码

无法识别数据库PHP MYSQLi中的密码,php,login,Php,Login,我有一个注册表,允许用户创建用户名和密码,然后将其存储在数据库中 <?php //values to be inserted in database table //session_start(); include('connect.php'); //Fixed cost of 10 to fit server req //Random salt to be added to the pass $options = [ 'cost' => 10, 'salt' =&

我有一个注册表,允许用户创建用户名和密码,然后将其存储在数据库中

<?php
//values to be inserted in database table
//session_start();
include('connect.php');

//Fixed cost of 10 to fit server req
//Random salt to be added to the pass
$options = [
    'cost' => 10,
    'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
];

$email = $_POST['email'];
$password= password_hash($_POST['password'], PASSWORD_BCRYPT, $options);
$username= $_POST['username'];

$query = "INSERT INTO users (username, email, password) VALUES(?, ?, ?)";
$statement = $mysqli->prepare($query);

//bind parameters for markers, where (s = string, i = integer, d = double,  b = blob)
$statement->bind_param('sss', $username, $email, $password);

if($statement->execute()){
     print 'Success! ID of last inserted record is : ' .$statement->insert_id .'<br />'; 
}else{
     die('Error : ('. $mysqli->errno .') '. $mysqli->error);
}
$statement->close();
?>

这是我的脚本,其中检查用户输入的用户名和密码是否存在

<?php
include 'connect.php';
if ( !isset($_POST['username'], $_POST['password']) ) {
    // Could not get the data that should have been sent.
    die ('Username and/or password does not exist!');
}
// Prepare our SQL 
if ($stmt = $mysqli->prepare('SELECT password FROM users WHERE username = ?')) {
    // Bind parameters (s = string, i = int, b = blob, etc), hash the password using the PHP password_hash function.
    $stmt->bind_param('s', $_POST['username']);
    $stmt->execute(); 
    $stmt->store_result(); 
    // Store the result so we can check if the account exists in the database.
    if ($stmt->num_rows > 0) {
        $stmt->bind_result($password);
        $stmt->fetch();      
        // Account exists, now we verify the password.
        if (password_verify($_POST['password'], $password)) {
            // Verification success! User has loggedin!
                        echo 'You have logged in!';
        } else {
            echo 'Incorrect username and/or password!';
        }
    } else {
        echo 'Incorrect username blar password!';
    }
    $stmt->close();
} else {
    echo 'Could not prepare statement!';
}
?> 

它输出的用户名和/或密码不正确,因此我假设问题在于我在注册系统中对密码进行哈希运算的方式,或者它是否根本没有找到我要查找的详细信息

HTML格式:

<div class="logmod__heading">
          <span class="logmod__heading-subtitle">Enter your username and password <strong>to sign in</strong></span>
        </div> 
        <div class="logmod__form">
          <form accept-charset="utf-8" action="loggedIn.php" method='POST' class="simform">
            <div class="sminputs">
              <div class="input full">
                <label class="string optional" for="user-name">Username*</label>
                <input class="string optional" maxlength="255" id="user-email" placeholder="username" type="username" name='username' size="100" />
              </div>
            </div>
            <div class="sminputs">
              <div class="input full">
                <label class="string optional" for="user-pw">Password *</label>
                <input class="string optional" maxlength="255" id="user-pw" placeholder="Password" type="password" name='password' size="100" />
                                        <span class="hide-password">Show</span>
              </div>
            </div>
            <div class="simform__actions">
              <input class="sumbit" name="commit" type="submit" value="Log In" />
              <span class="simform__actions-sidetext"><a class="special" role="link" href="#">Forgot your password?<br>Click here</a></span>
            </div> 
          </form>
        </div> 

输入您的用户名和密码以登录
用户名*
密码*
显示
type=“username”
不是有效的表单元素类型

将其更改为
type=“text”

然而,我在前面的评论中确实提到:

type=“username”使用type=“text”–Fred-ii–20分钟前

  • 我说的是“使用”而不是“尝试”;-)
您可能认为“用户名”类型是HTML5语法;事实并非如此

要查看有效HTML5输入类型的列表,请参阅以下链接:

从W3.org页面中提取:

输入元素是用于表示输入控件的多用途元素。 以下各节介绍了输入元素的详细信息:

  • 输入类型=文本
  • 输入类型=密码
  • 输入类型=复选框
  • 输入类型=收音机
  • 输入类型=按钮
  • 输入类型=提交
  • 输入类型=重置
  • 输入类型=文件
  • 输入类型=隐藏
  • 输入类型=图像
  • 输入类型=datetime NEW
  • 输入类型=日期时间本地新
  • 输入类型=新日期
  • 输入类型=新月份
  • 输入类型=新时间
  • 输入类型=新的一周
  • 输入类型=新编号
  • 输入类型=新范围
  • 输入类型=电子邮件新建
  • 输入类型=url新建
  • 输入类型=搜索新
  • 输入类型=电话新
  • 输入类型=新颜色

旁注:关于在密码栏中使用
varchar(60)
,请参见手册:


密码\u默认值-使用bcrypt算法(从PHP 5.5.0开始默认)。请注意,这个常量的设计目的是随着新的、更强的算法添加到PHP中,随着时间的推移而改变。因此,使用此标识符的结果长度可能会随时间而变化。因此,建议将结果存储在可扩展到60个字符以上的数据库列中(最好选择255个字符)

密码列的类型和长度是?不要说“50”或“59”或任何低于60的词。另外,检查你没有发布的HTML表单。厚颜无耻地推销我的答案,在打开PHP标签后立即在文件顶部添加错误报告,例如
ok,将来我也会扩展问题来做注册表单,真的让他们的眼睛呆滞特别感谢“Y..know who”感谢你对我们所有人投了否决票,并删除了其中一个答案——你的贡献糟透了,你知道的。谢谢你@Fred ii-我会一直坚持这一点一天的。非常欢迎你@SmallLegend,很高兴能帮上忙。我还对我的答案做了一些修改,以便将来的读者和你自己能够更好地理解;-)干杯为什么我的答案被否决了?脸掌——最终被侮辱了。禁止在烟囱上放置蛇。如果你打算为了好玩而投否决票,那就给自己拿把手枪,玩俄罗斯轮盘赌吧;“它比臭鸡蛋还臭。”德鲁·谢天谢地说。是 啊早些时候在另一个问题上发生了一点口角,那个小混蛋开始连续投票否决我。