Napisał
TQM
Wybacz jesli czujesz ze Ci ublizam, nie o to mi chodzi. Podales po prostu pytanie pomijajac glowne detale - wrozek tutaj nie ma. Np wyciales z komunilatu numer linii, wiec nie dajesz nam nawet szansy na udzielenie odpowiedzi.
Linia:
Kod:
if ($value eq $Mail) {return 1;}
Nie wiem dlaczego Perl mowi ze uzywasz $Mail[0] skoro nie uzywasz, ale za to uzywasz niezdefiniowanej zmiennej $value, chyba ze brakuje jeszcze jakiegos innego kawalku kodu. Na razie traktuj moja odpowiedz jako zgadywanke.
Eh cholera, gdzieś mi to $value uciekło, ale przez to testowałem to na milion sposobów. Nie mam już tamtego kodu, mam nowszą wersję, bardziej już użyteczną.
Moduł
Kod:
package Own::database;
use locale;
use strict;
use warnings;
use CGI ':standard';
use Spreadsheet::ParseExcel;
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(check_base);
sub check_base {
my($Mail, $Haslo) = @_;
my $q = new CGI;
my $parser = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse('baza.xls');
if ( !defined $workbook ) {
die $parser->error(), ".\n";
}
my $worksheet = $workbook->worksheet(0);
my $pomocnicza=0;
my ( $row_min, $row_max ) = $worksheet->row_range();
for my $row ( $row_min .. $row_max ) {
if ($row == $row_max) {$pomocnicza=1};
my $cell = $worksheet->get_cell($row, 0);
my $value = $cell->value();
if ($value eq $Mail) {
my $cell = $worksheet->get_cell( $row, 1);
my $value = $cell->value();
if ($value eq $Haslo) {
return 1;
last;
}
}
else {
return 0;
}
}
}
1;
Skrypt
Kod:
#!C:\Strawberry\perl\bin\perl -w
use locale;
use strict;
use warnings;
use CGI ':standard';
use Spreadsheet::ParseExcel;
use Own::database;
my $q = new CGI;
my $Mail = $q->param('mail');
my $Haslo = $q->param('haslo');
my $checked = check_base($Mail, $Haslo);
if ($checked) {
print redirect('http://localhost/zalogowano.html');
}
else {
print header(-type=>"text/html; charset=ISO-8859-2");
print start_html(-title=>'Organizer',
-lang=>'pl-PL',
-encoding=>'ISO-8859-2');
print '<form action="/cgi-bin/logowanie.cgi" method="post">';
print 'Adres e-mail: ';
print '<br>';
print textfield(-name=>'mail',
-size=>15,
-maxlength=>30);
print '<br>';
print 'Hasło: ';
print '<br>';
print textfield(-name=>'haslo',
-size=>15,
-maxlength=>30);
print '<br>';
print submit(-name=>'Logowanie',
-value=>'Zaloguj');
print '</form>';
print '<form action="http://localhost/index.html" method="link">';
print submit(-name=>'przypomnienie',
-value=>'Przypomnij hasło',
-action=>'przypomnienie.cgi');
print '</form>';
print '<font color="red"> Błędne dane logowania.</font>';
print '<br>';
print a({
-href=>'http://localhost/rejestracja.html'},
'Rejestracja');
print end_html;
}
Jeśli wszystko jest w jednym pliku działa idealnie. Ale jak widać, chciałbym część gdzie sprawdzany jest arkusz przenieść do modułu. Niestety, ciągle czepia się przekazanych do modułu zmiennych: $Mail i $Haslo. Oto co wyrzuca konsola:
Kod:
Use of uninitialized calue $Mail in string eq at../moduł line 38.
Tak jak w powyższym błędzie pokazałem, dotyczy on pliku modułu, ale z konsoli uruchamiam plik Skryptu. Oczywiście po usunięciu zmiennej $Mail, przyczepi się do $Haslo :/