1

安全な認証を必要とする最初のプロジェクトに取り組んでいます。私のホスティングはまだ PHP 5.3.27 を使用しているため、ここにある password_hash() 互換性パッチを使用しています私の問題はreturn password_hash($password, PASSWORD_BCRYPT, array('cost'=>$cost));、 $password は文字列でなければならないというエラーが出ることです。なぜ文字列ではないのですか?どこからデバッグを開始すればよいかさえわかりません。

パスワードを取得する HTML

<form method='post' action='register.php' name='loginform'>
    <label for="inputpass">Password</label>
    <input type="password" class="form-control" id="inputpass" placeholder="Enter a password">
</form>

register.php の内容

<?php

require 'validate.php';

$password = $_POST['password'];
var_dump(validations::generate_hash($password));

?>

validate.php の内容 *password.php は password_hash() の 5.3 互換パッチです*

<?php

require 'plugins/password.php';

class validations {

    function generate_hash($password){

        $cost = 11;

        return password_hash($password, PASSWORD_BCRYPT, array('cost'=>$cost));

    }

    function validate_pw($password, $hash){

        return crypt($password, $hash)==$hash;

    }   
}

?>
4

2 に答える 2

1

あなたのコードで$passwordは、文字列ではなくnull値¹です。これは、²$_POSTという名前のキーがないためです。これは、フォームにpassword入力要素がないために発生name="passwordします。

name 属性を追加すると、うまくいきます:

<input type="password" name="password" class="form-control" id="inputpass"
       placeholder="Enter a password">

¹ これは で確認できますvar_dump($password)

E_NOTICE² これにより、割り当てを行っている行でPHP がメッセージを出力します。で最大error_reportingにするerror_reporting(E_ALL);と、このメッセージが表示されます。

于 2014-02-28T23:10:49.490 に答える