Подскажите пожалуйста: В процессе изучения PHP, хочу разобраться со следующим: В качестве примера авторизации сделал "учебный" пример: Пользователь через форму передает логин и пароль, далее php сравнивает отправленные данные с БД, если совпадение, то отправляет на следующую страницу, если не совпадает то не пропускает... Код (Text): $result_query_select = $mysqli->query("SELECT * FROM `lab` WHERE name = '".$name."' AND password = '".$password."'"); if($result_query_select->num_rows == 1){ $_SESSION['name'] = $name; $_SESSION['password'] = $password; $new_url = 'http://192.168.0.37/lab/table.php'; header('Location: '.$new_url); На следующей странице (table.php), пытаюсь реализовать следующее: Допустим, если пользователь зашел на неё как "User1" то записывать все дальнейшие введенные пользователем данные в таблицу БД USER1 А если пользователь зашел как "User2", то записывать все дальнейшие введенные пользователем данные в таблицу БД USER2 Понимаю что нужно использовать код PHP на сравнение значений...Но пока что не могу сообразить как написать...
Таблица user: Код (Text): id | user | password 100 | vasia | 1234 101 | igor | 1111 234 | stepa | qwer И вот тащишь ты не их самих, а их id. Вот пользователь что то сделал и у тебя есть таблица для этих дел. Туда записываешь id пользователя. Например таблица work: Код (Text): id | user_id | note 1 | 100 | нагадил в штаны 2 | 101 | описался 3 | 234 | козел
PHP: <?php error_reporting ( E_ALL ); use Aero\Supports\{ Lerma, Akame }; session_start (); require 'autoload.php'; if ( Akame :: ifRemember() ) { // u детектед echo json_encode ( [ 'content' => 'Ты авторизован' ], JSON_UNESCAPED_UNICODE ); } elseif ( filter_input ( INPUT_SERVER, 'REQUEST_METHOD' ) == 'POST' ) { /* $input = filter_input_array ( INPUT_POST, [ 'login' => FILTER_DEFAULT, 'password' => FILTER_DEFAULT ] ); */ if ( empty ( $_POST['login'] ) || empty ( $_POST['password'] ) ) { // Заполни поля login & password echo json_encode ( [ 'err' => [ 'message' => 'Заполни поля login & password' ] ], JSON_UNESCAPED_UNICODE ); } elseif ( ( $lrm = Lerma :: prepare( 'SELECT id, login, password FROM usraccount WHERE login = ?', [ $_POST['login'] ] ) ) -> rowCount() < 1 ) { // юзер не найден echo json_encode ( [ 'err' => [ 'message' => 'юзер не найден' ] ], JSON_UNESCAPED_UNICODE ); } else { if ( Akame :: addRemember( $lrm, $_POST['password'] ) ) { header ( 'Location: //php/77084/auth.php' ); exit; } // иначе неправильный пароль, восстановить ? узузу(С) echo json_encode ( [ 'err' => [ 'message' => 'неправильный пароль, восстановить ?' ] ], JSON_UNESCAPED_UNICODE ); } } else { $form = <<<'EOT' <form action = "//php/77084/auth.php" method = "post"> <input type = "text" name = "login" placeholder = "Логин" required> <input type = "password" name = "password" placeholder = "Пароль" required> <input type = "submit"> </form> EOT; echo json_encode ( [ 'content' => $form ], JSON_UNESCAPED_UNICODE ); } # END --- Добавлено --- PHP: public static function addRemember( Lerma $lerma, string $password ): bool { [ 'id' => $id, static :: instance( false ) -> config -> unique => $unique, 'password' => $password_hash, ] = $lerma -> fetch( Lerma :: FETCH_ASSOC ); if ( password_verify ( $password, $password_hash ) ) { $new_hash = md5 ( $id - 1 . $unique . ( $password_hash = password_hash ( $password, PASSWORD_DEFAULT ) ) ); Lerma :: query( [ 'UPDATE `%s` SET password = "%s", hash = "%s", remember = 1, online = UNIX_TIMESTAMP( now() ) WHERE id = %d', static :: instance( false ) -> config -> table, $password_hash, $new_hash, $id ] ); setcookie ( static :: instance( false ) -> config -> cookie, $new_hash, strtotime ( static :: instance( false ) -> config -> duration ), '/' ); return true; } return false; } --- Добавлено --- Лучше: PHP: elseif ( getenv ( 'REMOTE_ADDR' ) == 'POST' )
Логично было спросить - зачем ООП синтаксис пропихиваю в голову. А почему не Akame ? Если бы я PDO использовал ? аналогичная часть кода (строк)(инструмент) по работе с БД. С другой стороны - если "человеку" интересно, будет тут диалог дальнейший.
Вариант с id пользователей более понятный, и более подходящий для начала изучения PHP Вот допустим я авторизовался в личном кабинете, следующим образом: Код (Text): $result_query_select = $mysqli->query("SELECT * FROM `lab` WHERE name = '".$name."' AND text = '".$text."'"); if($result_query_select->num_rows == 1){ $_SESSION['name'] = $name; $_SESSION['text'] = $text; $new_url = 'http://192.168.0.37/lab/test_work.php'; header('Location: '.$new_url); PHP перенаправляет меня на test_work.php Допустим там только одна ячейка для заполнения «info». Я её заполнил, но хочу знать, под каким id был пользователь который её заполнил… Вот скрипт: Код (Text): $result = $mysqli->query("INSERT INTO ".$db_table." (user_id,info) VALUES ('$user_id','$info')"); Как объяснить PHP что бы в переменной $user_id было значение из БД? И именно ID того пользователя, который авторизовался. Наверное это можно сделать при помощи сессий? Допустим, когда пользователь авторизовался, начинаем сессию, и далее вытягиваем ID пользователя из сессии… Я правильно понимаю?