Автор Тема: Бан-лист и фильтр  (Прочитано 8092 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 53
  • +0/-0
  • 0
    • Просмотр профиля
    • http://rta.rikt.ru
Бан-лист и фильтр
« : 20 Декабря 2001, 14:13:08 »
Люди! Помогите, пожалуйста. У меня на сайте что-то вроде доски объявлений. При том эта доска работает на скрипте, переделанного из скрипта гостевой книги.
В последние три дня мой сайт стал пользоваться почему-то повышенным вниманием у манимейкеров и любителей прорекламировать свой сайт. На сайте запрещены ссылки на спонсоров и открытая реклама сайтов. В общем, нужен бан-лист и фильтр слов.
Бан-лист по следующим пунктам:
мыло
IP
Имя
Адрес
А фильтр нужен, чтобы он не допускал к публикации объявления, содержащие слова, например: from?id или id и т.п.
Можно ли такую пакость сделать и как? Вот текст основного скрипта:

#!/usr/bin/perl

# -------------------------------
#Колличество сообщений на странице
$mess=100;
#######

#
$smile1="http://nb.h1.ru/guest/smile1.gif";
$smile2="http://nb.h1.ru/guest/smile2.gif";
$smile3="http://nb.h1.ru/guest/smile3.gif";

$filename="data.blt";
$filehdr="header.blt";
$fileend="end.blt";


@months = (\'01\',\'02\',\'03\',\'04\',\'05\',\'06\',\'07\',\'08\',\'09\',\'10\',\'11\',\'12\');
@days = (\'Вс\',\'Пн\',\'Вт\',\'Ср\',\'Чт\',\'Пт\',\'Сб\');
$color="green";
$add=0;
# -------------------------------

#Get data from memory --------
if ($ENV{\'REQUEST_METHOD\'} eq "POST")
    {
      read(STDIN, $bufer, $ENV{\'CONTENT_LENGTH\'});
    }
else
    {
      $bufer=$ENV{\'QUERY_STRING\'};
    }    
#End -------------------------

# Decode data ----------------
@pairs = split(/&/, $bufer);
foreach $pair (@pairs)
      {
        ($name, $value) = split(/=/, $pair);
        $name =~ tr/+/ /;
        $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
        $value =~ tr/+/ /;
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
       
        $FORM{$name} = $value;
      }      
# End ------------------------  
$action=$FORM{action};
$page=$FORM{page};
      ####   ####   ####

&html;
if ($action eq "add"){&add;}
open(GB, "$filename");
@DATA=;
close (GB);
#-----------------------------------------
$allmess = @DATA;
$pageend=$page+$mess-1;
&forma;
&show;
&glos;
&htmlend;






   #   #######sub###########   #
sub add
#Saving new data
{
   ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time);
   $year+=1900;
   $pdata="[$days[$wday] $hour:$min - $mday/$months[$mon]/$year]";

   
   $name=$FORM{name};
   if($name eq "")
     {
        &error;
     }   
   $FORM{\'text\'} =~ s/\\n/
/g;
   $text=$FORM{text};
   if($text eq "")
     {
        &error;
     }   
   if($text eq "")
     {
        &error;
     }   

   if ($FORM{mail} ne "")
       {
         $mail=$FORM{mail};
        }
   else     
        {
           $mail="0";
        }
     
   if ($FORM{url} ne "")
       {
         $url=$FORM{url};
        }
   else     
        {
           $url="0";
        }   
   

   if ($FORM{city} ne "")
       {
         $city=$FORM{city};
        }
   else     
        {
           $city="0";
        }       
      
   
      
   $STRING = join("::",$name,$mail,$url,$pdata,$city,$text,"0");
      
   open(GB, "+<$filename") || open(GB, ">$filename");
     @DATA=;
     
              @DATA=("$STRING\\n",@DATA);
              seek(GB,0,0);
              print GB @DATA;
              close (GB);
}

   


sub forma  
# HTML cod for form
  {
     print <        

http://nb.h1.ru/addnotice-017.html">Добавить объявление в рассылку


    

FORMA
  }
 
 
sub show

  {
     print "
";
     for($i=$page;$i<=$pageend;$i++)
       {
        ($name,$mail,$url,$tim,$city,$text2,$answer) = split(/::/,$DATA[$i]);
         if($name ne "")
           {
              
            print "
                    ";
           print "";             
         print "";             
        }          
       }
       print "
$name";
            if($city ne "0"){print "
Местоположение: $city";}
            print "

";
          if ($mail ne "0")
            {
                    print "http://nb.h1.ru)\\" class=a>$mail
";
            }
          if($url ne "0")
            {
               print "$url
";
            }   
           
            $text2 =~ s/:-\\)//g;
            $text2 =~ s/:-\\|//g;
            $text2 =~ s/:-\\(//g;
            $text2 =~ s/:\\)//g;
            $text2 =~ s/:\\|//g;
            $text2 =~ s/:\\(//g;
          print "
Текст объявления:
$text2
$tim
                    
- - - - - - -
";   
  }
 

sub glos
  {
     print "
";
     $all = int($allmess / $mess)+1;
     print "| ";
     for($i=1;$i <= $all;$i++)
       {
          $to=$i*$mess-$mess;
          $a=$page/10+1;
          if($a ne $i)
            {print " $i |";}
          else
            {print " $i |";}  
       }
     print "
";     
  }
 
sub html
  {
     print "Content-type: text/html\\n\\n";
   
   open (HEADER,"$filehdr");
     while (
)
       {print "$_";}
     close (HEADER);
  }


sub htmlend
  {
     print "

Всего объявлений в разделе - $allmess";
     open (SOF,"$fileend");
     while ()
       {print "$_";}
     close (SOF);
  }      
 
 
sub error
  {
     print "Content-type: text/html\\n\\n";
   print "$title";
   print "Поля: \\"ИМЯ\\" и \\"ТЕКСТ ОБЪЯВЛЕНИЯ\\" обязательны для заполнения.";
   print "";
   exit;
  }                    
З.Ы. Если у этого скрипта есть дыры, скажите, я буду очень рад (исправить их)!
Спасибо
Чайник - он и в Африке чайник (это про меня :))

Оффлайн Oak

  • Дерево
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1481
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Бан-лист и фильтр
« Ответ #1 : 20 Декабря 2001, 16:54:21 »
Сам сумеешь ?
Видишь

if($name eq "")
                         {
                         &error;
                         }

Вот и допиши типа

if($name eq "Вася")
                         {
                         &error;
                         }
if($text ~ m/"from?id"/i)
                         {
                         &error;
                         }


Ну и т.д.
(или там не ~ , а ~= ?)
[основной броузер - SeaMonkey] Netscape Communicator 4 - is the best :) // see sources

Оффлайн

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 53
  • +0/-0
  • 0
    • Просмотр профиля
    • http://rta.rikt.ru
Бан-лист и фильтр
« Ответ #2 : 20 Декабря 2001, 17:29:53 »
Oak
Слушай, расскажи, что первое и что второе. Если будет error, то что увидит юзер на своем браузере?
Чайник - он и в Африке чайник (это про меня :))

Оффлайн

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 53
  • +0/-0
  • 0
    • Просмотр профиля
    • http://rta.rikt.ru
Бан-лист и фильтр
« Ответ #3 : 20 Декабря 2001, 18:02:28 »
Так, все понял. А как сделать бан-лист по ip-адресу?
И еще. Надо, чтобы эти bad words хранились в отдельном файле, например 1.txt. Как это сделать?
Чайник - он и в Африке чайник (это про меня :))

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
так
« Ответ #4 : 20 Декабря 2001, 18:50:21 »
Цитировать
А как сделать бан-лист по ip-адресу?
И еще. Надо, чтобы эти bad words хранились в отдельном файле, например 1.txt.

Вот так (все записывается в файл words.txt - по одному слову или ip в строчке):
Этот кусок кода помещаешь в sub add  под
if($text eq "")
{
&error;
}

(кстати тот блок повторяется два раза - опячатка?)


open(WORDS, "my @words=;
close WORDS;
foreach my $word(@words){
   if ($text=~/$word/){&error("Ваше сообщение не прошло цензурного контроля");}
   if (($word=~/\\d+/)&&($ENV{\'REMOTE_ADDR\'}==$word)){&error("Вам запрещен доступ!");}
}



Далее, можно подправить sub error, предлагаю заменить на:

sub error
{
print "Content-type: text/html\\n\\n";
print "$title";
if (@_){
   print "

Отказ в Обслуживании

";
   print @_;
}
else {
print "Поля: \\"ИМЯ\\" и \\"ТЕКСТ ОБЪЯВЛЕНИЯ\\" обязательны для заполнения.";
}   
print "";
exit;
}


P.S. только в words.txt не стоит писать всяких спецсимволов, типа |, \\,/
 в исканиях.

Оффлайн

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 53
  • +0/-0
  • 0
    • Просмотр профиля
    • http://rta.rikt.ru
Бан-лист и фильтр
« Ответ #5 : 20 Декабря 2001, 19:06:56 »
Так, замечтательно.
А как сделать, чтобы скрипт определял IP-адрес?
Если я его не знаю, некому будет запрещать...
В файле words.txt можно писать предложения типа "Приглашаю всех на мою домашнюю страничку"?
if (($word=~/\\d+/)&&($ENV{\'REMOTE_ADDR\'}==$word)){&error("Вам запрещен доступ!");}
Вот этот код запрещает доступ определенному IP-адресу?
IP-адреса и слова хранятся в одном файле?
Чайник - он и в Африке чайник (это про меня :))

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
да
« Ответ #6 : 21 Декабря 2001, 00:17:14 »
Цитировать
Вот этот код запрещает доступ определенному IP-адресу?
IP-адреса и слова хранятся в одном файле?

да, все закидывается в один файл ;) можно и в разные сделать, но нужно ли?
Цитировать
В файле words.txt можно писать предложения типа "Приглашаю всех на мою домашнюю страничку"?

Да, только:
фраза должна быть целиком на одной строке,
;) если регистр букв будет не совпадать, то фокус не удался (это относится и к простым словам), можно переводить все в один регистр, но :( хлопотно, ведь первоначально задача ставилась для забанивания спонсоров ;)
Цитировать
А как сделать, чтобы скрипт определял IP-адрес?

Тут надо сделать несколько аккуратных телодвижений:

1. Меняем
$STRING = join("::",$name,$mail,$url,$pdata,$city,$text,"0");

НА:
$STRING = join("::",$name,$mail,$url,$pdata,$city,$text,"0", $ENV{\'REMOTE_ADDR\'});
Т.е. добавляем ip:  $ENV{\'REMOTE_ADDR\'}

Далее:
($name,$mail,$url,$tim,$city,$text2,$answer) = split(/::/,$DATA[$i]);

меняем на:
($name,$mail,$url,$tim,$city,$text2,$answer, $ip) = split(/::/,$DATA[$i]);

Т.е. ip можно выводить теперь вместе с объявлением, вставляя $ip
например сюда:

print "Текст объявления:
$text2
ip: $ip

Во! Вообще имеет смысл подумать о ином скрипте доски объявлений, возможно с премодерацией (т.е. попадает для обозрения после вашей проверки), потому как скрипт обдурить несложно, изменил регистр, написал ч е р е з пробел  или закинув туда html, который не выкидывается скриптом

ПРЕДУПРЕЖДЕНИЕ: после модификации (т.е. добавление в информацию пользователя ip), старые базы будут ;( непригодны, советую проверить вначале все не на основном варианте - а то данные все попортятся.
Можно начать с чистого места ;)
а можно изменить старые данные под новые условия:
добавить в конец каждой строки старых записей :: (т.е. два двоеточия)
 в исканиях.

Оффлайн

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 53
  • +0/-0
  • 0
    • Просмотр профиля
    • http://rta.rikt.ru
Бан-лист и фильтр
« Ответ #7 : 21 Декабря 2001, 10:13:26 »
Спасибо, все понял.
Досок нет хороших. А с админовским интерфесом - тем более.
А как сделать, чтобы скрипт выводил сообщения без HTML, т.е. если юзер написал < h1 > ПРИГЛАШАЮ ВСЕХ НА МОЮ ДОМАШНЮЮ СТРАНИЧКУ! , сообщение выведется без использования тегов, просто текстом?
Чайник - он и в Африке чайник (это про меня :))

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
простенько..
« Ответ #8 : 21 Декабря 2001, 11:08:33 »
мы обсуждали в соседнем топике удаление html тегов.
Самый простой вариант, который удалит не изощренный html такой:

$text=~s/<[^>]+>//g;

Но это не самый надежный вариант, советую посмотреть соотв. темы на нашем форуме :)
Можно все ">" и "<" заменять на их экв. > и <
(как на этом форуме), предварительно уведомив посетителей, что html запрещен.
$text=~ s/$text=~ s/>/\\>/g;

Вариант более надежный, чем просто удаление html
 в исканиях.

Оффлайн

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 53
  • +0/-0
  • 0
    • Просмотр профиля
    • http://rta.rikt.ru
Бан-лист и фильтр
« Ответ #9 : 23 Декабря 2001, 11:09:13 »
Тест
Удалите эту мессагу....
Чайник - он и в Африке чайник (это про меня :))

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
во
« Ответ #10 : 23 Декабря 2001, 12:17:07 »
Цитировать
Тест

во, я про это и говорил - как бы ни извращались, JavaScript, теги в кавычках или внутри др. тегов, но тупая система замены тегов :
$text=~ s/$text=~ s/>/\\>/g;

работает как танк, и быстро.
 в исканиях.

Оффлайн Demon

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 60
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.ntndis.com
Бан-лист и фильтр
« Ответ #11 : 23 Декабря 2001, 13:46:05 »
Прошу прощения за вторжение!
Я по поводу IP , я сталкнулся с такой проблемой:
На хостинке, установлен прокси и соответственно IP  все одинаковые, енто я к тому что может не получиться!)

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
ну это не принципиально
« Ответ #12 : 23 Декабря 2001, 14:51:35 »
Цитировать
енто я к тому что может не получиться

думаю, что для этого конкретного случая не принципиально.
Можно ставить куки-идентификаторы и банить по ним.
Но самый лучший способ - премодерирование :)
 в исканиях.

Оффлайн

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 53
  • +0/-0
  • 0
    • Просмотр профиля
    • http://rta.rikt.ru
Добьем да конца!!! ;)
« Ответ #13 : 24 Декабря 2001, 14:45:21 »
Так, теперь давайте разберем администраторский скрипт.
Вся проблема в том, что он может удалять сообщения только по одному. А можно ли сделать так, чтобы отметить ненужные сообщения галочками, нажать где-нибудь внизу кнопку "удалить" и чтобы они все сразу удалились.
Все мессаги хранятся в текстовом файле. Каждая новая мессага - на отдельной строке. Вот текст администраторского скрипта:

#!/usr/bin/perl

#-----------------------------
#Ваш логин
$login="****";
#Ваш пароль
$pass="****";
#Колличество сообщений на странице
$mess=50;
# -------------------------------

#
$smile1="http://nb.hut.ru/guest/smile1.gif";
$smile2="http://nb.hut.ru/guest/smile2.gif";
$smile3="http://nb.hut.ru/guest/smile3.gif";

$filename="data.blt";
$filehdr="header.blt";
$fileend="end.blt";

$page=0;
# -------------------------------

#Get data from memory --------
if ($ENV{\'REQUEST_METHOD\'} eq "POST")
    {
      read(STDIN, $bufer, $ENV{\'CONTENT_LENGTH\'});
    }
else
    {
      $bufer=$ENV{\'QUERY_STRING\'};
    }    
#End -------------------------

# Decode data ----------------
@pairs = split(/&/, $bufer);
foreach $pair (@pairs)
      {
     
       ($name, $value) = split(/=/, $pair);
       $name =~ tr/+/ /;
       $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
       $value =~ tr/+/ /;
       $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
       
       $FORM{$name} = $value;
      }      
# End ------------------------  
$action=$FORM{action};
if ($FORM{page} ne "")
  {$page=$FORM{page};}
#### #### ####


&html;

&readdata;
if($bufer eq ""){&showpass;}
if($action eq "Редактировать"){&edit;}
elsif($action eq "checkpass"){&checkpass;}
elsif($action eq "Удалить"){&delet;}
elsif($action eq "Готово"){&addedit;}
&htmlend;






# #######sub########### #

sub checkpass
  {
  if($FORM{login} eq $login && $FORM{pass} eq $pass)
    {
  &show;
&glos;
   }
  else  
   {
    print "Неправильно введён login или пароль.


\\n";
    &showpass;
   }  
  }

sub showpass
  {
  print "";
  print "";
  print "";
  print "
";
  print "Введите login:
";
  print "
";
  print "Введите пароль:
";
  print "

";
  print "";
  print "";
  print "
";
  print "";
  exit;
  }

sub addedit
  {
  open (ADD,"$filename");
  @line=;
  close (ADD);
 
    ($name,$mail,$url,$tim,$city,$text2,$answer) = split(/::/,@line[$FORM{id}]);
    if($FORM{ans} ne "")
     {
      $answer=$FORM{ans};
      $answer=~ s/\\n/
/g;
      $answer="$answer\\n";
      }
    else{$answer="0\\n";}  
    if($FORM{mess} ne "")
     {$FORM{mess} =~ s/\\n/
/g;}
    else{&error;}  
    if($FORM{mail} ne ""){$mail=$FORM{mail};}
    else{$mail="0";}
    if($FORM{url} ne ""){$url=$FORM{url};}
    else{$url="0";}
    if($FORM{city} ne ""){$city=$FORM{city};}
    else{$city="0";}    
    if($FORM{name} eq ""){&error;}
    @line[$FORM{id}]=join("::",$FORM{name},$mail,$url,$tim,$city,$FORM{mess},$answer);
   
   
 
  open (ADD,">$filename");
  for($i=0;$i<=@line;$i++)
   {
    print ADD "@line[$i]";
   }
  close (ADD);  
  &readdata;
  &show;
  &glos;
  }


 
sub show

  {
 
  print "

Скрипт администрации гостевой книги.

\\n";
  print "";
  for($i=$page;$i<=$pageend;$i++)
   {
  ($name,$mail,$url,$tim,$city,$text2,$answer) = split(/::/,$DATA[$i]);
  if($name ne "")
    {
    print "";
   
  print "
       ";
if($answer ne "0\\n")
 {
    $answer =~ s/:-\\)//g;
  $answer =~ s/:-\\|//g;
  $answer =~ s/:-\\(//g;
  $answer =~ s/:\\)//g;
  $answer =~ s/:\\|//g;
  $answer =~ s/:\\(//g;
  print "";
 }        
print "";        
 }    
   }
   print "
$name";
  if($city ne "0"){print " ($city)";}
  print "

";
if ($mail ne "0")
  {
          print "$mail
";
  }
if($url ne "0")
  {
  print "$url
";
  }
 
  $text2 =~ s/:-\\)//g;
  $text2 =~ s/:-\\|//g;
  $text2 =~ s/:-\\(//g;
  $text2 =~ s/:\\)//g;
  $text2 =~ s/:\\|//g;
  $text2 =~ s/:\\(//g;
print "
$text2
$tim
       
Ответ: $answer
 

-----------

";
   print "
Всего сообщений - $allmess
";
  }
 

sub glos
  {
  $all = int($allmess / $mess)+1;
  print "| ";
  for($i=1;$i <= $all;$i++)
   {
    $to=$i*$mess-$mess;
    $a=$page/10+1;
    if($a ne $i)
     {print " $i |";}
    else
     {print " $i |";}  
   }
  }
 
sub html
  {
  print "Content-type: text/html\\n\\n";

print "Администрация гостевой книги [BULLET]";
print <

 
STYLE
  print "
";
  }


sub htmlend
  {
 
  print "
";
 
  }
 
 
sub error
  {
  print "Content-type: text/html\\n\\n";
print "GuestBook from bullet";
print "Поля: \\"ИМЯ\\" и \\"КОММЕНТАРИЙ\\" обязательны для заполнения.";
print "";
exit;
  }
 
sub edit
  {
  ($name,$mail,$url,$tim,$city,$text2,$answer) = split(/::/,$DATA[$FORM{id}]);
  print "Редактирование сообщения
";
  print " Имя

";
  if($city eq "0"){$city="";}
  print "Город

";
  if($mail eq "0"){$mail="";}
  print "e-mail

";
  if($url eq "0"){$url="";}
  print "homepage

";
  $text2 =~ s/
/\\n/g;
  print "Сообщение

";
  if($answer eq "0\\n"){$answer="";}
  else{$answer =~ s/
/\\n/g;}
  print "Ответ:

";
 
  print "";
  print "
";
 
 
  }

sub delet
  {
  open (NEW,">zman.blt");
  open (OLD,"$filename");
$i=0;    
  while ()
   {
   
    if($i ne $FORM{id})
     {
      print NEW $_;
     }
    $i++;  
   }

close(OLD);
close(NEW);
rename($filename,"old.bak");
rename("zman.blt",$filename);
print "Сообщение удалено";
&readdata;
&show;  
&glos;  
  }
     
sub readdata
  {
  ######
open(GB, "$filename");
@DATA=;
close (GB);
#-----------------------------------------
$allmess = @DATA;
$pageend=$page+$mess-1;
#########
  }          


З.Ы. Нужно, чтобы функция редактирования сообщения сохранилась.
З.З.Ы. Заранее спасибо.
З.З.З.Ы. И еще. У этого администраторского скрипта есть один глюк - при попытке редактировать сообщение, он почему-то недописывает в полях значение. Например, если в поле "Имя" было "Вася Пупкин", но он просто оставит "Вася". Как это исправить?
Чайник - он и в Африке чайник (это про меня :))

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
эээ
« Ответ #14 : 24 Декабря 2001, 15:27:22 »
Цитировать
И еще. У этого администраторского скрипта есть один глюк - при попытке редактировать сообщение, он почему


print " Имя

";

size поменяй на 30

Кстати, не стоит забывать о доп. поле ip
Например это:
($name,$mail,$url,$tim,$city,$text2,$answer) = split(/::/,$DATA[$FORM{id}]);
надо поменять на это:
($name,$mail,$url,$tim,$city,$text2,$answer,$ip) = split(/::/,$DATA[$FORM{id}]);
И надо в скрытое поле $ip засунуть, чтоб при сохранении не потерять.
Т.е. операции split и join стоит проводить аккуратно - новое поле добавили, не потеряйте его!

;) об улучшенном удалении могу сказать за себя: мне лень
Может у кого то желание появится...
« Последнее редактирование: 25 Декабря 2001, 17:21:06 от Green Kakadu »
 в исканиях.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28