Seite 1 von 1

Varaiblen aus einem Formular

Verfasst: Donnerstag 3. Juli 2003, 09:32
von LuScHe
Hi ho
Wie kriege ich mit cgi die variablen aus einem Formular

hier ist das Formular

Code: Alles auswählen

<form method="POST" action="http://dominik/cgi-bin/log.py" name="Login">
<p align="center">Login: <input type="text" name="bn" size="20"><br>
Passwort: <input type="password" name="pw" size="20"><br>
<input type="submit" value="Login" name="B1"></p>
</form>
und wie kriege ich nun die variablen aus dem Formular?
schonmal danke.

Verfasst: Donnerstag 3. Juli 2003, 11:14
von lbuega
Hallo,
weis nicht genau ob die Antwort auch für CGI's passt, aber normalerweise stehen bei der POST-Methode sämtliche Variablen über ihren Namen im HTTP_POST_VARS-Array zur Verfügung (in Deinem Fall z.B. $HTTP_POST_VARS[ "bn" ]; d.h. mit einem "print $HTTP_P... ;" würde es Dir deren Inhalt ausgeben)

bestehst du auf method=post?

Verfasst: Freitag 4. Juli 2003, 00:17
von Gast
hi vielleicht gehts auch mit post, eine lösung unter python schaut so aus:

Code: Alles auswählen

#!/wo/auch/immer/python/liegt --- bei mir /usr/bin/python

import cgi
form=cgi.FieldStorage()

bn=form["bn"].value
pw=form["pw"].value

#HTML Dokument:

print "Content-type: text/html"
print

print "<html>"
print "<body"

print "<b>Ihr Name, Ihr Passwort</b><br>"
print "Nachname:" , bn,  "<br>"
print "Passwort: ", pw, "<br>

print "</body>"
print "</html>"


Code aus Einstieg in Python S. 221 von Galileo Computing

Ich habe ihn nicht probiert, wird aber wohl klappen so.

Mfg

roland

Verfasst: Freitag 4. Juli 2003, 12:35
von LuScHe
Irgentwie funzt das net :?

und nochwas cgi.test() sagt:
Form Contents:
B1: <type 'instance'>
MiniFieldStorage('B1', 'Login')
bn: <type 'instance'>
MiniFieldStorage('bn', 'login')
pw: <type 'instance'>
MiniFieldStorage('pw', 'passwort')
vielleicht hilft das weiter.
trotzdem danke

probier mal

Verfasst: Samstag 5. Juli 2003, 21:37
von Gast
mach mal bei password ein normales eingabefeld, also type="text"

vielleicht ist die idee absurd, aber ich dachte dass pyhton vielleicht zum auslesen eines eingabefeldes anders zugreifen muss.

ist reine philosophie, jetzt.

und check auch mal deine apache einstellungen, bzw. guck mal im log nach was der über den vorgang ausgibt.

mfg

Verfasst: Sonntag 6. Juli 2003, 12:39
von Milan
Tja, wenn nix abgesendet wird kann man auch nix im Formular finden. Falls zum Beispiel kein Passwort in pw eingegeben wird, gibt es kein form["pw"]. Es ist Python allerdings (zum Glück ;)) egal, was für ein Eingabefeld man benutzt, alles Daten lassen sich auf dieselbe Art und Weise auslesen (stimmt schon so, wie das da steht).

Vielleicht zwei Tipps:
  • Um nicht einen Fehler beim auslesen zu erzeugen, wenn nix abgesendet wurde kann man form.getvalue(key, standartwert) benutzten.
  • Um eine exakte Fehlerbeschreibung zu erhalten, kannst du den cgitracebackmodus verwenden. Schreib einfach diese zwei Zeilen oben an dein Script dran, am besten direkt unter das import cgi:

    Code: Alles auswählen

    import cgitb
    cgitb.enable()

@milan

Verfasst: Sonntag 6. Juli 2003, 16:43
von Gast
aha, gibt es also sprachen denen das tatsächlich nicht egal ist, welcher typ von eingabefeld benutzt wurde???

bist :D ein netter kumpel und führst du das mal genau aus, wie du das mit form.getvalue(key, standartwert) gemeint hast???

mfg

roland

Verfasst: Sonntag 6. Juli 2003, 17:59
von Milan
Ich habe keine Ahnung we das bei anderen Sprachen gemacht wird, es wäre aber eigentlich sinnlos, besonders nach den Typen zu unterscheiden. Sinn macht das erst beim Dateiupload... (kannst dir ja mal die Topics hier dazu anschauen)

also, getvalue funktioniert so: Du hast ja nun nach dem Ruf von form=cgi.FieldStorage() alle Formulardaten in form. Nun kannst du, falls ein Passwort vom Browser gesendet worden ist, dieses mit form["pw"].value erhalten. Andernfalls gibt es einen Fehler (KeyError), da Python nicht weiß was es nun machen soll. Du könntest diesen Fehler in einem try-except-Block abfangen, oder halt getvalue nutzen.
Du rufst dann z.B. form.getvalue("pw",""). Falls pw übergeben wurde ist alles wie oben, falls nicht liefert getvalue einfach statt einem Fehler den übergebenen Standartwert; hier einen leeren String.

alles klar

Verfasst: Sonntag 6. Juli 2003, 20:05
von Gast
:wink:

danke für die ausführung.

mfg

roland