Jan Runte: Formularwerte in CGI-Skripten

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.

  1. 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.

    1. 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.

  2. 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.