За последние 24 часа нас посетил 22341 программист и 1021 робот. Сейчас ищут 629 программистов ...

Сохранение уровня аккаунта в сессии

Тема в разделе "PHP для новичков", создана пользователем Abdrey, 27 фев 2017.

  1. Abdrey

    Abdrey Новичок

    С нами с:
    13 фев 2017
    Сообщения:
    28
    Симпатии:
    3
    В БД сделал уровень аккаунта [lvl]
    Сделал проверку не работает:


    PHP:
    1. <?php if($_SESSION['lvl'] == 0)
    2.     {
    3.     ?>
    4.         <a href="/">test  = 0</a>
    5.     <?php
    6.     }else if( $_SESSION['lvl'] == 1 )
    7.     {
    8.     ?>
    9.         <a href="/">test = 1</a>
    10.     <?php
    11.     }else if( $_SESSION['lvl'] == 2 )
    12.     {
    13.     ?>
    14.         <a href="/">test = 2</a>
    15.     <?php
    16.     }
    17.         ?>
    Выводит только test = 0
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.744
    Симпатии:
    1.319
    Адрес:
    Лень
    PHP:
    1. switch ($_SESSION['lvl']) {
    2.     case 0:
    3.         echo '<a href="/">test  = 0</a>';
    4.         break;
    5.     case 1:
    6.         echo '<a href="/">test = 1</a>';
    7.         break;
    8.     case 2:
    9.         echo '<a href="/">test = 2</a>';
    10.         break;
    11. }
    https://secure.php.net/manual/ru/control-structures.switch.php#example-112
    --- Добавлено ---
    сцука secure порезали!!! :mad::mad:
     
    #2 MouseZver, 27 фев 2017
    Последнее редактирование модератором: 27 фев 2017
  3. Abdrey

    Abdrey Новичок

    С нами с:
    13 фев 2017
    Сообщения:
    28
    Симпатии:
    3

    Код немного изменил, теперь нужно сделать проверку из массива

    PHP:
    1. $_SESSION['user'] = array(
    2.         'id' => $id,
    3.         'group_id' => $lvl
    4.     );
    Подскажи пожалуйста
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
  5. Abdrey

    Abdrey Новичок

    С нами с:
    13 фев 2017
    Сообщения:
    28
    Симпатии:
    3
    Да до этого я дошел, начал дампать код, в итоге получил:
    Код (Text):
    1. <?php var_dump("SELECT `id` FROM `users` WHERE `login` = '".$_SESSION['logged_user']->login."'");
    2.       var_dump("SELECT `group_id` FROM `users` WHERE `id` = '".$id."'");?><hr><?php
    3.       var_dump($_SESSION['user'] = array(
    4.         'id' => $id,
    5.         'group_id' => $lvl
    6.     ));
    7. ?>
    Код (Text):
    1.  
    2. string(55) "SELECT `id` FROM `users` WHERE `login` = root" string(47) "SELECT `group_id` FROM `users` WHERE `id` = '1'"
    3. array(2) { ["id"]=> int(1) ["group_id"]=> int(0) }
    На самом деле логин - root, но id = 6 , а он пишет 1
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Этот запрос, например в PHPMyAdmin работает нормально? Лучше для значения login обернуть в кавычки, чтобы получилось 'root

    не вижу что идёт в базу, но тут видно
    что будет выбран id с 1.

    лучше делать dump примерно так так, а то не видно те же запросы идут в базу которые дампишь или другие:
    PHP:
    1. $sql1 = "SELECT `id` FROM `users` WHERE `login` = '".$_SESSION['logged_user']->login."'";
    2. $sql2 = "SELECT `group_id` FROM `users` WHERE `id` = '".$id."'";
    3. var_dump($sql1);
    4. var_dump($sql2);
    5.  
    6. // ...
    7. $r1 = $mysqli->query($sql1);
    8. // ...
    9. $r2 = $mysqli->query($sql2);
     
  7. Abdrey

    Abdrey Новичок

    С нами с:
    13 фев 2017
    Сообщения:
    28
    Симпатии:
    3

    SQL запросы проходят отлично, там всё супер.
    Что то в коде не так, дампаю ошибку даёт
    Fatal error: Call to a member function query() on a non-object in P:\home\jpuer.loc\www\index.php on line 53
     
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    что за код на 53 строке?
     
  9. Abdrey

    Abdrey Новичок

    С нами с:
    13 фев 2017
    Сообщения:
    28
    Симпатии:
    3
    Код (Text):
    1. $r1 = $mysqli->query($sql1);
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
  11. Abdrey

    Abdrey Новичок

    С нами с:
    13 фев 2017
    Сообщения:
    28
    Симпатии:
    3

    Нашел проблему, осталось только решить!
    Вообщем, в строке
    PHP:
    1. $id = R::getRow("SELECT `id` FROM `users` WHERE `login` = '".$_SESSION['logged_user']->login."'");
    Всё верно он находит ID, но в массиве.
    При следующем запросе
    PHP:
    1. $lvl = R::getRow("SELECT `group_id` FROM `users` WHERE `id` = '".$id."'");
    Вместо $id он просто пихает Array а не ID.
    Надо как то преобразовать!
    --- Добавлено ---
    Есть же

    PHP:
    1.     $id = R::getRow("SELECT `id` FROM `users` WHERE `login` = '".$_SESSION['logged_user']->login."'");
    2.     $lvl = R::getRow("SELECT `group_id` FROM `users` WHERE `id` = '".$id['id']."'");
    Работает, но сравнение - нет
    --- Добавлено ---
    Супер! Всё сделал, кому интересно как в личку!
     
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    публикуй тут, может кому-то будет полезно
     
  13. Abdrey

    Abdrey Новичок

    С нами с:
    13 фев 2017
    Сообщения:
    28
    Симпатии:
    3
    PHP:
    1. <?php
    2.  
    3.     $id = R::getRow("SELECT `id` FROM `users` WHERE `login` = '".$_SESSION['logged_user']->login."'");
    4.     $lvl = R::getRow("SELECT `group_id` FROM `users` WHERE `id` = '".$id['id']."'");
    5.    
    6.     $_SESSION['user'] = array(
    7.         'id' => $id,
    8.         'group_id' => $lvl
    9.     );
    10.    
    11. ?>
    И сама проверка

    PHP:
    1. <?php
    2.     if($lvl['group_id'] == 0)
    3.     {?>
    4.         <p>У вас нет привелегий!</p>
    5.     <?php
    6.     }
    7.     else if($lvl['group_id'] == 1)
    8.     {?>
    9.         <p>Вы модератор!</p>
    10.     <?php
    11.     }
    12.     else if($lvl['group_id'] == 2)
    13.     {?>
    14.         <p>Вы Администратор!</p>
    15.     <?php
    16.     }
    17. ?>
     
  14. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.744
    Симпатии:
    1.319
    Адрес:
    Лень
    а switch то где ? нафуй я вообще распинался ? :D
     
    denis01 нравится это.