A Asterix Medlem sedan dec. 1999 483 inlägg Frågan 24 mars 2000 17:11 #1 Vad är det för fel på följande kod
#!/usr/bin/perl
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/</\<\;/g;
$value =~ s/>/\<\;/g;
$FORM{$name} = $value;
}
$data = $FORM{'name'} + ".txt";
open(DATA, $data);
@lines = <DATA>;
close(DATA);
($name, $value, $color) = split(/;/, $lines{1});
if ($value eq $FORM{'name'}) {
print <<endhtml;
<html>
<head>
<frameset frameborder="0" border="0" rows="36,*" cols="100%">
<frame name="xlankarmeny" src="http://www.settlers.org/cgi-bin/xlinks/script.cgi?name=$name&color=$color" scrolling="no">
<frame name="xlankarmain" src="http://www.webforum.nu/wf/index.html" scrolling="auto">
</frameset>
<noframes>
</noframes>
</head>
</html>
endhtml
} else {
print <<endhtml;
<html>
<body>
<font face="verdana" size="2"><b><center>
Fel lösenord<b><br>
Klicka <a href="http://www.settlers.org/staff/emil/index.html">här</a> för att försöka igen.
</body>
</html>
endhtml
}
#!/usr/bin/perl
$buffer=$ENV{'QUERY_STRING'};
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/</\<\;/g;
$value =~ s/>/\<\;/g;
$FORM{$name} = $value;
}
$data = $FORM{'name'} + ".txt";
$color = $FORM{'color'};
open(DATA, $data);
@lines = <DATA>;
close(DATA);
print <<endhtml;
<html>
<body bgcolor="#FFFFFF" background="pics/$color/bg.gif" topmargin="0" leftmargin="0">
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr>
<td rowspan="2" width="50%" valign="top"><a target="xlankarmain" href="http://www.settlers.org/staff/emil/xlinks"><img src="pics/$color/logo.gif" border="0"></a></td>
<td width="45%" align="right" valign="top" height="8"></td><td width="5%"></td>
</tr>
<tr>
<td align=\"right\">
<form name="menu">
<select name="links" onChange="parent.xlankarmain.location.href=menu.links.options[menu.links.selectedIndex].value">
<option>Links</option>
<option>----------------------------------------</option>
endhtml
$nr = 0
foreach $line (@lines) {
$nr++;
chomp($line);
($value, $name) = split(/;/, $line);
if ($nr <> 1) {
print "<option value=\"$value\">$name</option>";
}
}
print <<endhtml;
</select>
</form>
</td>
</tr>
</table>
</body>
</html>
endhtml
------------------
/Emil Hesslow
R Robban Medlem sedan dec. 1999 2 555 inlägg Någonting jag observerar vid en mycket snabb överblick är att du försöker plocka ut ett värde ur en array med $lines{1} vilket är felaktigt. Det rätta att använda är $lines[1] (hakparanteser vid arrayer, klamrar vid tabeller).
Om inte det räcker får du gärna vara lite mer specifik med hur felet yttrar sig (går troligen snabbare att hitta felet då).
------------------
Robban < robban@lipogram.com >
A Asterix Medlem sedan dec. 1999 483 inlägg Det står 500 HTTP - internal server error eller något liknande när frame.cgi laddas. Kolla på denna sidan . Skriv in Demo som namn och demo som lösenord.
------------------
/Emil Hesslow
Så här stog det när jag loggade in:
Fel lösenord
Klicka här för att försöka igen.
, , , 0, name=Demo&password=demo&submit=++++OK++++
demo
R Robban Medlem sedan dec. 1999 2 555 inlägg Samma för mig. Gick inte att logga in. Felet "internal server error" kan vara vad som helst f.ö. så det säger inte speciellt mycket (möjligt att serverloggen säger mer). :)
En not. När du öppnar externa filer bör du alltid kolla om det lyckas eller inte. Öppnar du en fil som inte finns (inte går att skapa) och sedan försöker läsa/skriva till den så vet du inte vad som händer.
------------------
Robban < robban@lipogram.com >
A Asterix Medlem sedan dec. 1999 483 inlägg Jag har fixat det nu! Testa med Demo som namn och demo som lösenord så får ni se.
------------------
/Emil Hesslow
Det funkade bra.
------------------
/Patrik