Не добавляются данные в базу данных PDO
Имеется два файла, обработчик и файл с функциями. Существует несколько проверок на пустоту полей, а также на логин. Следующий файл это добавление пользователя в дб. Все эти проверки проходят отлично без ошибок, но когда приходит дело до добавления, все нормально, но данные не добавляются в базу.
Файл vendor/reg.php
session_start();
require_once 'database.php';
require_once 'basic.php'; // здесь базовые функции которые не отвечают за регистрацию
require_once 'register.php';
/* Получаем данные */
$login = htmlspecialchars($_POST['login']);
$email = htmlspecialchars($_POST['email']);
$password = htmlspecialchars($_POST['password']);
$password_confirm = htmlspecialchars($_POST['password_confirm']);
checkPost($login, $email, $password, $password_confirm);
storeUser($login, $email, $password);
Файл с функциями для регистрации
<?php
function checkPost($login, $email, $password, $password_confirm){
$dbh = new PDO('mysql:host=localhost;dbname=localdb', 'root', 'root');
if(
$login === '' ||
$email === '' ||
$password === '' ||
$password_confirm === '' ||
!filter_var($email, FILTER_VALIDATE_EMAIL)
){
$_SESSION['error'] = true;
$_SESSION['error_message'] = 'Проверьте правильность введенных полей';
header('Location: /register');
exit();
}
if($password !== $password_confirm){
$_SESSION['error'] = true;
$_SESSION['error_message'] = 'Пароли не совпадают';
header('Location: /register');
exit();
}
$query = $dbh->prepare("SELECT * FROM `users` WHERE login=:login");
$query->bindParam(':login',$login);
$query->execute();
$count = $query->rowCount();
if ($count > 0) {
$_SESSION['error'] = true;
$_SESSION['error_message'] = 'Пользователь с данным логином уже существует';
header('Location:../register.php');
exit();
}
$query= null;
$dbh = null;
}
function storeUser($login, $email, $password){
$dbh = new PDO('mysql:host=localhost;dbname=lowguru', 'root', '');
$store_user = $dbh->prepare("INSERT INTO `users` (`login`, `email`, `password`) VALUES (:login, :email, :password)");
$store_user->execute([
"login" => $login,
"email" => $email,
"password" => password_hash($password, PASSWORD_DEFAULT)
]);
$store_user = null;
$_SESSION['success'] = true;
$_SESSION['success_message'] = 'Вы успешно создали учетную запись.';
header('Location: /');
$dbh = null;
}
Ответы (1 шт):
Автор решения: lowanda777
→ Ссылка
В базе данных указано максимальное количество символов 32 в поле password , а для password_hash надо 60. После этого все заработало.