Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не пускает после авторизации 
:(
    Опции темы
LeeFORT
Дата 21.3.2012, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Скачал чат, он бесплатный.
Хочу разбить авторизацию.

Что бы сначала просил ввод ника, а потом сверялся зареген он или нет, и в том случаи если он зареген спрашивать пароль!

Код

# Проверка Ника при входе в Чат
sub login {
  # Проверка на существование Ника в базе данных
  if ($register eq "yes") {

    # Проверка на существование Ника в файлах $data_nicks и $data_oldnicks
    my $pasw = &data_info("$data_dir/$data_nicks", $query{'name'}, "1");
       $pasw = &data_info("$data_dir/$data_oldnicks", $query{'name'}, "1")  if (!$pasw);  # Поиск Email в базе данных $data_userinfo, если не найдено в $data_oldnicks

    # Проверка пароля от &nick_exists и &nick_exists_olds
    if ($pasw) {
        # замена в пароле стоп символов
        $query{'password'} =~ s/\|/I/g;
        $query{'password'} =~ s/\'/I7I/g;
          if ($pasw ne "$query{'password'}") { # если пароль неверный
            if ($mailprogramme) {
              &error("Неверный пароль", "<A HREF=\"$script2_name?action=send_pwd&name=$query{'name'}\" target=_parent>я забыл пароль</A><BR><BR><A HREF=\"javascript:history.back()\" target=_parent>попробовать ещё</A>");
            } else {
              &error("Неверный пароль", "</B><FONT SIZE=-1 face=Arial>Если Вы забыли пароль,<BR>отправьте запрос по адресу - <A HREF=\"mailto:$admin_email\">$admin_email</A><BR>Не забудте указать свой Ник - \"<B>$query{'name'}</B>\"</FONT><BR><BR><B><A HREF=\"javascript:history.back()\" target=_parent>попробовать ещё</A>");
            }
            exit;
          }
    } else {
      &error("Ник \"$query{'name'}\" не существует", "<BR><HR color=red noShade SIZE=1 Width=250><BR><BR><A HREF=\"javascript:history.back()\" target=_parent>попробовать другой Ник</A>");
      exit;
    }
  }

  &max_user_limit()  if ($max_users > 0);  # ограничение числа посетителей
  &clear_old_msgs_sub()  if ($clear_old_msgs == 1); # 1 - старые сообщения удаляются из чата, когда чат пуст

  # проверка на bann
  my $nick_ip_banned = "no";
  my $enter;
  &file_open_rw("$data_dir/$data_banned", "BANFILE");
     my $i = 0;
     while (<BANFILE>) {
     chomp;
     @row = split(/\|/);

        if ($row[0] eq "ip_ban"  and  $query{'name'} ne $adm_nik) {
           if ($row[3]  and  $row[2] <= ($timestamp - $row[3])) {  # Удаляем запись, если её время больше $row[3]
           } elsif ($row[1] eq $ENV{'REMOTE_ADDR'}) {
              $nick_ip_banned = "yes";
              print BANFILE2 join('|', @row)."\n";
              $i++;
           } elsif ($row[1] =~ /\*/) {
              my @ip_row_nick = split(/\./, $ENV{'REMOTE_ADDR'});
              my @ip_row_banned = split(/\./, $row[1]);
                if ($ip_row_nick[0] eq $ip_row_banned[0]  and  $ip_row_nick[1] eq $ip_row_banned[1]  and  $ip_row_nick[2] eq $ip_row_banned[2]) {
                  $nick_ip_banned = "yes";
                }
              print BANFILE2 join('|', @row)."\n";
              $i++;
           } else {
              print BANFILE2 join('|', @row)."\n";
              $i++;
           }
        }
        elsif ($row[0] eq "nick_ban"  and  $row[1] eq $query{'name'}) {
             $nick_ip_banned = "yes";
             print BANFILE2 join('|', @row)."\n";
             $i++;
        }
        elsif ($row[0] eq "kick_nick") {
             if ($row[1] eq $query{'name'}) {  # Позволяем ранее кикнутому пользователю войти в Чат
             } elsif ($row[2] <= ($timestamp - 3600)) {  # Удаляем запись, если её время больше 1 часа
             } else {
                 print BANFILE2 join('|', @row)."\n";
                 $i++;
             }
        }
        elsif ($row[0] eq "ignor") {
             if ($row[4]  and  $row[3] <= ($timestamp - $row[4])) {  # Удаляем запись, если её время больше $row[3]
             } else {
                 print BANFILE2 join('|', @row)."\n";
                 $i++;
             }
        }
        elsif ($row[0] eq "su") {
             if ($row[1] eq $query{'name'}) {  # Найден Суперпользователь со статусом "su"
                 $info = "su"  if ($show_img_su eq "yes");  # Картинка у пользователя со статусом "su"
             }
             print BANFILE2 join('|', @row)."\n";
        }
        elsif ($row[0] eq "admin") {
             if ($row[1] eq $query{'name'}) {  # Найден Суперпользователь со статусом "admin"
                 $info = "admin"  if ($show_img_su eq "yes");  # Картинка у пользователя со статусом "admin"
             }
             print BANFILE2 join('|', @row)."\n";
        }
        else {
           print BANFILE2 join('|', @row)."\n";
           $i++;
        }
     }

  &file_close_rw("$data_dir/$data_banned", "BANFILE", "$i");

  if ($nick_ip_banned eq "yes") {
    &error("Вы отключены от чата", "</B><Font face=arial size=-1>По всем вопросам пишите администратору на<BR><A HREF=\"mailto:$admin_email\">$admin_email</A></font><br><br><A HREF=\"$script2_name?action=gotourl\&$logout_url\" TARGET=\"_parent\"><B>покинуть чат</B></A>");
    exit;
  }

  my ($nickok, $nickpassword);
  &file_open_rw("$data_dir/$data_nicks", "NICKFILE");
  while (<NICKFILE>) {

    if (/^\Q$query{'name'}\E\|/) {
      chomp;
      my @nickdata = split(/\|/);

      $nickok = "yes";  # Ник соответствует

      # проверка на соответствие пароля 'pwd'
      if ($nickdata[1] eq $query{'password'}) {

        # обновляем время последнего визита в чат, ID, статистику, IP
        $nickdata[4]  = $timestamp;
        $nickdata[8]  = time.$$.int(rand(999)).chr(int(rand(26)+97));
        $nickdata[9]  = &statistika($nickdata[9], "vhod");
        $nickdata[11] = $ENV{'REMOTE_ADDR'};

        # Позволяем ранее кикнутому пользователю зайти в чат
        $nickdata[10] = '' if ($nickdata[10]); # Удаляем метку бана

        $$nickdata{'name'}            = $nickdata[0];
        $$nickdata{'password'}        = ""; # есть пароль
        $$nickdata{'registertime'}    = $nickdata[3];
        $$nickdata{'updatefrequency'} = $nickdata[5];
        $$nickdata{'color'}           = $nickdata[6];
        $$nickdata{'lines_msg'}       = $nickdata[7];
        $$nickdata{'id'}              = $nickdata[8];
        $$nickdata{'statistika'}      = $nickdata[9];
        $$nickdata{'sys'}             = $nickdata[12];
        $$nickdata{'show_img'}        = $nickdata[13];
        $$nickdata{'color_nik'}       = $nickdata[14];
        $$nickdata{'html_java'}       = $nickdata[15];
        $$nickdata{'body'}            = $nickdata[16];
        $$nickdata{'ignor'}           = $nickdata[17];

        $nickpassword = "yes"; # Пароль соответствует
      }
      print NICKFILE2 join('|', @nickdata)."\n";
    } else {
      print NICKFILE2;
    }
  }
  &file_close_rw("$data_dir/$data_nicks", "NICKFILE");

  # Проверяем на наличие в базе данных старых ников запрашиваемого Ника, и если такой существует - проверяем пароль
  if ($nickok ne "yes") {

      if (-e "$data_dir/$data_oldnicks") {
      &file_open_rw("$data_dir/$data_oldnicks", "OLDNICKFILE");
        while (<OLDNICKFILE>) {
          if (/^\Q$query{'name'}\E\|/) {
            chomp;
            my @oldnickdata = split(/\|/);

            $nickok = "yes";  # Ник соответствует

            if ($oldnickdata[1] eq $query{'password'}) {  # check pwd

              # обновляем время последнего визита в чат, ID, IP
              $oldnickdata[4]  = $timestamp;
              $oldnickdata[8]  = time.$$.int(rand(999)).chr(int(rand(26)+97));
              $oldnickdata[9]  = &statistika($oldnickdata[9], "vhod");
              $oldnickdata[11] = $ENV{'REMOTE_ADDR'};

              $oldnickdata[5]  = $updatefrequency;
              $oldnickdata[6]  = $standard  if (!$oldnickdata[6]);
              $oldnickdata[7]  = $message_public;
              $oldnickdata[16] = $body  if (!$oldnickdata[16]);

              $$nickdata{'name'}            = $oldnickdata[0];
              $$nickdata{'password'}        = ""; # есть пароль
              $$nickdata{'registertime'}    = $oldnickdata[3];
              $$nickdata{'updatefrequency'} = $oldnickdata[5];
              $$nickdata{'color'}           = $oldnickdata[6];
              $$nickdata{'lines_msg'}       = $oldnickdata[7];
              $$nickdata{'id'}              = $oldnickdata[8];
              $$nickdata{'statistika'}      = $oldnickdata[9];
              $$nickdata{'sys'}             = $oldnickdata[12];
              $$nickdata{'show_img'}        = $oldnickdata[13];
              $$nickdata{'color_nik'}       = $oldnickdata[14];
              $$nickdata{'html_java'}       = $oldnickdata[15];
              $$nickdata{'body'}            = $oldnickdata[16];
              $$nickdata{'ignor'}           = $oldnickdata[17];

              # Записываем данные в основную базу данных Ников
              open(NICKFILE, ">>$data_dir/$data_nicks") or &error("::open data_nicks file::");
              flock(NICKFILE, 2) if ($flocking);
                print NICKFILE join('|', @oldnickdata)."\n";
              close NICKFILE;

              # запись в лог - перерегистрация
              &create_file("$log_dir/$log_file_error", "$query{'name'} - удачное Обращение к OldNicks файлу при входе (перерегистрация)- $date на $time ($ENV{'REMOTE_ADDR'}) \n") if ($logtype);

              $nickpassword = "yes";  # Пароль соответствует
            }
            print OLDNICKFILE2 join('|', @oldnickdata)."\n"  if ($nickpassword ne "yes");  # Удаляем данные по Нику из $data_oldnicks (предварительно перенеся их в $data_nicks)
          } else {
            print OLDNICKFILE2;
          }
        }
      &file_close_rw("$data_dir/$data_oldnicks", "OLDNICKFILE");
      }
  }


Это сообщение отредактировал(а) LeeFORT - 21.3.2012, 18:58
PM MAIL   Вверх
ginnie
Дата 21.3.2012, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 4
Всего: 49



Из описания неясно, с чем помочь?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
LeeFORT
Дата 21.3.2012, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(ginnie @ 21.3.2012,  16:34)
Из описания неясно, с чем помочь?

У меня вход с главной страницы ЧАТА не получается без ввода пароля.
я хочу сделать пошагово:
Сначала НИК если нет пароля, то уже в чате но если стоит пароль, то будт добр вводи пароль



Это сообщение отредактировал(а) LeeFORT - 21.3.2012, 18:58
PM MAIL   Вверх
ginnie
Дата 22.3.2012, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 4
Всего: 49



LeeFORT, я правильно понял, что Вы хотите, чтобы кто-то вместо Вас это сделал?
Если ошибаюсь, то что именно не получается?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
LeeFORT
Дата 22.3.2012, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ginnie, я бы не отказался. Даже фрилансеров ищу >> тут <<

Но честно говоря. Мне бы понять хотелось, вот в чём интерес.

Я вторые сутки убиваю на то, что бы понять, но не могу. потому, что Perl-a не знаю.
Вот и ищу, что бы меня носом ткнули и пояснили (как в школе) или на мысль навели. Ну не знаю.
Я считаю, что для этого форумы и существуют!

Верстал хтмл-ом главную странцу. Всё работает, а сделать так, что бы сначала ник вбивать
user posted image

идёт проверка на наличие ника в списках..... Ага есть такой ник и он требует пароля и вуаля......

а потом пароль

user posted image

Не получается!!!

а то у меня на данный момент
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




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


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

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