[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Система бана
Onehp
Вывод всех пользователей

<?php
<p class="view_last">Пользователи</p>
$user = mysql_query("SELECT login,id FROM users ORDER BY login");//извлекаем логин и идентификатор пользователей
$user_mass = mysql_fetch_array($user);
do
{
printf("<p><a class='reg_user' href='profile.php?id=%s'>%s</a><a class='mes_del' href='ban_user.php?id=%s'<br></p>",$user_mass['id'],$user_mass['login'],$user_mass['id']);
}
while($user_mass = mysql_fetch_array($user));


ban_user.php

<?
$ip = getenv("HTTP_X_FORWARDED_FOR");
if (empty($ip) || $ip=='unknown') { $ip=getenv("REMOTE_ADDR"); }
mysql_query ("DELETE FROM `user_ban` WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 2073600");
$result = mysql_query("SELECT ban FROM `user_ban` WHERE ip='$ip'");
$myrow = mysql_fetch_array($result);
if ($myrow['ban'] > 0) {
exit("Вы забанены!"."<html><head><meta http-equiv='Refresh' content='3; URL=index.php'></head><body></body></html>");

$myrow2 = mysql_fetch_array($result2);
if (empty($myrow2['id']))
{
mysql_query ("INSERT INTO `user_ban` (ip,date,col) VALUES ('$ip',NOW(),'1')");
}
exit ("Извините, Вы забанены^^"."<html><head><meta http-equiv='Refresh' content='2; URL=index.php'></head><body></body></html>");
}
?>


Будет ли работать такая система? Что не так если что? wink.gif



Спустя 20 минут, 15 секунд (20.09.2010 - 15:20) waldicom написал(а):
Почему getenv(), а не $_SERVER ?

Спустя 5 минут, 16 секунд (20.09.2010 - 15:25) Onehp написал(а):
waldicom, IP получить, а что с суперглоб., быстрее работать будет?

Спустя 4 минуты, 55 секунд (20.09.2010 - 15:30) Ser18 написал(а):
А есть смысл банить по ip? Он ведь при каждом подключении к интернету меняется

Спустя 58 секунд (20.09.2010 - 15:31) Onehp написал(а):
ну вообще работать будет нет? biggrin.gif Разве не IP компа будет вводится в базу?

Спустя 53 минуты, 12 секунд (20.09.2010 - 16:25) Ser18 написал(а):
Я бы так написал
1 - забанен
0 - не забанен
Сначала запрос в БД на замену 1 на 0 если срок бана истек

$user = mysql_query("SELECT login, id, user_ban FROM users ");
while ($user_mass = mysql_fetch_array($user)) {

if($user_mass['user_ban']==1) {

echo $user_mass['login']." Забанен";
}

if($user_mass['user_ban']==0) {

echo $user_mass['login']." Не забанен"
}

}

А по поводу ip на сколько я знаю он выдается компьютеру на время подключения к интернету

Спустя 52 минуты, 37 секунд (20.09.2010 - 17:17) inpost написал(а):
Onehp
Почему нельзя банить по IP:
1. Компьютерная сеть для целой фирмы имеет один IP.
2. Несколько человек могут сидеть с одного IP. И мама, и маленький 12-летний троль.
3. У таких как я IP каждый раз меняется, заходя в интернет.
4. Кому надо - подменят IP за минуту.
5. IP достаточно ограничено, и если я правильно понял учебник, то в теории может возникнуть так, что несколько разных компьютеров могут иметь один и тот же ай-пи.

Спустя 1 час, 13 минут, 26 секунд (20.09.2010 - 18:31) Onehp написал(а):
inpost
Ясно спасиб, понял
Ser18
можешь помочь код подредактировать? wink.gif

Спустя 5 минут, 17 секунд (20.09.2010 - 18:36) Ser18 написал(а):
А что именно помочь?

Спустя 3 минуты, 29 секунд (20.09.2010 - 18:39) Onehp написал(а):
Ser18
Мой код переделать как ты написал, а то если я просто так напишу не получится smile.gif я не могу понять как сделать, типо если 0 не в бане если нажата кнопка забанить то забанить на 1 день или там на сколько нибудь wink.gif

Спустя 8 минут, 37 секунд (20.09.2010 - 18:48) Ser18 написал(а):
Что у вас не разрешается забаненому пользователю?
Писать сообщения
Авторизоваться
Или еще что то

0 - записывается в таблицу users, колонка user_ban при регистрации пользователя
1 - перезаписываете user_ban ставя пользователю бан

Спустя 6 минут, 43 секунды (20.09.2010 - 18:55) Onehp написал(а):
Ser18, просто заходить на сайт в течении суток, ну в смысле под своим логином smile.gif Это как допустим если ты не верно ввел логин 3 раза то иди отдыхай какое то время biggrin.gif

Спустя 2 минуты, 13 секунд (20.09.2010 - 18:57) inpost написал(а):
Onehp
Есть таблица Users, добавь в неё ещё одно поле (status). И если 0 - то пользователь забанен, если 1 - то нет.

Спустя 8 минут, 11 секунд (20.09.2010 - 19:05) Onehp написал(а):
inpost, а как реализовать что бы если 0 то бан? smile.gif

типо так?

Если (нажата кнопка забанить) {(то в таблице бан в поле статус поставить 0 где ид=$ид(выше $ид=логин узера)) и время бана;}
иначе
{все норм;}

как это реализовать на языке пыхыпы? wink.gif

можете просто функциями помочь, пожалуйста smile.gif

Спустя 2 минуты, 3 секунды (20.09.2010 - 19:07) Ser18 написал(а):
Так если он 3 раза неправильно ввел логи, банить то некого, если только ip
а это бессмысленно

Спустя 1 минута, 47 секунд (20.09.2010 - 19:09) Onehp написал(а):
Ser18
не не я просто пример привел smile.gif

Спустя 9 минут, 17 секунд (20.09.2010 - 19:18) inpost написал(а):
Onehp
За тебя никто писать, увы, не будет! Делать прийдется тебе...

Спустя 4 минуты, 36 секунд (20.09.2010 - 19:23) Onehp написал(а):
inpost
попробую, проверите? wink.gif

Спустя 10 минут, 49 секунд (20.09.2010 - 19:34) inpost написал(а):
Onehp
Конечно! Если получатся не будет - тогда обращайся)

