Varaiblen aus einem Formular

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
LuScHe
User
Beiträge: 19
Registriert: Samstag 21. Dezember 2002, 19:52
Kontaktdaten:

Donnerstag 3. Juli 2003, 09:32

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.
lbuega
User
Beiträge: 75
Registriert: Dienstag 15. April 2003, 08:51
Wohnort: Weissach

Donnerstag 3. Juli 2003, 11:14

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)
Gast

Freitag 4. Juli 2003, 00:17

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
LuScHe
User
Beiträge: 19
Registriert: Samstag 21. Dezember 2002, 19:52
Kontaktdaten:

Freitag 4. Juli 2003, 12:35

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
Gast

Samstag 5. Juli 2003, 21:37

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
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Sonntag 6. Juli 2003, 12:39

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()
Gast

Sonntag 6. Juli 2003, 16:43

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
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Sonntag 6. Juli 2003, 17:59

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

Sonntag 6. Juli 2003, 20:05

:wink:

danke für die ausführung.

mfg

roland
Antworten