Приветствую всех! Пользуюсь php7 и RedBeenPHP для работы с БД. Написал условия для регистрации и авторизации. Идея такая: если есть сессия у пользователя тогда даю ему доступ к папке auth если пользователь гость тогда доступ к папке guest PHP: if ( file_exists('all/'.$page.'.php') ) include 'all/'.$page.'.php'; else if ( $_SESSION['id'] and file_exists('auth/'.$page.'.php') ) include 'auth/'.$page.'.php'; else if ( !$_SESSION['id'] and file_exists('guest/'.$page.'.php') ) include 'guest/'.$page.'.php'; else not_found(); При авторизации использую 2 функции на корректный емайл и пароль, а так же проверяю есть ли в базе данных указанный логин и пароль PHP: if ($_POST['login_f']) { email_valid(); password_valid(); if ($user = R::count('users', "email = ?", array( $_POST['email'] )) < 1 ) message('Аккаунт с таким E-mail адресом не найден '); if ($user = R::count('users', "password = ?", array( $_POST['password'] ) ) < 1 ) message('Не правильно введен пароль '); $_SESSION['id'] = array( 'type' => 'login', 'email' => $_POST['email'], 'name' => $_POST['name'], 'password' => $_POST['password'], ); go('profile'); } но при попытки вывести данные с сессии ничего не происходит(сессия должна работать так как получен доступ к папке auth и сработал редирект на страницу /profile ) PHP: <h1>Привет!</h1> <?=$SESSION['email']?> выходить только Привет
PHP: session_start(); if ( file_exists('all/'.$page.'.php') ) include 'all/'.$page.'.php'; else if ( $_SESSION['id'] and file_exists('auth/'.$page.'.php') ) include 'auth/'.$page.'.php'; else if ( !$_SESSION['id'] and file_exists('guest/'.$page.'.php') ) include 'guest/'.$page.'.php'; else not_found(); Стартовал, сессия есть потому как открылась папка для auth и закрылся доступ к папке guest Но вызвать я ее не могу
@ALOE Обязательно лучше проверять переменные через функцию isset() и empty() Сделай примерно так: PHP: session_start(); // Весь код ниже можно было и уменьшить на много меньше сделать!!! # если в сессии нет id перенаправляем его сразу на вход или показываем нужную страницу # если сессия обнаружилась поехала вторая проверка файла, если файла нет редирект на нужную страницу if ( !isset($_SESSION['id']) ) { if(file_exists('guest/'.$page.'.php')) { //include 'guest/'.$page.'.php'; header('Location: /login.php/'); exit(); } //include 'guest/'.$page.'.php'; header('Location: /login.php/'); exit(); } # если в сессии есть id и такой файл существует перенаправляем пользователя куда надо или показываем нужную страницу if ( isset($_SESSION['id']) ) { if( file_exists('auth/'.$page.'.php') ) { //include 'auth/'.$page.'.php'; header("Location: /cabinet.php/"); exit(); } } if ( file_exists('all/'.$page.'.php') ) { //include 'all/'.$page.'.php'; header('Location: /редиректим куда надо или показываем свой контент который нужно например: include 'all/'.$page.'.php';/'); exit(); } else { else not_found(); }
так ты используешь целый массив в качестве id вот и выводи так же Код (Text): <h1>Привет!</h1> <?=$_SESSION['id']['email']?> и почитай книжек )))
Это что за фигня? Т.е. если ввести свой e-mail и чужой (случайно) пароль, вход всё равно произойдёт PHP: $user = R::findOne("users", "email=?", [$_POST["email"]]); if (!$user) { message('Аккаунт с таким E-mail адресом не найден '); } if ($user->password !== $_POST["password"]) { message('Не правильно введен пароль '); } А вообще, в базе не хранят пароль в открытом виде. Надо использовать функции php для работы с паролями. password_hash, password_verify и т.п.
Рабочий вариант, спасибо. PHP: $_SESSION['id'] = array( 'type' => 'login', 'email' => $_POST['email'], ); go('profile'); Это значит что в сессию я записываю только email. но хочется записать непосредственно непосредственно id пользователя. Я шифровал в md5, проверка корректно работает при входе(на удивление)
PHP: if ($user = R::count('users', "password = ?", array( $_POST['password'] ) ) < 1 ) message('Не правильно введен пароль '); Действительно бред(исправлю) спасибо
Читаю, но что-то у меня не получается понять, может синтаксис написания не правильный. Использую R::$adapter->getAssoc('select id,title from page'); и foreach не работает
Что в таблице users? Если там есть id, то всё очень просто: PHP: $user= R::findOne("users","email=?",[$_POST["email"]]); echo $user->id; Если конечно такой пользователь существует. --- Добавлено --- Вот почему перед ORM надо научиться пользоваться просто php и MySQL
@mkramer Спасибо. Есть у меня еще вопроc: Лучше при авторизации засовывать в сессию все данные с таблицы или только емейл ?