Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.131.168] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте, помогите подкорректировать скрипт.
Скрипт должен при правильном вводе пароля и логина из БД выдавать "Добро пожаловать", иначе "неверные логин и/или пароль" При работе с БД все отлично работает, но при вводе пустых значений(логина и/или пароля) тоже срабатывает на "Добро пожаловать" В чем прорблема? #!/usr/bin/perl print "Content-type:text/html\n\n"; use DBI; print "<html>"; print "<title> "; print "Авторизация"; print "</title>"; print "<head> "; print "<h1><i>Проверка данных</i></h1> "; print "</head> "; print "<body>"; $string=$ENV{'QUERY_STRING'}; @line=split(/&/,$string); print "<br>"; foreach $item (@line) { ($n, $val)=split(/=/,$item); if ($n eq "log"){ $name=$val; } if ($n eq "pas"){ $pasw=$val; } } $dbh=DBI->connect("DBI:mysql:test","","") || print "Connect ERROR"; $sth=$dbh->prepare("SELECT `id` FROM `login` WHERE `name`='$name';") || print "ERROR PREPARE!!!"; $sth->execute || print "ERROR EXE"; @base=$sth->fetchrow(); $id=@base[0]; $sth=$dbh->prepare("SELECT `pas` FROM `pas` WHERE `id`='$id';") || print "ERROR PREPARE!!!"; $sth->execute || print "ERROR EXE"; @base=$sth->fetchrow(); $pas=@base[0]; $sth=$dbh->prepare("SELECT `pas.pas` FROM `pas` ;") || print "ERROR PREPARE!!!"; if ($pas==$pasw) { print " Здравствуйте, $name! Авторизация произведена успешно! <br>\n"; } else { print " Неверный логин или пароль! <br>\n"; } print "</body>"; print "</html>"; $sth->finish; $dbh->disconnect; Форма <html> <title> Авторизация </title> <head> <h1><i>Авторизация</i></h1> </head> <body> <i>Для входа в систему введите логин и пароль.</i> <br><br> <PRE> <form action=http://localhost/cgi-bin/mybase.cgi> Логин: <input type=text name=log><br> Пароль: <input type=password name=pas><br><br> <input type=submit> </pre> </body> </html> Сама БД(данные) CREATE DATABASE `test` ; CREATE TABLE login(id int, name varchar(30)); INSERT INTO login (id, name) values ("1", "adm"); INSERT INTO login (id, name) values ("2", "user"); INSERT INTO login (id, name) values ("3", "user1"); CREATE TABLE pas(id int, pas int); INSERT INTO pas(id, pas) values ("1", "000"); INSERT INTO pas(id, pas) values ("2", "111"); INSERT INTO pas(id, pas) values ("3", "222"); помогите пожалуйста( (прикреплено то же самое) Прикреплённый файл____.rar (1,29 Кбайт, скачиваний: 234) |
Сообщ.
#2
,
|
|
|
Бредово и глупо, но суть понятна должна быть.
chomp $id; chomp $name; chomp $pas; chomp $pasw; my $o; $o = length( $name ); if( $o == 0 ){ print "Ololo! Name is not entered!\n"; } Проверьте на длину свои переменные после чомпа (chomp), если длина равна нулю, то... |
Сообщ.
#3
,
|
|
|
Спасибо, у меня получилось!)
Только теперь вот нужно сделать, так, чтобы при успешной авторизации, выходило сообщение "Неверный логин и/или пароль" (типа обманывалка) и снова выходила форма для авторизации, но на этот раз в случае правильного ввода, чтоб появлялось сообщение "Добро пожаловать", а иначе "Неверный логин и/или пароль" Пытаюсь сделать, но только запутываюсь все больше и больше Помогите. Кстати, вот правильный .cgi для авторизации=> #!/usr/bin/perl print "Content-type:text/html\n\n"; use DBI; $dbh=DBI->connect("DBI:mysql:test","","") or print "Error connect base"; use CGI; my $q=CGI->new; $step1=$q->param ("step1"); if ($step1) { $login=$q->param('login'); $pas=$q->param('pas'); $a=$dbh->prepare("SELECT login.id FROM login,pas where login.name=\"".$login."\" and pas.pas=\"".$pas."\" and login.id=pas.id;"); $a->execute; $id=$a->fetchrow(); if ($id) { print "Добро пожаловать" } else { print "Неверный логин или пароль <form> <input type=hidden name=step1 value=yes> <br> Логин <input type=text name=login> <br> Пароль <input type=text name=pas> <br> <input type=submit> </form>";}; } else { print "<form> <input type=hidden name=step1 value=yes> <br> Авторизация <br> Логин <input type=text name=login> <br> Пароль <input type=text name=pas> <br> <input type=submit> </form>"; } |
Сообщ.
#4
,
|
|
|
Не уследил логики, но примерно вот так:
#!/usr/bin/perl print "Content-type:text/html\n\n"; use DBI; $dbh=DBI->connect("DBI:mysql:test","","") or print "Error connect base"; use CGI; my $flag = 0; my $q=CGI->new; $step1=$q->param ("step1"); if( $flag == 0){ $login=$q->param('login'); $pas=$q->param('pas'); $a=$dbh->prepare("SELECT login.id FROM login,pas where login.name=\"".$login."\" and pas.pas=\"".$pas."\" and login.id=pas.id;"); $a->execute; $id=$a->fetchrow(); if( $id ){ print "Добро пожаловать"; $flag = 1; } else{ print "Неверный логин или пароль <form> <input type=hidden name=step1 value=yes> <br> Логин <input type=text name=login> <br> Пароль <input type=text name=pas> <br> <input type=submit> </form>";}; } else{ print "<form> <input type=hidden name=step1 value=yes> <br> Авторизация <br> Логин <input type=text name=login> <br> Пароль <input type=text name=pas> <br> <input type=submit> </form>"; } |
Сообщ.
#5
,
|
|
|
Nadz Goldman, эмммм что-то не так((
при первом же вводе успешно авторизовывается и пишет "Добро пожаловать" По-моему это получился тот же скрипт,что и был, просто иначе написанный |
Сообщ.
#6
,
|
|
|
Ну так местами поменяйте флаг и всё будет.
|
Сообщ.
#7
,
|
|
|
Nadz Goldman
не поняла в смысле значения нуля и единицы что ли? #!/usr/bin/perl print "Content-type:text/html\n\n"; use DBI; $dbh=DBI->connect("DBI:mysql:test","","") or print "Error connect base"; use CGI; my $flag = 0; my $q=CGI->new; $step1=$q->param ("step1"); if( $flag == 1){ $login=$q->param('login'); $pas=$q->param('pas'); $a=$dbh->prepare("SELECT login.id FROM login,pas where login.name=\"".$login."\" and pas.pas=\"".$pas."\" and login.id=pas.id;"); $a->execute; $id=$a->fetchrow(); if( $id ){ print "Добро пожаловать"; $flag = 0; } else{ print "Неверный логин или пароль <form> <input type=hidden name=step1 value=yes> <br> Логин <input type=text name=login> <br> Пароль <input type=text name=pas> <br> <input type=submit> </form>";}; } else{ print "<form> <input type=hidden name=step1 value=yes> <br> Авторизация <br> Логин <input type=text name=login> <br> Пароль <input type=text name=pas> <br> <input type=submit> </form>"; } |
Сообщ.
#8
,
|
|
|
В смысле логику сами уже определите где вам флаг выставлять и проверять. А то без комментариев в коде разбираться лениво.
|
Сообщ.
#9
,
|
|
|
Пытаюсь написать...по логике вроде построено правильно, но почему-то при втором разе ввода правильного пароля выдает не "добро подаловать", а заново "авторизация". Что я упустила??
#!/usr/bin/perl print "Content-type:text/html\n\n"; use DBI; $dbh=DBI->connect("DBI:mysql:test","","") or print "Error connect base"; use CGI; my $q=CGI->new; $step1=$q->param ("step1"); $step2=$q->param ("step2"); if ($step1) { $login=$q->param('login'); $pas=$q->param('pas'); $a=$dbh->prepare("SELECT login.id FROM login,pas where login.name=\"".$login."\" and pas.pas=\"".$pas."\" and login.id=pas.id;"); $a->execute; $id=$a->fetchrow(); if ($id) { if ($step2) { $login=$q->param('login'); $pas=$q->param('pas'); $a=$dbh->prepare("SELECT login.id FROM login,pas where login.name=\"".$login."\" and pas.pas=\"".$pas."\" and login.id=pas.id;"); $a->execute; $id=$a->fetchrow(); if ($id) { print "Добро пожаловать" } else { print "Неверный логин или пароль <form> Логин <input type=text name=login> <br> Пароль <input type=text name=pas> <br> <input type=submit> </form>"; } } else { print "Неверный логин или пароль <form> <input type=hidden name=step2 value=yes> Логин <input type=text name=login> <br> Пароль <input type=text name=pas> <br> <input type=submit> </form>"; } } else { print "Неверный логин или пароль <form> Логин <input type=text name=login> <br> Пароль <input type=text name=pas> <br> <input type=submit> </form>"; } } else { print "<form> <input type=hidden name=step1 value=yes> <br> Авторизация <br> Логин <input type=text name=login> <br> Пароль <input type=text name=pas> <br> <input type=submit> </form>"; } |
Сообщ.
#10
,
|
|
|
Я имею ввиду вот что.
Вынести форму в подпрограмму: #!/usr/bin/perl print "Content-type:text/html\n\n"; use DBI; use CGI; my $step = 0; $dbh=DBI->connect("DBI:mysql:test","","") or print "Error connect base"; my $q=CGI->new; if ($step == 0) { $login=$q->param('login'); $pas=$q->param('pas'); $a=$dbh->prepare("SELECT login.id FROM login,pas where login.name=\"".$login."\" and pas.pas=\"".$pas."\" and login.id=pas.id;"); $a->execute; $id=$a->fetchrow(); if ($id) { print "Добро пожаловать"; myForm(); $step = 1; } else { print "Неверный логин или пароль"; myForm(); } if( $step == 1 ){ if ($id) { print "Добро пожаловать"; myForm(); $step = 1; } else { print "Неверный логин или пароль"; myForm(); } sub myForm{ print " <form> Логин <input type=text name=login> <br> Пароль <input type=text name=pas> <br> <input type=submit> </form>"; } Примерно так. Логику исполнения думайте сами. |
Сообщ.
#11
,
|
|
|
Nadz Goldman, ааа сейчас попробую...
извините, мы только только perl начали изучать, так что все тяжело дается |
Сообщ.
#12
,
|
|
|
получилось получилось!!!!!!!!1
|
Сообщ.
#13
,
|
|
|
Вот и замечательно.
Вы бы еще конечный код показали бы, а то вдруг кому-то тоже нужно будет =) |