Я сделаю попытку ответить на это, и если это то, о чем идет речь.
Вы можете назначить переменную массиву POST (и использовать метод post для формы), который будет передан как первый параметр для обеих функций, и проверить, не является ли он пустым и использовать isset()
против именованного ввода/отправки.
N.B .: Код, указанный ниже, был написан для использования в одном файле, так как использовался action=""
. Если вы намереваетесь использовать это в двух отдельных файлах, то непременно измените действие на имя файла, используемое для него.
<?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>
Sidenote: Если это предназначено для паролей, то вы должны изменить тип входного сигнала на «пароль» вместо «текст».
Если позже вы хотите использовать это в качестве системы авторизации, а затем посмотреть на один из ответов ircmaxell в https://stackoverflow.com/a/29778421/
Если используется PDO и подготовленное заявление.
Вытащил из его ответа:
Просто используйте библиотеку. Шутки в сторону. Они существуют по какой-то причине.
Не делайте это сами , Если вы создаете свою соль, ВЫ МОЖЕТЕ НЕПРАВИЛЬНО. Вы должны использовать библиотеку, которая обрабатывает это для вас.
$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
}
Важно Sidenote о длине колонки:
Если и когда вы решите использовать password_hash()
или пакет обеспечения совместимости (если PHP < 5.5) https://github.com/ircmaxell/password_compat/, важно отметить, что если длина текущего столбца пароля меньше, чем t han 60, его нужно будет изменить на это (или выше). В руководстве предлагается длина 255.
Вам потребуется ALTER length вашей колонки и начать с нового хэша, чтобы он вступил в силу. В противном случае MySQL будет терпеть неудачу.
Ваш вопрос, похоже, действительно о [как использовать формы с PHP] (http://php.net/manual/en/tutorial.forms.php). – JimL
Просто для того, чтобы быть технически корректным, * «Пожалуйста, введите значение для шифрования!» * Должно выглядеть больше как * «Пожалуйста, введите значение для хэша!» *. Это всего 2 разных животных ;-) –