Передача данных в БД
Возник вопрос- не работает регистрfция пользователя. Если распечатать $_POST, то видно, что данные передаются, но в БД не попадают. Пишет- ошибка базы данных. В чем может быть дело? Заранее спасибо.
Model: ...
class User {
/**
* Регистрация пользователя
* @param type $name
* @param type $email
* @param type $password
* @return type
*/
public static function register($name, $email, $password)
{
$db = Db::getConnection();
$sql = 'INSERT INTO user (name, email, password) '
. 'VALUES (:name, :email, :password)';
$result = $db->prepare($sql);
$result->bindParam(':name', $name, PDO::PARAM_STR);
$result->bindParam(':email', $email, PDO::PARAM_STR);
$result->bindParam(':password', $password, PDO::PARAM_STR);
return $result->execute();
}
/**
* Редактирование данных пользователя
* @param string $name
* @param string $password
*/
public static function edit($id, $name, $password)
{
$db = Db::getConnection();
$sql = "UPDATE user
SET name = :name, password = :password
WHERE id = :id";
$result = $db->prepare($sql);
$result->bindParam(':id', $id, PDO::PARAM_INT);
$result->bindParam(':name', $name, PDO::PARAM_STR);
$result->bindParam(':password', $password, PDO::PARAM_STR);
return $result->execute();
}
/**
* Проверяем существует ли пользователь с заданными $email и $password
* @param string $email
* @param string $password
* @return mixed : ingeger user id or false
*/
public static function checkUserData($email, $password)
{
$db = Db::getConnection();
$sql = 'SELECT * FROM user WHERE email = :email AND password = :password';
$result = $db->prepare($sql);
$result->bindParam(':email', $email, PDO::PARAM_INT);
$result->bindParam(':password', $password, PDO::PARAM_INT);
$result->execute();
$user = $result->fetch();
if ($user) {
return $user['id'];
}
return false;
}
/**
* Запоминаем пользователя
* @param string $email
* @param string $password
*/
public static function auth($userId)
{
$_SESSION['user'] = $userId;
}
public static function checkLogged()
{
// Если сессия есть, вернем идентификатор пользователя
if (isset($_SESSION['user'])) {
return $_SESSION['user'];
}
header("Location: /user/login");
}
public static function isGuest()
{
if (isset($_SESSION['user'])) {
return false;
}
return true;
}
/**
* Проверяет имя: не меньше, чем 2 символа
*/
public static function checkName($name)
{
if (strlen($name) >= 2) {
return true;
}
return false;
}
/**
* Проверяет телефон: не меньше, чем 10 символов
*/
public static function checkPhone($phone)
{
if (strlen($phone) >= 10) {
return true;
}
return false;
}
/**
* Проверяет имя: не меньше, чем 6 символов
*/
public static function checkPassword($password)
{
if (strlen($password) >= 6) {
return true;
}
return false;
}
/**
* Проверяет email
*/
public static function checkEmail($email)
{
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
return true;
}
return false;
}
public static function checkEmailExists($email)
{
$db = Db::getConnection();
$sql = 'SELECT COUNT(*) FROM user WHERE email = :email';
$result = $db->prepare($sql);
$result->bindParam(':email', $email, PDO::PARAM_STR);
$result->execute();
if ($result->fetchColumn())
return true;
return false;
}
/**
* Returns user by id
* @param integer $id
*/
public static function getUserById($id)
{
if ($id) {
$db = Db::getConnection();
$sql = 'SELECT * FROM user WHERE id = :id';
$result = $db->prepare($sql);
$result->bindParam(':id', $id, PDO::PARAM_INT);
// Указываем, что хотим получить данные в виде массива
$result->setFetchMode(PDO::FETCH_ASSOC);
$result->execute();
return $result->fetch();
}
}
}
Controller:
...
class UserController {
public function actionRegister()
{
$name = '';
$email = '';
$password = '';
$result = false;
if (isset($_POST['submit'])) {
$name = $_POST['name'];
$email = $_POST['email'];
$password = $_POST['password'];
$errors = false;
if (!User::checkName($name)) {
$errors[] = 'Имя не должно быть короче 2-х символов';
}
if (!User::checkEmail($email)) {
$errors[] = 'Неправильный email';
}
if (!User::checkPassword($password)) {
$errors[] = 'Пароль не должен быть короче 6-ти символов';
}
if (User::checkEmailExists($email)) {
$errors[] = 'Такой email уже используется';
}
if ($errors == false) {
$result = User::register($name, $email, $password);
}
}
require_once(ROOT . '/views/user/register.php');
return true;
}
public function actionLogin()
{
$email = '';
$password = '';
if (isset($_POST['submit'])) {
$email = $_POST['email'];
$password = $_POST['password'];
$errors = false;
// Валидация полей
if (!User::checkEmail($email)) {
$errors[] = 'Неправильный email';
}
if (!User::checkPassword($password)) {
$errors[] = 'Пароль не должен быть короче 6-ти символов';
}
// Проверяем существует ли пользователь
$userId = User::checkUserData($email, $password);
if ($userId == false) {
// Если данные неправильные - показываем ошибку
$errors[] = 'Неправильные данные для входа на сайт';
} else {
// Если данные правильные, запоминаем пользователя (сессия)
User::auth($userId);
// Перенаправляем пользователя в закрытую часть - кабинет
header("Location: /cabinet/");
}
}
require_once(ROOT . '/views/user/login.php');
return true;
}
/**
* Удаляем данные о пользователе из сессии
*/
public function actionLogout()
{
session_start();
unset($_SESSION["user"]);
header("Location: /");
}
}
...
...