(Perl) Авторизация

Anna85
Дата: 28.08.2006 09:25:22
Код программы раюотает не адекватно, при авторизации под одним именем программа должна оказываться на одной странице, при авторизации под другим на другой. У меня в не зависимости под каким именем авторизировались мы оказываемся на одной и той же странице.
Anna85
Дата: 28.08.2006 09:30:14
Это описание самой кнопки:

<p align="center"><strong>Регистрация пользователя:</strong></p>
<p align="left">Пожалуйста введите ваше имя и пароль:</p>
<FORM NAME="mainform" ACTION="/cgi-bin/test.pl" METHOD="get">

<table align="left" cellspacing="10" cellpadding="10" border="0">
<tr>
	<td>Имя:
	  <select name="name">
EOT

$sth = $dbh->prepare("SELECT * FROM people") or die "Cannot prepare: " . $dbh->errstr();
$sth->execute() or die "Cannot execute: " . $sth->errstr();
while ( $row = $sth->fetchrow_hashref )
  {
    $t = $row->{'NAME'};
    print "<OPTION>$t</OPTION>";
  }

print <<"EOT";	    
	  </select>
	</td>
	<td>Пароль:<INPUT NAME="password" TYPE="password" SIZE="10%"></td>
</tr>
</table>
  <br><br><br>

  <p align="left"> Для начала авторизации нажмите "Следующий шаг"</p>
   <input type="submit" value="Следующий шаг">
</form>

А вот авторизация:

use CGI;
my $Query = new CGI;


my $Name = "Администратор";
my $Password = "1024post";

if ( defined $Password )
{
          open (people,"$syslog");
	  while( <people> ) {
		chomp;
		
		my @Fields = split( /\,/ );
		
		if( $Fields[2] eq "$Name" && $Fields[3] eq "$Password" )
		{
			if ( $Fields[2] eq "Пользователь" )
			{
				print $Query->redirect("c:/www/cgi-bin/filtr.pl");
				$Login = 1;
			}
			elsif ( $Fields[2] eq "Администратор" )
			{
				print $Query->redirect("c:/www/cgi-bin/test.pl");
				$Login = 1;
			}
		}
	}
	close ( people );
}
g613
Дата: 28.08.2006 10:03:55
...вообще уже говорили ранее, что в перле массив начинает нумероваться с нуля ( по умолчанию ), так, что если верить приведенным вами чуть ранее данным имя пользователя таки содержится в $Fields[1]... если не помогает то..., а кодировки скрипта и хранилища этих самых логинов-паролей совпадают ?
Anna85
Дата: 28.08.2006 10:08:09
да совпадают, у меня в файле people 3 ID,NAME,PASSWORD, так что поле 2 у меня как раз и есть name, а поле 3 password
Black
Дата: 28.08.2006 10:14:17
Anna85
да совпадают, у меня в файле people 3 ID,NAME,PASSWORD, так что поле 2 у меня как раз и есть name, а поле 3 password

Я Вам 3 раз объясняю, индексирование массива начинается с НУЛЯ
g613
Дата: 28.08.2006 10:16:06
Anna85
да совпадают, у меня в файле people 3 ID,NAME,PASSWORD, так что поле 2 у меня как раз и есть name, а поле 3 password


млин....
покажи пожалуйста, что выведит этот код...( только $syslog проиницализируй сама )
open (people,"$syslog") || die $!;
while (<people>) {
  print $_;
}
Anna85
Дата: 28.08.2006 10:21:36
Вот что вывело:


ID,NAME,PASSWORD 1,Пользователь,123 2,Администратор,456
Black
Дата: 28.08.2006 10:25:37
Anna85
Вот что вывело:


ID,NAME,PASSWORD 1,Пользователь,123 2,Администратор,456

А теперь наконец-то делаем, что Вам говорят!

p.s. Имя пользователя будет -> $Fields[1] ( повторяю последний раз )
Anna85
Дата: 28.08.2006 10:34:12
Извините, дуру, все поняла и исправила, но проблемы это не решило,
при авторизации пользователя "Администратор", программа не
переходит на страницу filtr.pl

#!c:/perl/bin/perl             
#!/usr/bin/perl

$Root = "c:/www";

use CGI;
use DBI;

$Query = new CGI;
$syslog="c:/www/data/people";
$syslogg="c:/www/data/document";
$Query->charset('koi8-r');
print $Query->header;

            

