Главная страница


ru.cgi.perl

 
 - RU.CGI.PERL ------------------------------------------------------------------
 From : Anton Kudris A.                      2:5057/21.17   24 May 2001  14:14:14
 To : All
 Subject : проверка для формы
 -------------------------------------------------------------------------------- 
 
    Тут как то писали, что один из вариантов проверки того, с моей ли формы мне
 приходят данные - это приписывать к форме некий случайный номер и хранить его у 
 себя в базе данных. А потом проверять, когда от формы получены параметры искать 
 этот номер у себя в базе данных.
     Я написал две функции, одна просто возвращает случайное число (чтобы потом
 приписать его к форме), а вторая получает это число и смотрит, есть ли в базе
 такое и не слишком ли оно устарело (критерий старости - один час).
     В общем помогите это всё оптимизировать немного. И ещё вопрос: что я делаю
 не так, почему не удаляется из файла запись во второй функции?
 
 sub get_number
 # отдаёт случайное число. И записывает его вместе с временем в файл.
 {
 my $random= substr(md5_hex(int(rand 55)),0,5); #я решил, что мне хватит и 5цифр
 my $hour = (localtime(time))[2];
 my $string=join('' , $random, ' ', $hour,);
 
  open (ACC, "+<access.dat") || die "can't open access.dat for writing";
  my @tmp=<ACC>;
  @tmp=("$string \n", @tmp);
  seek(ACC,0,0);
  print ACC @tmp;
  close ACC;
 
  return($random);
 }
 
 sub check_number
 {
 my($num)=@_; #это номер, который потом ищется в базе данных
 
 my $hour = (localtime(time))[2]; my (@tmp, %mass);
 
 open (ACC, "access.dat") || die "can't open access.dat";
 while (<ACC>)
     {
     chomp;
     my ($s_num,$s_time)=split(/\s+/, $_);
         $mass{$s_num}=$s_time;
         }
 close ACC;
 
 if (exists $mass{$num})
     {
     if ($mass{$num}!=$hour) { return "0"; }
     else    {
         delete $mass{$num};
         open (ACC, "access.dat") || die "can't open access.dat";
         my $arr;
         foreach my $k (keys %mass) { $arr=join('', $k, ' ', $mass{$k}, "\n"); }
             close ACC;
         return "1";
         }
 
     }
 }
 
 При этом почему-то если номер и существует, то он не удаляется из базы данных.
 
 ну а потом нечто вроде:
 my $a=get_number();
 my $b=check_number($a);
 if ($b=='0') {print "error. Access NOT granted";}
 elsif ($b=='1') {print "OK. Access granted";}
 З.Ы. всё это пишется под Винду98 на АктивСтейт перле 5.6.1
 
 Bye, All.
 --- [ http://jod.formoza.ru ]Д-Д-Д-Д-Д-Д-Д-Д-Д-Д-Д-Д-їjodЪ-Д-Д-Д-Д-Д-Д--Д-Д
  * Origin: я участник фаталистическо-пофигистического движения (2:5057/21.17)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 проверка для формы   Anton Kudris A.   24 May 2001 14:14:14 
 Re: проверка для формы   PROext   25 May 2001 11:33:08 
 проверка для формы   Anton Kudris A.   25 May 2001 18:07:00 
 Re: проверка для формы   Pavel Kurnosoff   28 May 2001 01:22:38 
 Re: проверка для формы   Alexander Beskhmelnitsyn   25 May 2001 08:44:29 
 проверка для формы   Anton Kudris A.   25 May 2001 18:00:06 
 Re: проверка для формы   Alexander Beskhmelnitsyn   28 May 2001 08:04:34 
 Re: проверка для формы   Artem Chuprina   28 May 2001 11:35:51 
 проверка для формы   Anton Kudris A.   28 May 2001 15:45:15 
 Re: проверка для формы   Artem Chuprina   28 May 2001 18:30:11 
 проверка для формы   Anton Kudris A.   26 May 2001 01:18:13 
 RE:проверка для формы   Sergey Krutyko   25 May 2001 09:28:47 
 Re: проверка для формы   Pavel Ammosov   25 May 2001 15:24:58 
Архивное /ru.cgi.perl/160603b0cdf31.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional