За последние 24 часа нас посетили 17497 программистов и 1724 робота. Сейчас ищут 856 программистов ...

Помогите с кодом

Тема в разделе "PHP для новичков", создана пользователем Terminator004, 5 янв 2018.

  1. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    У админа спроси
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Я уже выше пару раз на этот момент указывал. Если у тебя в таблице пользователей есть поле с логикой статуса, то среди этих статусов ты можешь выделить целое одно значение для удалённого пользователя и не удалять кортеж а менять статус. Целостность данных же. Внешние ключи и всё такое.
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    Это если... - только менять статус. А теперь юзер обычный когда зайдет. Надо ставить глушилку ввиде редиректа.

    И вот снова ... как узнаем что допустим уже ему прописали бан.
    1. либо во switch латаем чтоб для зеков "таблица тютю" - что не очень хорошо так как код будет работать для забаненного овоща, лишние движения, ой епт как мне лень.
    2. В самом первом запросе ставить условие для неких статусников. + заглушка в начале скрипта.
    3. НОРМАЛЬНЫЙ КОД АУТЕНТИФИКАЦИИ БЛ*Я
     
  4. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
  6. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
  7. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Так при бане сессия должна автоматом удаляться.
     
  8. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    @keren бан у тебя в базе данных, а сессия в браузере пользователя и файловой системе сервера. Как будешь удалять сессию при блокировке пользователя?
     
  9. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Сешн дистрой сразу при заносе в базу статуса бана юзера
     
  10. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Так. И чья сессия удаляется этой функцией?
     
  11. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    забаненого пользователя, что бы не могло быть такого что юзер забанен а сессия осталась.
     
  12. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    А как сессия пользователя узнает что админ его забанил? Функция выполняется для текущего вызова, а в текущем вызове - админ, который банит пользователя и уничтожение сессии будет выходом админа, а не забаненого пользователя.
     
  13. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    покажи мне код где сессия удаляется
    --- Добавлено ---
    что ясно ? если в каждом файле прописывать коннект к базе и имея всего лишь строку
    ид = сессия ид

    2 признак - то что, весь его проект находится в тестовой стадии и в бд занесены от балды данные, которые якобы не будут никогда удаляться опять же повторюсь "При тест стадии" ? хах. Говнокод обсуждаем - как из говна слепить норм говно.
     
  14. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    @MouseZver чсв пониже и подумай о чем тебе говорят.
     
  15. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    например при логауте юзера:
    PHP:
    1. (!empty($_POST['logOut'])) {
    2.             session_destroy();
    3.             header('Location: index.php');
    4.             exit;
    А так наверное сессия должна автоматом сверяться со статусом юзера в базе.
     
  16. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Тебе же @Ganzal объяснил - нельзя удалить чужую сессию, можно только текущего юзверя. Хотя лично я session_destroy() никогда не делаю (если он только не стоит во фреймворке). Достаточно unset($_SESSION["current_user"]);
    Если пользователь может попасть под бан, значит нужно сделать что-то вроде
    PHP:
    1. // Мы не будем себе в сессию писать инъекцию
    2. // status = 1 у нормальных пользователей, которые могут войти
    3. $res = $mysqli->query("select * from user where id='$_SESSION[current_user]' and status=1");
    4. $currentUser = $res->fetch_assoc();
    5. if (!$currentUser) {
    6.     unset($_SESSION["current_user"]);
    7.     header("Location: /login.php");
    8.     die;
    9. }
     
    keren нравится это.
  17. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    окай, теперь посмотри на код ТСа темы и скажи что ты видишь ? там есть что - либо про аутентификацию ? кроме как одной строки
    $id = $_SESSION...;

    Да я спокоен как мышь. Смотрю на код и сужу по его логике. А мы тут раздули муху и давай прописывать мини аутентификацию
    --- Добавлено ---
    ага и тогда будем два раза коннектиться к базе. Если предположим что такая дичь подключения к базе в каждом файле. Править всех надо.
     
  18. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    @MouseZver вопрос возник по логике в твоем коде, зачем проверять количество рядов, если там может быть только один ряд или ошибка запроса, которую можно отловить - or die(ошибка запроса) но потом смысла нет проверять кол-во рядов.
     
  19. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    какая ошибка ?
     
  20. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    если пользователя с id из сессии нет в базе
     
  21. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Ошибки там нет, у тебя строка так-то проверяет отсутствие фолса:
    PHP:
    1. if ( mysqli_num_rows ( $res ) > 0 )
    2. {
    но считать там так-то нечего кроме единицы и просто проверить отсутствие фолса можно:
    PHP:
    1. if ($res){
    2. }
     
    #46 keren, 12 янв 2018
    Последнее редактирование: 12 янв 2018
  22. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    пол года назад на моей памяти утвердили что if($res){ говнокод
     
  23. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    В примере из доки весь запрос в if
    PHP:
    1. if ($result = mysqli_query($link, "SELECT Name FROM City LIMIT 10"))
    2. {
    А какая разница если запрос до этого, а в if $result ?
     
  24. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    ты будешь проверять на отсутствие возвращаемого false, а не на возврат кол-во найденных строк в таблице
     
  25. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    А по сути это все равно одно и тоже, проверка >0 вернет тру или фолс, а если if($res) вернет номер ошибки в mysqli_error($link)