Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> пробдема с бан скриптом 
:(
    Опции темы
mr.fox
Дата 3.7.2005, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 13.3.2005
Где: Ирландия

Репутация: 1
Всего: 2



Код

$ip=get_ip(); 
$user=addslashes($_SESSION['valid_user']);
global $HTTP_SESSION_VARS;
db_connect();
$result=mysql_query("SELECT * FROM ban_list WHERE ip='".get_ip()."' OR username='".stripslashes($HTTP_SESSION_VARS['valid_user'])."'") or die(mysql_error());
$num=mysql_num_rows($result);
$array=mysql_fetch_array($result);
if($num>0){
echo "your ip has been banned at ".$array['date']." ".$array['time']."<br />If you don't know the reson of the ban please contact admin at <a href=\"mailto:[email protected]\">[email protected]</a>";
exit;
}


собствено вот код, который проверяет как мы видим айпи юзера и его ник.. если айпи в бд то показывается что он в бане и пока! аналогично если его имя в бд, с которым он пытается авторизироваться..
так вот броблема.. если в бд заношу имя то все пашет а если заношу айпи то почему то не сравнивается, то есть заношу любую цифру в бд и всем юзерам говорит скрипт что они забанены!! в чем проблема?

Это сообщение отредактировал(а) mr.fox - 3.7.2005, 01:35
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 3.7.2005, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Цитата(mr @ 3.7.2005, 02:33)
global $HTTP_SESSION_VARS;

Убрать.
Использовать только суперглобальные $_SESSION.
Покажи структуру таблицы.
PM ICQ   Вверх
mr.fox
Дата 3.7.2005, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 13.3.2005
Где: Ирландия

Репутация: 1
Всего: 2



Код

CREATE TABLE `ban_list` (
  `ip` varchar(15) NOT NULL default '',
  `username` varchar(25) NOT NULL default '',
  `date` date NOT NULL default '0000-00-00',
  `time` time NOT NULL default '00:00:00',
  `by` varchar(25) NOT NULL default '',
  `ban_id` smallint(3) NOT NULL auto_increment,
  PRIMARY KEY  (`ban_id`)
) ENGINE=InnoDB

вот структура.. настчет сессий, они все нормально работают и дают бан если имя юзера в табилце.. а вот чото сравнение айпи хромает, не могу понять почему
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 3.7.2005, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



varchar(15) у IP замени на tinytext.
PM ICQ   Вверх
mr.fox
Дата 3.7.2005, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 13.3.2005
Где: Ирландия

Репутация: 1
Всего: 2



поменял, это не помогает.. да и не в том дело.. я вот заношу любой айпи в бд и показывает всем что у них бан.. не пойму в чем дело.. чото со сравнением-)
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 3.7.2005, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Цитата(mr @ 3.7.2005, 16:44)
ENGINE=InnoDB

Чем дефолтный MyISAM не устраивает?

PM ICQ   Вверх
mr.fox
Дата 3.7.2005, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 13.3.2005
Где: Ирландия

Репутация: 1
Всего: 2



Цитата(Mal @ 3.7.2005, 16:58)
Чем дефолтный MyISAM не устраивает?

у кого какой дефолтный, у меня на локалхосте дефолтный инобд.
а насчет бана то я решил проблему переписав скрипт на два кусочка, ща покажу.
Код

global $_SESSION;
db_connect();
$result=mysql_query("SELECT * FROM ban_list WHERE ip='".get_ip()."'") or die(mysql_error());
$num=mysql_num_rows($result);
if($num>0){
$array=mysql_fetch_array($result);
echo "your ip has been banned at ".$array['date']." ".$array['time']."<br />If you don't know the reason of the ban please contact admin at <a href=\"mailto:[email protected]\">[email protected]</a>";
exit;
}
$result2=mysql_query("select * from ban_list where username='".$_SESSION['valid_user']."'");
if(mysql_num_rows($result2)>0)
{$array=mysql_fetch_array($result2);
echo "This username has been banned at ".$array['date']." ".$array['time']."<br />If you don't know the reason of the ban please contact admin at <a href=\"mailto:[email protected]\">[email protected]</a>";
exit;
}


такой вариант хорошо работает и делит бан на имя юзера и айпиsmile
PM MAIL WWW ICQ   Вверх
Bikutoru
Дата 4.7.2005, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 2
Всего: 22



А если записывать в таблицу не сам айпи, а ip2long от него?


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Mal Hack
Дата 4.7.2005, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Цитата(Bikutoru @ 4.7.2005, 09:25)
А если записывать в таблицу не сам айпи, а ip2long от него?

Тогда вроде как по маске ты ничего не определишь. А понадобиться может smile
PM ICQ   Вверх
Bikutoru
Дата 4.7.2005, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 2
Всего: 22



Mal Hack, во-первых есть long2ip(), а во-вторых, давай позаморачиваемся немного:
Сначала разберемся в работе ip2long:

Код

function myIp2Long($str_ip)
{
    $ip_parts = explode(".", $str_ip);
    $multiply = 256 * 256 * 256;
    $res = 0;
    foreach($ip_parts as $byte)
    {
        $res += $byte * $multiply;
        $multiply /= 256;
    }

    return $res;
}


echo ip2long("107.25.37.1");
echo "<BR>";
echo myIp2Long("107.25.37.1");


А потом намного подумаем. Возьмем интервал
192.32.0.0 - 192.32.255.255
Для него
ip2long($start_ip) = 192 * 255^3 + 32 * 256^2 + 0 * 256 + 0;
ip2long($end_ip) = 192 * 255^3 + 32 * 256^2 + 255 * 256 + 255;
И любой ip между ними
Код

if ($myIpLong >= ip2long("192.32.0.0") && $myIpLong <= ip2long("192.32.255.255"))
{
...
}


Хотя, конечно, для чего нибудь типа 192.ххх.1.1 это не годится... Но часто ли такая маска используется?


Подумал еще немного Помогло
Получилось это:
Код

<?php

//Маска 127.0.ххх.1
function check($ip_long)
{
    if ($ip_long < ip2long("127.0.0.1"))
     return false;

    if ($ip_long > ip2long("127.0.255.1"))
     return false;

    if ($ip_long % 256 != 1)
     return false;

    return true;
}


$ips = array("126.0.0.1", "127.0.0.1", "127.1.0.1", "127.0.5.1", "127.0.5.5");

foreach($ips as $ip)
{
    echo $ip . " ";
    $ip = ip2long($ip);

    echo (check($ip)? "Ok": "Bad") . "<BR>";
}

?>


Это сообщение отредактировал(а) Bikutoru - 4.7.2005, 12:19


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
mr.fox
Дата 4.7.2005, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 13.3.2005
Где: Ирландия

Репутация: 1
Всего: 2



Bikutoru
Цитата(Bikutoru @ 4.7.2005, 11:36)
давай позаморачиваемся немного:

вот это и правда заморочка.. ты себе жизнь чтоли захотел усложнить? а чем собстННа тебя айпи в обычном виде не устраивает?
PM MAIL WWW ICQ   Вверх
Bikutoru
Дата 4.7.2005, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 2
Всего: 22



long - 4 байта, а строка, содержащая ip, - 15. Разница 275%. А если записей в таблице будет очень много. Да и сравниваются числа быстрее, чем строки...



--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0758 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.