в бд залиты пользователи с hash_password, при извлечении не пойму как сделать, чтобы пароль нормально проверялся. с PDO работаю первый день, камнями не кидаться =) Вот мой кривокод:
<?php
require_once "libs/db.php";
$data = $_POST;
if(isset($data['do_login']))
{
$errors = array();
$query = ('SELECT EXISTS (SELECT 1 FROM users WHERE u_login = :login)');
$stmt = $pdo->prepare($query);
$stmt->execute(['login' => $data['login']]);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (password_verify($data['password'], $results['u_password'])) {
echo "LOGGED IN";
} else {
echo "LOGGIN FAILED";
}
}
?>
<form action="login.php" method="POST">
<p>Ваш логин: <input type="text" name="login" value="<?= @$data['login']; ?>"></p>
<p>Ваш Пароль: <input type="password" name="password" value="<?= @$data['password']; ?>"></p>
<p><button type="submit" name="do_login">Войти</button></p>
</form>
Ошибка Notice: Undefined index: u_password in C:\MAMP\htdocs\project1\login.php on line 12 LOGGIN FAILED
Подскажите где я тут накосячил, и как лучше это сделать можно было вообще.
SELECT * FROM users WHERE u_login = :login
.fetchAll возвращает массив массивов (всю таблицу а не отдельную запись), Для того чтоб получить только 1 запись нужно делать fetch.
if(isset($data['do_login']))
{
$errors = [];
$query = 'SELECT * FROM users WHERE u_login = :login';
$stmt = $pdo->prepare($query);
$stmt->execute(['login' => $data['login']]);
$results = $stmt->fetch(PDO::FETCH_ASSOC);
if ($result && password_verify($data['password'], $results['u_password']))
{
echo "LOGGED IN";
}
else
{
echo "LOGGIN FAILED";
}
}`
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я получаю дату и время в таком формате: 2017-8-15T12:45 Как ее можно преобразовать в метку времени UNIX?