Позвольте мне объяснить, что происходит (и не идет) здесь.
Что делает следующее ...
$hash = password_hash($passwd, PASSWORD_DEFAULT). "\n <BR>"
это задание, где вы пытаетесь окрошка пароль, который также будет содержать разрыв строки, пробел и <BR>
тег.
Затем, пытаясь проверить, совпадает ли введенный пароль с введенным паролем и разрыв строки, а также пробел и <BR>
.
- Это было бы очень трудно сделать, не так ли?
Вы также должны получать уведомление об неопределенном индексе о $passwd = $_POST['passwd'];
, поэтому оберните весь этот код в условный оператор, используя именованный ввод.
При полном удалении . "\n <BR>"
вам необходимо будет изменить код.
if(isset($_POST['submit_pwd'])){
$passwd = $_POST['passwd'];
echo "Password : <BR>".$passwd."\n <BR>" ;
echo "Hash : <BR>".$hash = password_hash($passwd, PASSWORD_DEFAULT);
if (password_verify($passwd, $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
}
Вот простой тест с использованием MD5 в качестве примера для того, чтобы доказать это, (заметьте, я не использовал password_hash()
здесь, так что производит различные хэш и трудно было бы на самом деле доказать разницу); код частично заимствован от http://php.net/manual/en/function.md5.php
Имейте в виду, что MD5 производит то же значение хэша.
$str_good = 'apple';
$str_bad = 'apple'. "\n <BR>";
echo md5($str_good); // produces 1f3870be274f6c49b3e31a0c6728957f
echo "<br>";
echo md5($str_bad); // produces cb2a3d3161fcc99dcf5e4ccd3bfbb14c
echo "<br>";
if (md5($str_good) === '1f3870be274f6c49b3e31a0c6728957f') {
echo "Would you like a green or red apple?";
}
Вы заметите, что назначение без дополнительных . "\n <BR>"
производит другое значение, чем другие.
- Это то же самое, что происходит с вашим кодом здесь.
"Что мне не хватает?"
- Вопрос не о том, чего не хватает, но о том, что это слишком много.
Исправление так же просто, как просто удалить . "\n <BR>"
, что является «чем-то большим».
Какова ваша версия Php?('echo PHP_VERSION;') – Progrock