Как получить куку id пользователя при авторизации через nick. [php, mvc]
никак не могу получить id пользователя после авторизации. Подскажите пожалуйста как организовать метод получения $id через $nick
Контроллер Главной страницы
// Контроллер главной страницы
public function actionIndex()
{
$nick = '';
$password = '';
// Если данные существуют, то присваиваем переменные
if (isset($_POST['enter'])) {
$nick = $_POST['nick'];
$password = $_POST['password'];
// Если поле ник не пустое значение, то проверяем ник в БД
if ($nick != '') {
// Проверяем существует ли пользователь в БД
if (User::checkNickExist($nick))
{
// Если логин и пароль совпадают, то авторизуем
if (User::checkUserData($nick, $password))
{
// Дополнительно создан метод User::auth, в нем идет запись куки $nick и выставление статуса ON - онлайн
// В методе User::aut я хочу получить куку $id через $nick
User::auth($nick);
// Переадресация на Контроллер EnterController
header("Location: /enter");
exit;
}
else
{
// Если пароль неверный
require_once(ROOT . '/views/index/wrong_password.php');
return true;
}
}
else
{
// Если пользователь не найден в базе
require_once(ROOT . '/views/index/not_such_user.php');
return true;
}
}
else
{
// Если поля не заполнены или поле псевдоним не заполнено
require_once(ROOT . '/views/index/no_data.php');
return true;
}
}
// ПРОШУ НЕ ОБРАЩАТЬ ВНИМАНИЕ НА ТАКУЮ ШАБЛОНИЗАЦИЮ, ТАКАЯ ЗАДАЧА
// Главная страница
require_once(ROOT . '/views/index/index.php');
return true;
}
вот метод User::auth
// Записываем сессию пользователю и куку с ником. Это необходимо для последующей записи статуса OFF в таблицу при выходе в контроллере IndexController = IndexOut
public static function auth($nick){
$_SESSION['$nick'] = $nick;
setcookie("nick", $nick);
// Записываем статус ON пользователю
$db = Db::getConnection();
$sql = 'UPDATE users SET online = "ON" WHERE nick = :nick';
$result = $db->prepare($sql);
$result->bindParam(':nick', $nick, PDO::PARAM_STR);
$result->execute();
$result->fetchColumn();
// ВОТ ТУТ НАЧИНАЮТСЯ ПРОБЛЕМЫ, НИКАК НЕ МОГУ ПОЛУЧИТЬ $id
$db = Db::getConnection();
$result2 = $db->query('SELECT id FROM users WHERE nick = $nick');
// Если пробую выгрузить массив через fetch, то неизбежно сталкиваюсь с фатальной ошибкой после авторизации
// Любые действия с fetch приводят к фатальной ошибке, так же пробовал выносить все в отдельный метод
// Fatal error: Uncaught Error: Call to a member function fetch() on bool in
setcookie("id", $result2['id']);
}
Ответы (1 шт):
Автор решения: Евгений Тихии
→ Ссылка
Пробуй так)
public static function auth ($nick) {
/**
* Sessions, cookies
*/
$_SESSION['$nick'] = $nick;
setcookie("nick", $nick);
/**
* \PDO holder
*/
$db = Db::getConnection();
/**
* SQLs
*/
$sqlUpdate = "UPDATE users SET online = 'ON' WHERE nick = :nick";
$sqlSelect = "SELECT id FROM users WHERE nick = :nick";
/**
* Exec
*/
$queryUpdate = $db->prepare($sqlUpdate);
$queryUpdate->bindParam(':nick', $_SESSION['$nick'], \PDO::PARAM_STR);
$queryUpdate->execute();
$querySelect = $db->prepare($sqlSelect);
$querySelect->bindParam(':nick', $_SESSION['$nick'], \PDO::PARAM_STR);
$querySelect->execute();
$resultSelect = $querySelect->fetch(\PDO::FETCH_ASSOC);
setcookie("id", $resultSelect['id']);
}