sub PrintMainForm()
{
  print <<"EOT";
  <FORM NAME="mainform" ACTION="$Foto" METHOD="post" ENCTYPE="multipart/form-data">
    <INPUT name="sessionid" type="hidden" value="$SessionId">
    <INPUT name="direction" type="hidden" value="">
    <INPUT name="victim" type="hidden" value="">
   <input type="hidden" name="enter" value="1">
   <input type="submit" value="Enter">

EOT


}            




CheckTables();






use CGI;
my $Query = new CGI;


my $Name = "Администратор";
my $Password = "1024post";

if ( defined $Password )
{
          open (people,"$syslog");
	  while( <people> ) {
		chomp;
		
		my @Fields = split( /\,/ );
		
		if( $Fields[1] eq "$Name" && $Fields[2] eq "$Password" )
		{
			if ( $Fields[1] eq "Пользователь" )
			{
				print $Query->redirect("c:/www/cgi-bin/filtr.pl");
				
			}
			elsif ( $Fields[1] eq "Администратор" )
			{       
				print $Query->redirect("c:/www/cgi-bin/test.pl");
				
			}
		}
	}
	close ( people );
}

    


print <<"EOT";
<body  background="c:/www/cgi-bin/pic/02.jpg">
<table align="center" cellspacing="0" cellpadding="0" border="0">
<tr>
	<td><img src="c:/www/cgi-bin/pic/111.gif"></td>
	<td><img src="c:/www/cgi-bin/pic/12.gif"></td>
	<td><img src="c:/www/cgi-bin/pic/13.gif"></td>
	<td><img src="c:/www/cgi-bin/pic/14.gif"></td>
</tr>
<tr>
	<td colspan="3"></td>
	<td><img src="c:/www/cgi-bin/pic/24.gif"></td>
</tr>
<tr>
<td colspan="4" height="80%" align="left">

<br>
<p align="center"><strong>Регистрация пользователя:</strong></p>
<p align="left">Пожалуйста введите ваше имя и пароль:</p>
<FORM NAME="mainform" ACTION="/cgi-bin/test.pl" METHOD="get">

<table align="left" cellspacing="10" cellpadding="10" border="0">
<tr>
	<td>Имя:
	  <select name="name">
EOT

$sth = $dbh->prepare("SELECT * FROM people") or die "Cannot prepare: " . $dbh->errstr();
$sth->execute() or die "Cannot execute: " . $sth->errstr();
while ( $row = $sth->fetchrow_hashref )
  {
    $t = $row->{'NAME'};
    print "<OPTION>$t</OPTION>";
  }

print <<"EOT";	    
	  </select>
	</td>
	<td>Пароль:<INPUT NAME="password" TYPE="password" SIZE="10%"></td>
</tr>
</table>
  <br><br><br>

  <p align="left"> Для начала авторизации нажмите "Следующий шаг"</p>
   <input type="submit" value="Следующий шаг">
</form>  
</td>
</tr>
</table>



</body>
EOT


 





sub CheckTables()
{
  %Tables = 
    (
      org => "id integer, name char(255), inn char(12)",
      people => "id integer, name char(255), password char(255)",
      document => "num integer, input_num_doc char(255), date_post char(6), num_doc char(12), num_doc_in_eerd char(12), predmet char(255), srok char(6), yslov_af_prolong char(255), srok_prolong char(6), protokol char(255), type_doc char(255), vid_doc char(255), plane_platezhei char(255), price_doc char(255), num_dopolnit_sogl char(255), statys_doc char(255), primechanie char(255)",
    );

  $dbh = DBI->connect("DBI:CSV:f_dir=$Root/data") or die "Cannot connect: " . $DBI::errstr;

  foreach $table ( keys %Tables )
    {
      unless( -r "$Root/data/$table" )
        {
          $sth = $dbh->prepare("CREATE TABLE $table ($Tables{$table})") or die "Cannot prepare: " . $dbh->errstr();
          $sth->execute() or die "Cannot execute: " . $sth->errstr();
          $sth->finish();
        }
    }
}
  
Black
Дата: 28.08.2006 10:37:26
Модератор: Предупреждение!
Пожалуйста прочитайте правила форума.
Правила форума
Старайтесь приводить код не более 20 строчек, либо только необходимые блоки, никому не интересно читать HTML код, если вопрос был, например, по массивам.
Подчеркивайте, в каком месте кода, появляется ошибка.