(SERVER/PERL/CGI ) Formulardaten kommen nicht im Skript an
Stefan
Hallo!
Ich bin ein PERL/CGI/Server-Anfänger und habe seit einigen Tagen Probleme mit einem Skript
bzw. generell damit (auch eigene) Formulardaten in ein Skript zu bekommen:
Als OS benutze ich Win98, als Server XITAMI (Win32) , Perl 5
"Zum Sachverhalt":
Das Gästebuch wickelt über ein HTML-Frontend die Eingaben ab und schickt diese dann
via <FORM METHOD="POST" ACTION="http://127.0.0.1/cgi-bin/guestbook.cgi"> an das PERL-Gästebuch-Skript (127.0.0.l eben nur zum Offline-Test).
Das Problemchen:
Die Formulardaten scheinen niemals im Skript anzukommen. Ich bekomme von der Skript-eigenen Fehlerbehandlung immer eine Meldung, daß *kein* Formularfeld ausgefüllt wurde.
Ich habe dann einmal direkt vor dieser Fehlererkennung das Formulararray direkt im Skript füllen lassen (in diesem Fall z.B. für das Nicht-Ausfüllen des "comments" im Gästebuch:
#$FORM{'comments'}="blablabla"; - und siehe da: der Eintrag wird verarbeitet und in die Gästebuchdatei geschrieben und später im selbigen auch korrekt angezeigt.
Damit habe ich also festgestellt, daß der Fehler wohl kaum im Skript liegen kann (mal davon abgesehen, daß meine Perl-Kenntnisse dafür sowieso noch nicht ausreichen... aber man muß ja mal damit anfangen ;)))
Dann ist mir auch schlagartig klar geworden, warum ich auch mit dem normalen Auswerten meiner eigenen HTML/PERL-Versuche massive Probleme hatte: irgendetwas stimmt an dieser verflixten XITAMI-Einstellung nicht (ich habe aber nichts verstellt oder so).
In der CGI-Sektion ist u.a. folgendes eingestellt:
(x=aktiviert)
...
Use standard I/O? (x) - switch off if you use CGI_STDOUT
Pass FORM FIELDS (x)
Pass HTTP FIELDS (x)
Pass QUERY_STRING? ( )
...
Zuerst dachte ich, es läge an diesem QUERY_STRING und habe die Option aktiviert - das hat aber auch nichts gebracht. Nachdem ich den Server und Netscape restartet hatte verhielt sich alles genauso.
Zur Zeit bin ich nun *wirklich* ratlos!
Ich hoffe, das Problem ist ein *typisches Anfängerproblem* und irgendjemand kann mir mal kurz antworten, woran das denn liegen könnte (meiner Meinung nach sicherlich an der Serverkonfiguration).
Vielen Dank!!!!!!!!!!!!!!!!!!!!
Stefan
Also die Standardkonfiguration des Xitami funzt eigentlich , Du mußt eigentlich nur darauf achten, daß "CGI enabled" (ist es aber per Standard auch) angehakt ist. Vielleicht ist die POST Methode falsch (manche Scripts arbeiten nur mir GET - das ist bei einem Gästebuch aber eher unwahrscheinlich), hast Du in HTML die Formularfelder auch entsprechend benannt? Das Script startet aber erstmal, oder?
Gruß Torsten
Hmmmm.
Neee. Leider nicht.
Ich habe noch die Original-HTML-Datei des Gästebuchskripts 'drin. Da habe ich innerhalb des Formulares nichts geändert.
Auch die POST-Methode muß ja so funktionieren, da HTML und Skript aufeinander abgestimmt waren
und faktisch zusammengehören.
CGI ist korrekt aktiviert, denn sonst würde das Skript ja nicht laufen, wenn ich *im* Skript die Arrays fülle um zu sehen, daß
dann das Gästebuch korrekt gefüllt wird. Ich kann mir nach diesen "gefaketen" Einträgen das Gästebuch
auch korrekt anschauen und sehe diese Einträge. Aber das bringt mir ja wenig.
Hier mal ein Auszug aus dem Teil im Skript, daß für das Einlesen der Formulardaten zuständig ist:
"...
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
..."
Das bedeutet doch, daß STDIN für die Formulardaten als Input verwendet wird, oder?!
Im XITAMI kann man hierzu folgendes einstellen:
Use standard I/O? ( ) - switch off if you use CGI_STDOUT, e.g. for Basic
Muß ich das jetzt EIN oder AUS-schalten???
Im Skript wird doch STDIN verwendet - also OFF, oder?!
Wiegesagt - das Skript scheint tadellos (uns ist auch 1000x auf anderen Sites im Einsatz) und dem
Autor sind hier auch keine Probleme bekannt.
Gruß,
Stefan
Das bedeutet doch, daß STDIN für die Formulardaten als Input verwendet wird, oder?!
STDIN/STDOUT ist ein Perl eigenes Variablenpaar, das bestimmt woher oder wohin die Daten gehen, die du im Programm verarbeitest. Das sind sozusagen zwei "Kabel", die dein Script mit der "Aussenwelt" verbinden. Eins für rein und eins für raus.
Use standard I/O? ( ) - switch off if you use CGI_STDOUT, e.g. for Basic
Muß ich das jetzt EIN oder AUS-schalten???
Im Skript wird doch STDIN verwendet - also OFF, oder?!
Ich kenne diesen Server-Typ und seine Einstellungen nicht aber ich würde sagen dieses switch muss eingeschaltet sein. Du schaltetest damit nicht um zwischen IN und OUT um, sondern du schaltest IN&OUT (zusammen) an oder aus.