私はこれに答える試みをしています。これが質問の話です。
変数をPOST配列に代入して(フォームのpostメソッドを使用して)両方の関数の最初のパラメータとして渡し、空でないかどうかをチェックし、isset()
を名前付き入力/送信に対して使用できます。
N.B .:以下のコードは、action=""
を使用した場合、同じファイル内で使用するように記述されています。これを2つの別々のファイルで使うつもりならば、アクションを使用するファイル名に変更してください。
<?php
/*in the if statment make sure that the password is the same as in hash variable*/
$options = array('cost' => 12);
echo "Bcrypt: ";
if(isset($_POST['submit'])){
if(!empty($_POST['firstname'])){
$their_input = $_POST['firstname'];
echo $hash = password_hash($their_input, PASSWORD_BCRYPT, $options);
echo "<br>";
echo "Verify now:<br>";
if (password_verify($their_input, $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
}
else{
echo "You left this empty.";
}
}
?>
<p>Please enter a value to hash!</p>
<form action="" method="post">
Key:<br>
<input type="text" name="firstname"><br>
<input type="submit" name="submit" value="Submit">
</form>
サイドノート:パスワード用の場合は、入力タイプを「テキスト」ではなく「パスワード」に変更する必要があります。
後でログインシステムとしてこれを使用したい場合はPDOを使用して準備された文であれば、ircmaxellの答えhttps://stackoverflow.com/a/29778421/
を見ることもできます。
が彼の答えから引き出された:
ちょうどライブラリを使用しています。真剣に。彼らは理由のために存在します。
はそれを自分でしないでください 。あなた自身の塩を作るなら、あなたはそれに間違っているです。それを処理するライブラリを使用する必要があります。
$dbh = new PDO(...);
$username = $_POST["username"];
$email = $_POST["email"];
$password = $_POST["password"];
$hash = password_hash($password, PASSWORD_DEFAULT);
$stmt = $dbh->prepare("insert into users set username=?, email=?, password=?");
$stmt->execute([$username, $email, $hash]);
とログインに:列の長さについて
$sql = "SELECT * FROM users WHERE username = ?";
$stmt = $dbh->prepare($sql);
$result = $stmt->execute([$_POST['username']]);
$users = $result->fetchAll();
if (isset($users[0]) {
if (password_verify($_POST['password'], $users[0]->password) {
// valid login
} else {
// invalid password
}
} else {
// invalid username
}
重要追記:
もし、あなたがPHP場合password_hash()
または互換機能パックを(使用することを決定します< 5.5)https://github.com/ircmaxell/password_compat/の場合、現在のパスワードの列の長さが何よりも小さい場合han 60の場合は、それ以上(またはそれ以上)に変更する必要があります。このマニュアルでは255の長さが推奨されています。
有効にするには、新しいハッシュを使用して列の長さを変更し、最初からやり直す必要があります。そうしないと、MySQLは自動的に失敗します。
あなたの質問は、[PHPでフォームを使用する方法](http://php.net/manual/ja/tutorial.forms.php)についてのようです。 – JimL
ちょうど技術的に正しいとは、* "暗号化する値を入力してください!" *もっと読むべきです* "ハッシュ値を入力してください!それらは2つの異なる動物です;-) –