За последние 24 часа нас посетили 20813 программистов и 1128 роботов. Сейчас ищут 314 программистов ...

Запись данных в таблицу MySQL

Тема в разделе "PHP для новичков", создана пользователем Reken, 2 авг 2019.

Метки:
  1. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Подскажите пожалуйста:
    В процессе изучения PHP, хочу разобраться со следующим:

    В качестве примера авторизации сделал "учебный" пример:
    Пользователь через форму передает логин и пароль, далее php сравнивает отправленные данные с БД, если совпадение, то отправляет на следующую страницу, если не совпадает то не пропускает...
    Код (Text):
    1. $result_query_select = $mysqli->query("SELECT * FROM `lab` WHERE name = '".$name."' AND password = '".$password."'");
    2. if($result_query_select->num_rows == 1){
    3. $_SESSION['name'] = $name;
    4. $_SESSION['password'] = $password;
    5. $new_url = 'http://192.168.0.37/lab/table.php';
    6. header('Location: '.$new_url);
    На следующей странице (table.php), пытаюсь реализовать следующее:
    Допустим, если пользователь зашел на неё как "User1" то записывать все дальнейшие введенные пользователем данные в таблицу БД USER1
    А если пользователь зашел как "User2", то записывать все дальнейшие введенные пользователем данные в таблицу БД USER2
    Понимаю что нужно использовать код PHP на сравнение значений...Но пока что не могу сообразить как написать...
     
  2. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Таблица user:
    Код (Text):
    1. id   | user  | password
    2. 100  | vasia | 1234
    3. 101  | igor  | 1111
    4. 234  | stepa | qwer
    И вот тащишь ты не их самих, а их id.

    Вот пользователь что то сделал и у тебя есть таблица для этих дел. Туда записываешь id пользователя.
    Например таблица work:

    Код (Text):
    1. id | user_id | note
    2. 1  | 100     | нагадил в штаны
    3. 2  | 101     | описался
    4. 3  | 234     | козел
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    PHP:
    1. <?php
    2.  
    3. error_reporting ( E_ALL );
    4.  
    5. use Aero\Supports\{ Lerma, Akame };
    6.  
    7.  
    8. require 'autoload.php';
    9.  
    10. if ( Akame :: ifRemember() )
    11. {
    12.     // u детектед
    13.     echo json_encode ( [ 'content' => 'Ты авторизован' ], JSON_UNESCAPED_UNICODE );
    14. }
    15. elseif ( filter_input ( INPUT_SERVER, 'REQUEST_METHOD' ) == 'POST' )
    16. {
    17.     /* $input = filter_input_array ( INPUT_POST, [
    18.         'login' => FILTER_DEFAULT,
    19.         'password' => FILTER_DEFAULT
    20.     ] ); */
    21.  
    22.     if ( empty ( $_POST['login'] ) || empty ( $_POST['password'] ) )
    23.     {
    24.         // Заполни поля login & password
    25.         echo json_encode ( [ 'err' => [ 'message' => 'Заполни поля login & password' ] ], JSON_UNESCAPED_UNICODE );
    26.     }
    27.     elseif ( ( $lrm = Lerma :: prepare( 'SELECT id, login, password FROM usraccount WHERE login = ?', [ $_POST['login'] ] ) ) -> rowCount() < 1 )
    28.     {
    29.         // юзер не найден
    30.         echo json_encode ( [ 'err' => [ 'message' => 'юзер не найден' ] ], JSON_UNESCAPED_UNICODE );
    31.     }
    32.     else
    33.     {
    34.         if ( Akame :: addRemember( $lrm, $_POST['password'] ) )
    35.         {
    36.             header ( 'Location: //php/77084/auth.php' );
    37.             exit;
    38.         }
    39.      
    40.         // иначе неправильный пароль, восстановить ? узузу(С)
    41.         echo json_encode ( [ 'err' => [ 'message' => 'неправильный пароль, восстановить ?' ] ], JSON_UNESCAPED_UNICODE );
    42.     }
    43. }
    44. else
    45. {
    46.     $form = <<<'EOT'
    47. <form action = "//php/77084/auth.php" method = "post">
    48.     <input type = "text" name = "login" placeholder = "Логин" required>
    49.     <input type = "password" name = "password" placeholder = "Пароль" required>
    50.     <input type = "submit">
    51. </form>
    52. EOT;
    53.     echo json_encode ( [ 'content' => $form ], JSON_UNESCAPED_UNICODE );
    54. }
    55. # END
    --- Добавлено ---
    PHP:
    1.     public static function addRemember( Lerma $lerma, string $password ): bool
    2.     {
    3.         [
    4.             'id' => $id,
    5.             static :: instance( false ) -> config -> unique => $unique,
    6.             'password' => $password_hash,
    7.         ] = $lerma -> fetch( Lerma :: FETCH_ASSOC );
    8.        
    9.         if ( password_verify ( $password, $password_hash ) )
    10.         {
    11.             $new_hash = md5 ( $id - 1 . $unique . ( $password_hash = password_hash ( $password, PASSWORD_DEFAULT ) ) );
    12.            
    13.             Lerma :: query( [ 'UPDATE `%s` SET password = "%s", hash = "%s", remember = 1, online = UNIX_TIMESTAMP( now() ) WHERE id = %d',
    14.                 static :: instance( false ) -> config -> table,
    15.                 $password_hash,
    16.                 $new_hash,
    17.                 $id
    18.             ] );
    19.            
    20.             setcookie ( static :: instance( false ) -> config -> cookie, $new_hash, strtotime ( static :: instance( false ) -> config -> duration ), '/' );
    21.            
    22.             return true;
    23.         }
    24.        
    25.         return false;
    26.     }
    --- Добавлено ---
    Лучше:
    PHP:
    1. elseif ( getenv ( 'REMOTE_ADDR' ) == 'POST' )
     
    _ne_scaju_ нравится это.
  4. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @MouseZver, человек только начинает изучение РНР, нафига ты ему лерму пхаешь?
     
    romach нравится это.
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    Логично было спросить - зачем ООП синтаксис пропихиваю в голову. А почему не Akame ? Если бы я PDO использовал ? аналогичная часть кода (строк)(инструмент) по работе с БД. С другой стороны - если "человеку" интересно, будет тут диалог дальнейший.
     
  6. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Вариант с id пользователей более понятный, и более подходящий для начала изучения PHP
    Вот допустим я авторизовался в личном кабинете, следующим образом:
    Код (Text):
    1. $result_query_select = $mysqli->query("SELECT * FROM `lab` WHERE name = '".$name."' AND text = '".$text."'");
    2. if($result_query_select->num_rows == 1){
    3.         $_SESSION['name'] = $name;
    4.         $_SESSION['text'] = $text;
    5.         $new_url = 'http://192.168.0.37/lab/test_work.php';
    6. header('Location: '.$new_url);
    PHP перенаправляет меня на test_work.php
    Допустим там только одна ячейка для заполнения «info». Я её заполнил, но хочу знать, под каким id был пользователь который её заполнил…
    Вот скрипт:
    Код (Text):
    1. $result = $mysqli->query("INSERT INTO ".$db_table." (user_id,info) VALUES ('$user_id','$info')");
    Как объяснить PHP что бы в переменной $user_id было значение из БД? И именно ID того пользователя, который авторизовался.
    Наверное это можно сделать при помощи сессий? Допустим, когда пользователь авторизовался, начинаем сессию, и далее вытягиваем ID пользователя из сессии… Я правильно понимаю?
     
  7. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    правильно
     
  8. Reken

    Reken Активный пользователь

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Да, всё получилось. Спасибо за подсказки