Hallo,
wenn ich ein Formular als Suchprogramm (CGI) abschicke und Werte wie
"indiana_jones_und_der_letzte_kreuzzug" habe, findet das CGI-Skript
keinen Eintrag in der CSV-Datei. Der Eintrag ist aber eindeutig vorhanden
und es handelt sich auch nicht um Schreibfehler. Benutzte ich nur
einen "_" in einem String, wie "jurassic_park" erkennt das CGI-Skript den
Eintrag und zeigt ihn ordnungsgemäß an. Er findet also nur Strings, die
nur einen "_" enthalten und nicht mehrere. Der Browser zeigt auch
die korrekte Schreibweise an, die ich brauche:
"movie_view.cgi?id=indiana_jones_und_der_letzte_kreuzzug"
#!/usr/bin/perl
$searchfile= "$ENV{DOCUMENT_ROOT}/cgi-bin/movies.csv";
&VarRead;
$searchstring= $Formular[1];
$searchstring =~ tr/+/_/;
open(SEARCH, "<$searchfile");
while(<SEARCH>)
{
chomp ($_);
@moviedaten= split(/;/,$_, 35);
if ($moviedaten[0] eq $searchstring)
{
last;
}
}
close(SEARCH);
print "Content-type: text/html\n\n";
if ($moviedaten[1] eq $searchstring)
{
*Anzeige*
.
.
.
} else {
print "ERROR - NOT FOUND";
}
sub VarRead
{
if($ENV{'REQUEST_METHOD'} eq 'GET')
{
$Daten = $ENV{'QUERY_STRING'}
}
else {
read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'});
}
@Formularfelder = split(/&/, $Daten);
foreach $Feld (@Formularfelder)
{
($name, $value) = split(/=/, $Feld);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.\n)*-->//g;
$Formular[$i] = $name;
$i = $i + 1;
$Formular[$i] = $value;
$i = $i + 1;
}
}
Beispiel:
unter "www.little-wing-imagine.de/cgi-bin/movies.cgi" könnt ihr einen Eintrag
auswählen, der z.B. mehrere Leerstellen hat, die dann per Skript in "_" ersetzt
werden.
oder unter "www.little-wing-imagine.de/schauspieler". da könnt Ihr
"catherine zeta jones" (funktioniert auch nicht) auswählen unter "z".
Könnt Ihr mir da weiterhelfen, bevor ich alles umstrukturiere (muß ja nicht sein)??
Vielen Dank auch im voraus.
mfG jR.