Спустя 39 минут, 10 секунд (20.09.2010 - 20:13) Onehp написал(а):
Вот набросал wink.gif


<?php

if (isset ($_POST['ban'])) {$ban = $_POST['ban'];}

$ban = getenv("HTTP_X_FORWARDED_FOR");
if (empty($ban))
{
$ban=getenv("REMOTE_ADDR");
(
"INSERT INTO `user_ban` (id,date,status) VALUES ('$id',NOW(),'1')");
}
mysql_query ("DELETE FROM `user_ban` WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 2073600");
$result = mysql_query("SELECT status FROM `user_ban` WHERE id='$id'");
$myrow = mysql_fetch_array($result);
if ($myrow['status'] = 1)
{
exit("Вы забанены!"."<html><head><meta http-equiv='Refresh' content='3; URL=index.php'></head><body></body></html>");}


Спустя 1 час, 25 минут, 40 секунд (20.09.2010 - 21:38) Ser18 написал(а):
// Когда баним записываем дату так в таблицу users колонка data_ban
$data_ban = date("Y-m-d",time()+(1*(24*60*60)));// Прибавляем к сегоднешней даты 1 днь
//Бан при котором нельзя авторизоваться

$data = date("Y-m-d"); //Сегодняшняя дата
$result = mysql_query("SELECT login, user_ban, data_ban FROM users WHERE login ='{$_POST['login']}'");
$myrow = mysql_fetch_array($result);
// Если пользователь забанен и дата его разбана уже наступила то разбанивам его меняя 1 на 0
if($myrow['user_ban'] == 1 and $myrow['data_ban'] >= $data) {
$a = 0;
mysql_query("UPDATE users SET user_ban = '$a' WHERE login = '{$_POST['login']}'");

}
// Потом
$result2 = mysql_query("SELECT id, ligin, password, user_ban, data_ban FROM users WHERE login ='{$_POST['login']}'");
$myrow2 = mysql_fetch_array($result2);
if($myrow2['user_ban'] == 1) {
exit('Вы забанены');
}


Я так не далал
Возможно что то не правилно
Но раз никто не пишет

Спустя 1 день, 15 часов, 47 минут, 5 секунд (22.09.2010 - 13:26) Onehp написал(а):
ни канает sad.gif, даже если сам 1 поставлю не канает

Спустя 11 минут, 58 секунд (22.09.2010 - 13:37) inpost написал(а):
Ser18
$a можно не создавать, а непосредственно в БД добавлять 0.
На первый взгляд вроде все правильно записано, хотя опечатки: "ligin".
Внимательнее надо быть!
Даты сравни отдельно, правильно ли ты делаешь проверь! И вообще, что именно не работает? Даты не сравниваются, обращение к БД не идёт? Выборка? Укажи точную причину

Спустя 5 минут (22.09.2010 - 13:42) Onehp написал(а):
Опечатки поправил, да, не идет в бд получается, потому что как было 0 так и стоит 0, даже если в ручную на ноль поменять то ничего не измениться (видемо дата тоже не работает)

Спустя 4 минуты, 29 секунд (22.09.2010 - 13:47) inpost написал(а):
Onehp
Так 0 - это нормально, ты же писал, что бан - 1, значит и реакция должна быть именно на 1.
Ты не пиши весь код целиком, ты каждую часть в отдельности проверяй.
Вот скрипт, где-то в середине поставь exit(); перед этим выведи через echo полученные данные на данный момент! Посмотри, правильно ли отобразились! Пройди дальше, опять exit и смотри на данные полученные! И так шаг за шагом.

Спустя 2 минуты, 24 секунды (22.09.2010 - 13:49) Onehp написал(а):
ой ой опечатался, то есть если поставить 1 wink.gif щас попробую
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.