Я уже выше пару раз на этот момент указывал. Если у тебя в таблице пользователей есть поле с логикой статуса, то среди этих статусов ты можешь выделить целое одно значение для удалённого пользователя и не удалять кортеж а менять статус. Целостность данных же. Внешние ключи и всё такое.
Это если... - только менять статус. А теперь юзер обычный когда зайдет. Надо ставить глушилку ввиде редиректа. И вот снова ... как узнаем что допустим уже ему прописали бан. либо во switch латаем чтоб для зеков "таблица тютю" - что не очень хорошо так как код будет работать для забаненного овоща, лишние движения, ой епт как мне лень. В самом первом запросе ставить условие для неких статусников. + заглушка в начале скрипта. НОРМАЛЬНЫЙ КОД АУТЕНТИФИКАЦИИ БЛ*Я
@keren бан у тебя в базе данных, а сессия в браузере пользователя и файловой системе сервера. Как будешь удалять сессию при блокировке пользователя?
А как сессия пользователя узнает что админ его забанил? Функция выполняется для текущего вызова, а в текущем вызове - админ, который банит пользователя и уничтожение сессии будет выходом админа, а не забаненого пользователя.
покажи мне код где сессия удаляется --- Добавлено --- что ясно ? если в каждом файле прописывать коннект к базе и имея всего лишь строку ид = сессия ид 2 признак - то что, весь его проект находится в тестовой стадии и в бд занесены от балды данные, которые якобы не будут никогда удаляться опять же повторюсь "При тест стадии" ? хах. Говнокод обсуждаем - как из говна слепить норм говно.
например при логауте юзера: PHP: (!empty($_POST['logOut'])) { session_destroy(); header('Location: index.php'); exit; А так наверное сессия должна автоматом сверяться со статусом юзера в базе.
Тебе же @Ganzal объяснил - нельзя удалить чужую сессию, можно только текущего юзверя. Хотя лично я session_destroy() никогда не делаю (если он только не стоит во фреймворке). Достаточно unset($_SESSION["current_user"]); Если пользователь может попасть под бан, значит нужно сделать что-то вроде PHP: // Мы не будем себе в сессию писать инъекцию // status = 1 у нормальных пользователей, которые могут войти $res = $mysqli->query("select * from user where id='$_SESSION[current_user]' and status=1"); $currentUser = $res->fetch_assoc(); if (!$currentUser) { unset($_SESSION["current_user"]); header("Location: /login.php"); die; }
окай, теперь посмотри на код ТСа темы и скажи что ты видишь ? там есть что - либо про аутентификацию ? кроме как одной строки $id = $_SESSION...; Да я спокоен как мышь. Смотрю на код и сужу по его логике. А мы тут раздули муху и давай прописывать мини аутентификацию --- Добавлено --- ага и тогда будем два раза коннектиться к базе. Если предположим что такая дичь подключения к базе в каждом файле. Править всех надо.
@MouseZver вопрос возник по логике в твоем коде, зачем проверять количество рядов, если там может быть только один ряд или ошибка запроса, которую можно отловить - or die(ошибка запроса) но потом смысла нет проверять кол-во рядов.
Ошибки там нет, у тебя строка так-то проверяет отсутствие фолса: PHP: if ( mysqli_num_rows ( $res ) > 0 ) { но считать там так-то нечего кроме единицы и просто проверить отсутствие фолса можно: PHP: if ($res){ }
В примере из доки весь запрос в if PHP: if ($result = mysqli_query($link, "SELECT Name FROM City LIMIT 10")) { А какая разница если запрос до этого, а в if $result ?
ты будешь проверять на отсутствие возвращаемого false, а не на возврат кол-во найденных строк в таблице
А по сути это все равно одно и тоже, проверка >0 вернет тру или фолс, а если if($res) вернет номер ошибки в mysqli_error($link)