@_ne_scaju_, ты учишься методом копипасты, или все твои действия носят осмысленный характер? Ты вдумайся, что ты сейчас спрашиваешь.
@mahmuzar Ах да на счет копипасты, да я взял скопировал, и проверил, будет работать или нет. Но я не учусь методом копипасты. Я подставил свои значения где надо. А так не получилось. И на счет таблиц в базе вы не ответили правильно ли, я храню данные?
@SamyRed Согласился я, читай выше) но это лишь проверка была) На самом деле я хочу понять что и как происходит))) Буду дальше думать)
всем привет, появился вопрос, начал переделывать перерабатывать регистрации и авторизации, столкнулся с проблемой(. Регистрации почти сделал на ура, а вход не могу сделать не авторизует меня почему то( Работа с сессиями меня привела в тупик.
@_ne_scaju_ с сессиями всё очень просто. На каждой странице, на которой используешь сессионные переменные пишешь в начале: PHP: session_start(); добавляешь в сессию так: PHP: $_SESSION['user_id'] = $userId; Извлекаешь так: PHP: $userId = $_SESSION['user_id']; ВСЁ
Ну и к̶а̶к̶и̶м̶ ̶х̶у̶е̶м̶ как мы должны понять где у тебя ошибки?? --- Добавлено --- Только в подключаемых модулях не пиши. А то потом будешь задалбывать, "а почему у меня ошибка что сессия уже открыта?"!
@SamyRed @TeslaFeo PHP: авторизация, что не так? [php <?php include ($_SERVER['DOCUMENT_ROOT'].'/includes/header.php'); ?> <?php include($_SERVER['DOCUMENT_ROOT'].'/includes/includ.php'); ?> <?php session_start(); echo '<pre>'; print_r($_POST); echo '</pre>'; echo '<pre>'; print_r($_SESSION); echo '</pre>'; //проверка автризации пользователя $sql = 'SELECT `user_id` FROM `users` WHERE `login` =:login AND `pass`=:pass'; $stmt = $pdo->prepare($sql); $stmt->bindParam(':login', $_SESSION['login']);/ $stmt->bindParam(':pass', $_SESSION['pass']); $stmt->execute();//выполнили запрос $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); if(count($rows) > 0){ echo 'Привет '.$_SESSION['login']; echo ' <a href="out.php">Выход</a>'; }else{ echo 'Привет гость';} //Если нажата кнопка то обрабатываем данные if(isset($_POST['auth'])) { $login = $_POST['login']; //Проверяем на пустоту login if(empty($_POST['login'])) $err[] = 'Не введен Логин'; if(empty($_POST['pass'])) $err[] = 'Не введен Пароль'; //Проверяем наличие ошибок и выводим пользователю if(count($err) > 0) echo showErrorMessage($err); $sql = 'SELECT * FROM `users` WHERE `login` = :login AND `status` = 1'; $stmt = $pdo->prepare($sql);//Подготавливаем PDO выражение для SQL запроса $stmt->bindValue(':login', $_POST['login'], PDO::PARAM_STR); $stmt->execute(); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);//Получаем данные SQL запроса //Если логин совподает, проверяем пароль if(count($rows) > 0) { //Получаем данные из таблицы if(md5(md5($_POST['pass']).$rows[0]['salt']) == $rows[0]['pass']) { //Переменные для работы с залогиненым пользователем! $_SESSION['user'] = true; //Логин пользователя //$_SESSION['login'] = $_POST['login']; //ID Пользователя в таблице Users $_SESSION['user_id'] = $rows[0]['user_id']; //Переменая роль пользователя $_SESSION['role'] = $rows[0]['role']; $_SESSION['pass'] = $rows[0]['pass']; header('Location:'.$host.'validation/auth.php'); exit; } else echo showErrorMessage('Вы допустили ошибку, повторите ввод'); } else{ echo showErrorMessage('Логин <b>'. $_POST['login'] .'</b> не зарегистрирован.'); } } ?> <form action="auth.php" method="POST"> <h1>Форма входа</h1> <input name="login" type="text" placeholder="Введите свой логин" value="<?php echo $_POST['login'] ?>"><br> <input name="pass" type="password" placeholder="Введите пароль" value="<?php echo $_POST['pass'] ?>"><br> <input name="auth" type="submit" value="Войти"><br> <a href="/validation/recovery_form.php">Забыли пароль?</a> | <a href="/validation/reg.php">Регистрация</a> </form> [/php] --- Добавлено --- @SamyRed Что не так я делаю в авторизации, что не могу вытащить даже логин из базы.
@denis01 PHP: $data = $_POST; //Если нажата кнопка то обрабатываем данные if(isset($data['auth'])) { $err = array(); $sql = 'SELECT * FROM `users` WHERE `login` = :login AND `status` = 1'; $stmt = $pdo->prepare($sql); $stmt->bindValue(':login', $data['login'], PDO::PARAM_STR); $stmt->execute(); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); //Если логин совподает, проверяем пароль if(count($rows) > 0) { if (password_verify($data['pass'].$rows[0]['salt'], $rows[0]['pass'])){ //все хорошо регаем $_SESSION['user'] = true; echo 'привет '.$login; }else{ $err[] = 'Неверный пароль'; } }else{ $err[] = 'Пользователь не найде'; } if( !empty($err)){ echo '<div style="color: red">'.array_shift($err).'</div><hr>'; } } Переделал файл, все ровно не получается( блин))))
@denis01 ну не знаю, не пробовал) А по подробней, что за ветки? --- Добавлено --- Все время выдает неверный пароль. где то я его не правильно извлекаю(
@_ne_scaju_ отладка/debug http://phpfaq.ru/debug https://netbeans.org/kb/docs/php/debugging_ru.html https://php.ru/forum/threads/howto-...i-po-shagam-i-s-kartinkami.58974/#post-474550
@denis01 @TeslaFeo Создал отдельную страницу) хочу вытащить данные, у меня данные вытаскиваются, только почему то ник от пхмАдмин, а хотел вытащить логин авторизованного) Как это может быть?
Потомственный программист во втором поколении. Восстанавливаю сессии по айдишнику! Подключаю к БД, а в случае если ваши каналы забиты, возможна даже установка туннеля (магия ssh)! Вычищаю ошибки по логам! Фаталы, ворнинги и даже нотисы - ни что теперь не помешает вашей программе достичь своей цели! Устанавливаю защиту на запросы, sql-инъекции более не приговор! За отдельную плату расскажу как получить тайные знания из места, где есть все ответы (не гугол)!
@romach Прям как поет написал) ну да ладно) --- Добавлено --- @TeslaFeo Жесть только заметил) спасибо, буду исправлять))))