Forum Webscript.Ru
Программирование => Perl => Тема начата: 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);
}
--------------------------
-
Возможно, что непонятно - чего это мне надо-то?.. Дело в том, что при регистрации и входе я указываю один и тот же логин/пароль, но вход не получается, хотя в файлах записано все верно и ввожу при входе тоже верно.
-
ну на первый взгляд... :
1. use strict;
2. use CGI;
3. use HTML::Template;
4. Зачем хранить инфу о юзерах в файле? нет БД?
-
БД нет, т.к. я с этим не умею работать.:confused:
-
DimoninG
Дак она есть или ты просто с ней не умеешь работать? если она есть, то поверь знаемущему человеку проще научиться с ней работать чем заморачиваться в файлами... :)
"Лучше пол дня потерять зато за пол-часа долететь"
-
лол
perldoc -f chomp
-
Chs
лол
и что ты этим хотел сказать?
-
Это форум разработчиков скриптов?.. Я не ошибся?.. Мне вообще кто-нибудь поможет?..
Почему у меня строки, записанные в файл и считанне из него же не совпадают?! Единственный нормальный человек, который мне хоть что-то посоветовал и не послал сразуже - это commander...
-
commander да то что не стоит если у человека обычная простуда лечить его ядами. Насколько я знаю, это только в РНР принято человеку только начавшему изучать язык, сразу в руки давать реляционную БД и заставлять учить два языка вместо одного. Да и гостевые книги на оракле не пишутся. Постарайся постигнуть это.
-
DimoninG а ты их вывести на экран можеш и посмотреть что у тебя не так? и сделай то что тебе
Chs посоветовал.
-
Кстати и где ты видел такую конструкцию?
$nic = ;
$pass = ;
что она делать должна?
-
Видел такую конструкцию в "Учебник по программированию на Perl для учащихся вузов бла бла бла". Эта штука должна читать строку. И она, заметь, ее читает. Только тут другое: При выводе на экран после логина (например) стоит пробел, только эту тоже фигня, т.к. если при входе ввести имя и пробел лишний поставить - не прокатывает, скотина. Я вот и думаю, что у тем неправильно...
Кстати, я не понял, что мне Chs посоветовал и куда это вообще надо писать... (Ногами больно не пинать - учу Перл второй день).
-
Вот тебе твой пример с другой стороны:
#!/usr/bin/perl
$pass=;
$login=;
$login2=;
print $pass,$login,$login2;
__DATA__
login1
pass1
login2
pass2
$login2 будет пустой, понятно почему?
-
DimoninG О perldoc в учебнике по программированию ничего не сказано?
-
о perldoc - ничего
Пустой будет, т.к. третья строка пуста, но мы читаем все подряд?.. Если я прав (или даже не прав) - это тут ни причем, т.к. я только одного пользователя создаю... То есть, если четко сформулировать вопрос: если одну и ту же информацию записать в файл, а потом прочитать - получаем разные данные!
Если есть пример с регистрациями - дайте ссылку (на сам cgi). Может - поможет.
-
То есть, если четко сформулировать вопрос: если одну и ту же информацию записать в файл, а потом прочитать - получаем разные данные!
Данные будут такие же какие записаны.
Ты пишешь данные с концом строи и считываешь с концом строки.
Так понятно?
perldoc -f chomp
-
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}"
Считывается, как ни странно ;), именно то что ты записал...