Forum Webscript.Ru

Программирование => Perl => Тема начата: DimoninG от 19 Мая 2004, 16:08:18

Название: Создание скрипта регистрации и проверка при входе
Отправлено: DimoninG от 19 Мая 2004, 16:08:18
Есть файл с логинами паролями. Записываются с новой строки:

Логин
Пароль

Логин
Пароль

и т.п.

Для того, чтобы сравнить введенные пользователем данные в поля ввода со строками из файла, я читаю их (верх логики, блин) таким образом:

open FILE, "<", "users.base";
   $nic = ;
   $pass = ;
close (FILE);

Только вот эта конструкция:
if ($ff{nic} ne $nic or $ff{pass} ne $pass){
}

Все время себя знать дает. По какой такой причине строки разные выходят (хотя они эдентичны)?.. Скрипт целиком:

-----------------------
#!perl
   $form_data = $ENV{\'QUERY_STRING\'};
   $form_data =~ s/%(..)/pack ("C", hex($1))/eg;
   $form_data =~ tr/+/ /;
   @pairs = split (/&/, $form_data);
   
   foreach $pair (@pairs)
   {
      ($name, $value) = split (/=/, $pair);
      $ff{$name}=$value;
   }

   $nic = "d";
   open FILE, "<", "users.base";
      $nic = ;
      $pass = ;
   close (FILE);


   if ($ff{nic} ne $nic or $ff{pass} ne $pass){
   print "Content-type:text/html\\n\\n";
   print "\\n\\n  Ошибка входа!\\n\\n\\n\\n";
   print "\\nНеправильный логин/пароль. Попробуйте снова

";
print "\\n";
   }

   else{

   print "Content-type:text/html\\n\\n";
   print "\\n\\n  Вход выполнен.\\n\\n\\n\\n";
   print "Вход выполнен. ";
   }
-----------------------

Зато, если после прочтения из файла сделать $nic = "DimoninG"; $pass = "fuckoff"; к примеру и в поля ввода ввести это же самое - все работает...

И еще. Скрипт, который проводит регистрацию:

---------------------
#!perl
   $form_data = $ENV{\'QUERY_STRING\'};
   $form_data =~ s/%(..)/pack ("C", hex($1))/eg;
   $form_data =~ tr/+/ /;
   @pairs = split (/&/, $form_data);
   
   foreach $pair (@pairs)
   {
      ($name, $value) = split (/=/, $pair);
      $ff{$name}=$value;
   }

#

   if ($ff{nic} eq 0 or $ff{name} eq "" or $ff{pol} eq "" or $ff{age} == "" or $ff{email} eq "" or $ff{living} eq ""){


   print "Content-type:text/html\\n\\n";
   print "\\n\\n  Ошибка регистрации!\\n\\n\\n\\n";

   print "\\nВы не ввели данные в одно из необходимых полей или заполнили его неправильно. Попробуйте снова\\n";
      
   }
   else{

   print "Content-type:text/html\\n\\n";
   print "\\n\\n  Вы зарегистрированы!\\n\\n\\n\\n";

   print "Ваш ник-нейм: $ff{nic}
";
   print "Ваш пароль: $ff{pass}
";
   print "Ваше имя: $ff{name}
";
   print "Ваш ящик: $ff{email}
\\n\\n";
   print "Ваш пол: $ff{pol}
\\n\\n";
   print "Ваш возраст: $ff{age}
\\n\\n";
   print "Ваше место проживания: $ff{living}

\\n\\n";


   print "\\nРегистрация прошла успешно и вы добавлены в список участников. Поздравляем.";
   print "Теперь вы можете автоизироваться.\\n";
   
        open(FILE, ">>users.base") || die "Can\'t open file!";
      print FILE "$ff{nic}\\n";
      print FILE "$ff{pass}\\n";
      print FILE "$ff{name}\\n";
      print FILE "$ff{email}\\n";
      print FILE "$ff{pol}\\n";
      print FILE "$ff{age}\\n";
      print FILE "$ff{living}\\n\\n";
        close(FILE);
   }
--------------------------
Название: Создание скрипта регистрации и проверка при входе
Отправлено: DimoninG от 19 Мая 2004, 16:10:06
Возможно, что непонятно - чего это мне надо-то?.. Дело в том, что при регистрации и входе я указываю один и тот же логин/пароль, но вход не получается, хотя в файлах записано все верно и ввожу при входе тоже верно.
Название: Создание скрипта регистрации и проверка при входе
Отправлено: commander от 19 Мая 2004, 16:13:09
ну на первый взгляд... :
1. use strict;
2. use CGI;
3. use HTML::Template;
4. Зачем хранить инфу о юзерах в файле? нет БД?
Название: Создание скрипта регистрации и проверка при входе
Отправлено: DimoninG от 19 Мая 2004, 16:21:17
БД нет, т.к. я с этим не умею работать.:confused:
Название: Создание скрипта регистрации и проверка при входе
Отправлено: commander от 19 Мая 2004, 16:26:12
DimoninG
Дак она есть или ты просто с ней не умеешь работать? если она есть, то поверь знаемущему человеку проще научиться с ней работать чем заморачиваться в файлами... :)
"Лучше пол дня потерять зато за пол-часа долететь"
Название: Создание скрипта регистрации и проверка при входе
Отправлено: Chs от 19 Мая 2004, 18:13:05
лол
perldoc -f chomp
Название: Создание скрипта регистрации и проверка при входе
Отправлено: commander от 19 Мая 2004, 18:15:11
Chs
Цитировать
лол

и что ты этим хотел сказать?
Название: Создание скрипта регистрации и проверка при входе
Отправлено: DimoninG от 19 Мая 2004, 18:31:13
Это форум разработчиков скриптов?.. Я не ошибся?.. Мне вообще кто-нибудь поможет?..
Почему у меня строки, записанные в файл и считанне из него же не совпадают?! Единственный нормальный человек, который мне хоть что-то посоветовал и не послал сразуже - это commander...
Название: Создание скрипта регистрации и проверка при входе
Отправлено: NeoNox от 19 Мая 2004, 18:34:08
commander да то что не стоит если у человека обычная простуда лечить его ядами. Насколько я знаю, это только в РНР принято человеку только начавшему изучать язык, сразу в руки давать реляционную БД и заставлять учить два языка вместо одного. Да и гостевые книги на оракле не пишутся. Постарайся постигнуть это.
Название: Создание скрипта регистрации и проверка при входе
Отправлено: NeoNox от 19 Мая 2004, 18:35:16
DimoninG а ты их вывести на экран можеш и посмотреть что у тебя не так? и сделай то что тебе
Chs посоветовал.
Название: Создание скрипта регистрации и проверка при входе
Отправлено: NeoNox от 19 Мая 2004, 18:38:56
Кстати и где ты видел такую конструкцию?
$nic = ;
$pass = ;
что она делать должна?
Название: Создание скрипта регистрации и проверка при входе
Отправлено: DimoninG от 19 Мая 2004, 18:49:11
Видел такую конструкцию в "Учебник по программированию на Perl для учащихся вузов бла бла бла". Эта штука должна читать строку. И она, заметь, ее читает. Только тут другое: При выводе на экран после логина (например) стоит пробел, только эту тоже фигня, т.к. если при входе ввести имя и пробел лишний поставить - не прокатывает, скотина. Я вот и думаю, что у тем неправильно...

Кстати, я не понял, что мне Chs посоветовал и куда это вообще надо писать... (Ногами больно не пинать - учу Перл второй день).
Название: Создание скрипта регистрации и проверка при входе
Отправлено: NeoNox от 19 Мая 2004, 18:56:04
Вот тебе твой пример с другой стороны:
#!/usr/bin/perl

$pass=;
$login=;
$login2=;

print $pass,$login,$login2;
__DATA__
login1
pass1

login2
pass2


$login2 будет пустой, понятно почему?
Название: Создание скрипта регистрации и проверка при входе
Отправлено: NeoNox от 19 Мая 2004, 18:57:15
DimoninG О perldoc в учебнике по программированию ничего не сказано?
Название: Создание скрипта регистрации и проверка при входе
Отправлено: DimoninG от 19 Мая 2004, 19:50:41
о perldoc - ничего

Пустой будет, т.к. третья строка пуста, но мы читаем все подряд?.. Если я прав (или даже не прав) - это тут ни причем, т.к. я только одного пользователя создаю... То есть, если четко сформулировать вопрос: если одну и ту же информацию записать в файл, а потом прочитать - получаем разные данные!

Если есть пример с регистрациями - дайте ссылку (на сам cgi). Может - поможет.
Название: Создание скрипта регистрации и проверка при входе
Отправлено: Chs от 19 Мая 2004, 20:13:01
Цитировать
То есть, если четко сформулировать вопрос: если одну и ту же информацию записать в файл, а потом прочитать - получаем разные данные!

Данные будут такие же какие записаны.
Ты пишешь данные с концом строи и считываешь с концом строки.
Так понятно?
perldoc -f chomp
Название: Создание скрипта регистрации и проверка при входе
Отправлено: Phoinix от 20 Мая 2004, 09:51:58
Chs
IMHO он просто пропустил момент записи в файл при пререписывании примера из учебника:
DimoninG
И как дополнение к совету Chs
Цитировать
...
open(FILE, ">>users.base") || die "Can\'t open file!";
print FILE "$ff{nic}\\n";
print FILE "$ff{pass}\\n";
print FILE "$ff{name}\\n";
print FILE "$ff{email}\\n";
...


"$ff{email}\\n" != "$ff{email}"

Считывается, как ни странно ;), именно то что ты записал...