За последние 24 часа нас посетили 17419 программистов и 1601 робот. Сейчас ищут 1195 программистов ...

Как получить id из сессии, чтобы использовать для вставления в другую таблицу?

Тема в разделе "Сделайте за меня", создана пользователем bannyk9393, 12 ноя 2024.

Метки:
  1. bannyk9393

    bannyk9393 Новичок

    С нами с:
    12 ноя 2024
    Сообщения:
    2
    Симпатии:
    0
    Добрый день, у меня есть сайт блога, только начинаю делать.
    Аутентификация с сессий и тд, то есть можно получить логин пользователя при входе и вывести в приветствие при переходе на страницу после регистрации.

    Нужно сделать код php добавления поста.
    2 таблицы:
    users - id, login, password.
    posts - id, user_id, post, date_of_publ, tags.
    Внешний ключ user_id таблицы posts ссылается на первичный id таблицы users.
    Логика (на данный момент) такая: при нажатии кнопки запостить нужно получить id из users аутентифицированного на данный момент пользователя и записать в user_id в posts, ну и остальные данные посредством INSERT INTO.
    Но не знаю как это реализовать, может надо сделать совсем по другому, как не понимаю.
    Подскажите, помогите

    Форма авторизации:

    PHP:
    1. <?php
    2.  
    3. $host = 'MySQL-5.5';
    4. $user = 'root';  
    5. $pass = '';
    6. $db_name = 'practice.blog';  
    7. $link = mysqli_connect($host, $user, $pass, $db_name);
    8.  
    9.   // Проверка соединения
    10.   if (!$link) {
    11.     echo 'Не могу соединиться с БД. Код ошибки: ' . mysqli_connect_errno() . ', ошибка: ' . mysqli_connect_error();
    12.     exit;
    13.   }
    14.  
    15.  
    16.  
    17.   if (!empty($_POST['password']) and !empty($_POST['login'])) {
    18.         $login = $_POST['login'];
    19.         $password = $_POST['password'];
    20.        
    21.         $query = "SELECT * FROM users WHERE login='$login' AND password='$password'";
    22.         $res = mysqli_query($link, $query);
    23.         $user = mysqli_fetch_assoc($res);
    24.  
    25.    
    26.         if (!empty($user)) {
    27.             $_SESSION['auth']=true;    
    28.             $_SESSION['login']= $login;
    29.             echo "yes";// прошел авторизацию
    30.             header('Location: blogpage.php');
    31.             exit;
    32.         } else {
    33.             echo "no";// неверно ввел логин или пароль
    34.             echo '<a href="index.php">Назад</a>';
    35.         }
    36.     }
    Форма для поста (совсем лысая):
    PHP:
    1. <?php
    2. $host = 'MySQL-5.5';
    3.     $user = 'root';  
    4.     $pass = '';
    5.     $db_name = 'practice.blog';  
    6.     $link = mysqli_connect($host, $user, $pass, $db_name);
    7.     // Проверка соединения
    8.     if (!$link) {
    9.       echo 'Не могу соединиться с БД. Код ошибки: ' . mysqli_connect_errno() . ', ошибка: ' . mysqli_connect_error();
    10.       exit;
    11.     }
    12.  
    13.     session_start();
    14.  
    15.  
    16.   if (!empty($_SESSION['auth'])) {
    17.     echo "yes";
    18.   } else{
    19.     echo "no";
    20.   }
    21.  
    22. echo $_SESSION['login'];
    23.  
    24.     }
    Как получить id именно авторизированного пользователя и как вставить в таблицу постов? В какой форме получать id входа авторизации или поста? Как реализовать?
     
  2. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    419
    Симпатии:
    79
    Адрес:
    Бавария, Германия
    Добрый день!
    1. Вообще-то в базе данных обычно хранят хэширванные пароли.
    Работают с паролями так
    PHP:
    1. //при регистрации пользователя
    2. $db_password  = password_hash($_POST["password"], PASSWORD_DEFAULT);
    3. //сохранение в БД
    4. //При проверке введённого пароля
    5. if (password_verify($_POST['password'], $db_password)) ...
    2.В случае совпадение имени и пароля, user_id можно передавать через $_SESSION["user_id"],
    причем $_SESSION['auth']) лишнее, т.к. $_SESSION["user_id"] > 0 достаточно для провери успешного логина.

    3. Пример 1
    PHP:
    1. $message = "";
    2. if ( filter_input(INPUT_POST, 'login') )
    3. {
    4.     $conn = mysqli_connect('127.0.0.1:3306','root','','test');
    5.     $stmt = $conn->prepare("SELECT id, role, password FROM `users` WHERE login = ?");
    6.     $stmt->execute([$_POST['login']]);
    7.     $stmt->bind_result($id, $role, $password);
    8.     $stmt->fetch();
    9.  
    10.     if ($password)
    11.     {
    12.         if (password_verify($_POST['password'], $password))
    13.         {
    14.             session_start();
    15.             $_SESSION['user_id'] = $id;
    16.             $_SESSION['role'] = $role;
    17.             $message="OK";
    18.         }
    19.         else
    20.         {
    21.            $message="Incorrect password";
    22.         }
    23.     }
    24.     else
    25.     {
    26.        $message="Not found user";
    27.     }
    28.     echo $message;
    29.     exit;
    30. }
    31. ?>
    32. <html>
    33. <head>
    34. <script>
    35. window.addEventListener("load", () => {
    36.     var form = document.getElementById("log");
    37.     var go = document.getElementById("go");
    38.     var err = document.getElementById("error");
    39.     var inp = document.querySelectorAll("input");
    40.     //------------------------------------------------
    41.     for (i in [0,1]) {
    42.         inp[i].addEventListener("click", () => {
    43.             err.innerHTML="";
    44.         });
    45.     }
    46.     //------------------------------------------------
    47.     form.addEventListener("submit", (e) => {
    48.       e.preventDefault();
    49.       fd = new FormData(form);
    50.       fetch("?", {
    51.       method: "POST",
    52.       body: fd,
    53.       })
    54.       .then((response) => response.text())
    55.       .then((text) => {
    56.         if(text == "OK")
    57.             window.location = "blogpage.php";
    58.         else
    59.             err.innerHTML = text;
    60.        });
    61.     });
    62.     //------------------------------------------------
    63. });
    64. </script>
    65. </head>
    66. <body>
    67. <form id="log" method="post" action="">
    68. <input type="text" name="login" placeholder="Name" required>
    69. <input type="password" name="password" placeholder="Password" required>
    70. <input type="submit" id="go" value="Login">
    71. <div id="error"></div>
    72. </form>
    73. </body>
    74. </html>
    Пример 2
    PHP:
    1. <?php
    2. if (filter_input(INPUT_POST, 'login')){
    3.     $conn = mysqli_connect('127.0.0.1:3306','root','','test');
    4.     $stmt = $conn->prepare("SELECT id FROM `users` WHERE login = ?");
    5.     $stmt->execute([$_POST['login']]);
    6.     $stmt->bind_result($id);
    7.     $stmt->fetch();
    8.     if($id)
    9.     {
    10.         session_start();
    11.         $_SESSION['user_id'] = $id;
    12.         $message = "";
    13.     }
    14.     else
    15.         $message = "Not found user";
    16.     echo $message;
    17.     exit;
    18. }
    19. else if(filter_input(INPUT_POST, 'password'))
    20. {
    21.     session_start();
    22.     $conn = mysqli_connect('127.0.0.1:3306','root','','test');
    23.     $stmt = $conn->prepare("SELECT role, password FROM `users` WHERE id = ?");
    24.     $stmt->execute([$_SESSION['user_id']]);
    25.     $stmt->bind_result($role, $password);
    26.     $stmt->fetch();
    27.     if($password)
    28.     {
    29.         if (password_verify($_POST['password'], $password))
    30.         {
    31.             session_start();
    32.             $_SESSION['role'] = $role;
    33.             $message = "";
    34.         }
    35.         else
    36.         {
    37.            $message = "Incorrect password";
    38.         }
    39.     }
    40.     echo $message;
    41.     exit;
    42. }
    43. ?>
    44. <html>
    45. <head>
    46. <script>
    47. window.addEventListener("load", () => {
    48.     var form = document.getElementById("log");
    49.     var go = document.getElementById("go");
    50.     var err = document.getElementById("error");
    51.     var inp = document.querySelectorAll("input");
    52.     //------------------------------------------------
    53.     inpAttr = {
    54.        type:"password", name:"password", placeholder:"Пароль"
    55.     };
    56.  
    57.     inpSet = function(inpAttr){
    58.         inp[0].value="";
    59.         for(attr in inpAttr)
    60.             inp[0].setAttribute(attr,inpAttr[attr]);
    61.     }
    62.  
    63.     for (i in [0,1]) {
    64.         inp[i].addEventListener("click", () => {
    65.             err.innerHTML="";
    66.         });
    67.     }
    68.  
    69.     //------------------------------------------------
    70.     step = 1;
    71.     form.addEventListener("submit", (e) => {
    72.       e.preventDefault();
    73.       fd = new FormData(form);
    74.       fetch("?", {
    75.       method: "POST",
    76.       body: fd,
    77.       })
    78.       .then((response) => response.text())
    79.       .then((text) => {
    80.         if(text)
    81.             err.innerHTML = text;
    82.         else
    83.         {
    84.             switch(step)
    85.             {
    86.                 case 1:
    87.                     inpSet(inpAttr);
    88.                     go.value="Continue";
    89.                     step++;
    90.                     break;
    91.                 case 2:
    92.                     form.submit();
    93.                     break;
    94.             }
    95.         }
    96.        });
    97.     });
    98.     //------------------------------------------------
    99. });
    100. </script>
    101. </head>
    102. <body>
    103. <form id="log" method="post" action="blogpage.php">
    104. <input type="text" name="login" placeholder="Name" required>
    105. <input type="submit" id="go" value="Login">
    106. <div id="error"></div>
    107. </form>
    108. </body>
    109. </html>
    Удачи!
     
    #2 Vladimir Kheifets, 13 ноя 2024
    Последнее редактирование: 13 ноя 2024
  3. bannyk9393

    bannyk9393 Новичок

    С нами с:
    12 ноя 2024
    Сообщения:
    2
    Симпатии:
    0
    Спасибо большое!
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.830
    Симпатии:
    651
    Для проверки авторизации обычно просто проверяется наличие в сессии какого-то идентификационного поля (id/login):
    PHP:
    1. if (isset($_SESSION['id'])) {
    --- Добавлено ---
    Доп. условия, естественно, тоже могут быть, например проверка «времени жизни» сессии на стороне сервера.
    --- Добавлено ---
    Имя пользователя, название поста? А вот поле tags в посте не нужно, если это не кеш. Также продумайте, чтобы сразу после (первого) постинга пост не появлялся в публичных списках, а оставался «черновиком». Например, можно завести числовое поле «категория» с дефолтным значением «Черновик» (0 или NULL): https://gency.ru/comment/2
     
    #4 miketomlin, 13 ноя 2024
    Последнее редактирование: 13 ноя 2024