Cosmo: CGI Problem

Im Moment bin ich dabei in Perl ein größeres Dateiverwaltungsprogramm zu schreiben,das
selbstständig Dateien updated und umschreibt.
Die nötigen Informationen sollen dabei über ein HTML-Formular eingegeben werden.
Mein Problem: Das Programm läuft über die DOS-Eingabeaufforderung optimal und macht
alles was es soll. Versuche ich aber wie gewünscht über das Formular zu arbeiten schreibt mir
Netscape immer 'Formular enthält keine Daten'.
Server läuft ohne Probleme und verarbeitet auch Test-Auszüge des Programms mit anschl. Ausgabe (Variablenüberprüfung) über CGI ins Browserfenster (d.h. Infos kommen an und
werden verarbeitet).

Wo ?????  verdammt noch mal ist der Fehler ?

Jeder noch so kleine Hinweis ist herzlich willkommen !!!

Gruesse
Cosmo (bald verrückt)

  1. Hallo Cosmo,

    Versuche ich aber wie gewünscht über das Formular zu arbeiten schreibt mir
    Netscape immer 'Formular enthält keine Daten'.
    Wo ?????  verdammt noch mal ist der Fehler ?

    Das kann z.B. daran liegen, dass das CGI-Script das Formular nach der GET-Methode zu lesen versucht, waehrend in HTML <form ... method=post> steht. Oder umgekehrt. Welche Routine benutzt Du denn, um die Formularinhalte zu lesen?

    Hier als Orientierung eine Perl-Funktion, die mit method=post zusammenarbeitet:

    sub Formulardaten_einlesen {
       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;
          $FORM{$name} = $value;
       }
    }

    Mit einem Ausdruck wie $FORM{'Suche'} hast Du nach Aufruf dieser Routine Zugriff auf Daten, die in einem Feld <input type=text name="Suche"> eingegeben wurden.

    Viele Gruesse
      Stefan Muenz

    1. Hallo Cosmo,

      Versuche ich aber wie gewünscht über das Formular zu arbeiten schreibt mir
      Netscape immer 'Formular enthält keine Daten'.
      Wo ?????  verdammt noch mal ist der Fehler ?

      Das kann z.B. daran liegen, dass das CGI-Script das Formular nach der GET-Methode zu lesen versucht, waehrend in HTML <form ... method=post> steht. Oder umgekehrt. Welche Routine benutzt Du denn, um die Formularinhalte zu lesen?

      Hallo Stefan,
      Danke erstmal für die Hilfe.
      Ich verwende die POST-Methode.
      Wie gesagt, die ersten 15 Zeilen des Programms (einlesen und verarbeiten der Daten, testweises ausgeben im Browserfenster) funktionieren ohne Probleme. Wenn ich aber versuche, komplexere Operationen (Stringbearbeitung, einlesen und bearbeiten von Dateien, ...) in das Programm aufzunehmen, kommt die Fehlermeldung 'Formular enthält keine Daten'.
      Über die DOS-Eingabefunktion kann ich das komplexe Programm aber problemlos ausführen
      (somit können ja auch keine Perl-Programmierfehler existieren). Jetzt stellt sich die Frage : Warum funktioniert das Programm über DOS, aber nicht über CGI  ? ( -> unsauberer Programmierstiel ?)

      Viele Gruesse
      Cosmo

      1. Wie gesagt, die ersten 15 Zeilen des Programms (einlesen und verarbeiten der Daten, testweises ausgeben im Browserfenster) funktionieren ohne Probleme. Wenn ich aber versuche, komplexere Operationen (Stringbearbeitung, einlesen und bearbeiten von Dateien, ...) in das Programm aufzunehmen, kommt die Fehlermeldung 'Formular enthält keine Daten'.

        Das hört sich ganz nach einem mir aus der Zeit des "Einlesens aus der Kommandozeile" bekannten Problems an: du kannst da die Kommandozeile auslesen, und zwar genau ein mal. Wenn du sie ein zweites mal brauchst, mußt du sie nach dem ersten einlesen erst mal irgendwo zwischenspeichern.

        Vielleicht ist es das ja, du greifst nicht auf die gespeicherten Daten zu (die hast du ja wahrscheinlich gespeichert, bevor du sie Testweise ausgeben konntest), sondern auf die Kommandozeile... und die ist natürlich leer, also hat das Formular keine Daten.

        Gruß und sach, wenns geklappt hat

        Sven

  2. Hallo Cosmo!

    Die Fehlermeldung "Formular enthaelt keine Daten"
    deutet nach meiner Erfahrung darauf hin, dass das CGI-Skript
    sich irgendwie aufgehaengt hat und nichts zurueckliefert.
    Das gleiche erscheint auch, wenn es einen fehlerhaften oder fehlenden Header
    produziert.
    Ueberpruef mal, ob der Server (welchen verwendest Du denn?!)
    den stderr-Stream loggt, haeufig gelangen Fehlermeldungen, die
    das CGI-Skript ueber stderr ausgibt, in eine Log-Datei und sind
    oft sehr informativ...
    Wegen Dateiverwaltung: Schickst Du auch groessere Textfelder
    oder Dateien an das CGI, dann muss auch
    <form method="post" enctype="multipart/form-data">
    verwendet werden, sonst uebermittelt ein File-Button z.B.  nur
    den Dateinamen anstelle des Inhaltes.

    Viele Gruesse,

    Andreas

  3. Vielen Dank
    erstmal an alle, die sich die Mühe gemacht haben sich mit mir den Kopf zu zerbrechen.
    Der Fehler war gleichfalls einfach, wie er auch an einer fatalen Stelle lag.
    Das Script greift beim Ausführen auf verschieden Pfaden auf die zu öffnende Datei zu, je nachdem, ob es über DOS oder über den Browser aufgerufen wird.
    Dummerweise hatte ich auch noch vergessen die 'or  die' -  'Datei konnt nicht geöffnet ...' Anweisung mit einer zusätzlichen Unterroutine zu versehen, die auch Fehlermeldungen über den Browser ausgeben kann. Somit hat sich das Script schon am Anfang über die die-Anweisung aufgehängt und somit ist auch die Netscape-Meldung verständlich.

    Naja, jetzt habe ich das Problem zwar gelöst, besitzte aber keine Gehirnzellen mehr, da meine sonstige Lösungsmethode so-lange-mit-dem-Kopf-gegen-die-Wand-rennen-bis-eine-Idee-kommt diesmal sehr spät zum Erfolg geführt hat.

    Gruesse an alle
    Cosmo