cgi und post formular

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
roakin
User
Beiträge: 26
Registriert: Montag 30. April 2007, 09:31

Montag 11. Juni 2007, 10:56

ich will mit cgi ein formular auswerten. allerdings kommen in dem bei action angegeben skript die formulardaten nicht an sobald ich method="post" angebe.

cgi.test() meldet 'No form fields.'

ohne eine method anzugeben funktioniert es, aber da werden die ganzen werte ja dann in der urlleiste mitübergeben und das will ich ja nicht.

weiß jemand woran das liegen könnte?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 11. Juni 2007, 11:02

roakin hat geschrieben:ich will mit cgi ein formular auswerten. allerdings kommen in dem bei action angegeben skript die formulardaten nicht an sobald ich method="post" angebe.
Hallo roakin!

Dieses Beispiel funktioniert bei mir:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
"""
******************************************************************************
* CGI-Programm -- Zeigt ein Formular zum Berechnen des BMI an.
*
* Created:      2006-06-21 by Gerold
* Requirements: Python: http://www.python.org
*
* Vorlage war:
*
* korpergrose = input ("Bitte geben Sie nun Ihre Groesse in cm ein:\n")
* realgewicht = input ("Bitte geben Sie ihr Gewicht in Kg ein:\n")
* schritt = korpergrose/100.0
* schritt2 = schritt * schritt
* bmi = realgewicht / schritt2
* print "--------------------------------------------------------------------------"
* print "Ihr BMI betraegt:\n",bmi,"\n"
* print "Der Normal-BMI liegt bei Frauen zwischen  19  und 24, bei Maennern  zwischen 20 und 25. Bei Maennern und Frauen ab 65 Jahren gilt ein BMI zwischen 24 und 29 als Normal!"
* print "--------------------------------------------------------------------------"
* input("Bitte druecken sie eine taste um das Programm zu beenden")
*
******************************************************************************
"""

print "Content-Type: text/html;charset=iso-8859-1"
print

import cgi
import cgitb; cgitb.enable()


# Kopf
print \
"""<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
  <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />
  <title>Body Mass Index</title>
</head>
<body>
"""

# Überschrift
print \
"""
  <!-- Überschrift BEGIN -->
  <div align="center">
    <h1>Body Mass Index</h1>
  </div>
  <!-- Überschrift END -->
"""

# Daten holen
fs = cgi.FieldStorage()
size_cm = fs.getvalue("size_cm", "")
weight_kg = fs.getvalue("weight_kg", "")

try:
    # Prüfen ob Zahlen übergeben wurden
    float(size_cm)
    float(weight_kg)
    berechnung_moeglich = True
except:
    berechnung_moeglich = False

if berechnung_moeglich:
    # BMI berechnen
    schritt = float(size_cm)/100.0
    schritt2 = schritt * schritt
    bmi = float(weight_kg) / schritt2

    # Ergebnis anzeigen
    print \
"""
  <!-- BMI-Anzeige BEGIN -->
  <div align="center">
    <p>
      Ihr BMI betraegt: <strong>%(bmi).2f</strong>
    </p>
    <p>
      Der Normal-BMI liegt bei Frauen zwischen 19 und 24, 
      bei Maennern zwischen 20 und 25. <br />
      Bei Maennern und Frauen ab 65 Jahren gilt ein BMI 
      zwischen 24 und 29 als Normal!
    </p>
  </div>
  <!-- BMI-Anzeige END -->
""" % {"bmi": bmi}

# Formular anzeigen
print \
"""
  <!-- Eingabeformular BEGIN -->
  <form action="bmi.py" method="post">
    <table border="1" cellpadding="3" cellspacing="0" align="center">

      <!-- Feld für Größe BEGIN -->
      <tr>
        <td>
          Geben Sie nun Ihre Größe in cm ein:
        </td>
        <td>
          <input type="text" name="size_cm" value="%(size_cm)s" />
        </td>
      </tr>
      <!-- Feld für Größe END -->

      <!-- Feld für Gewicht BEGIN -->
      <tr>
        <td>
          Geben Sie ihr Gewicht in Kg ein:
        </td>
        <td>
          <input type="text" name="weight_kg" value="%(weight_kg)s" />
        </td>
      </tr>
      <!-- Feld für Gewicht END -->
      
      <!-- Submit-Button BEGIN -->
      <tr>
        <td colspan="2" align="center">
          <input type="submit" value="Berechnen" />
        </td>
      </tr>
      <!-- Submit-Button END -->
      
    </table>
    
  </form>
  <!-- Eingabeformular END -->
""" % {
    "size_cm": size_cm, 
    "weight_kg": weight_kg
}

# Fuss
print \
"""
</body>
</html>
"""
Funktioniert es auch bei dir?

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
roakin
User
Beiträge: 26
Registriert: Montag 30. April 2007, 09:31

Montag 11. Juni 2007, 12:20

danke ... das funktioniert bei mir ... dann werd ich mal vergleichen
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 12. Juni 2007, 10:29

gerold hat geschrieben:

Code: Alles auswählen

print \
"""
</body>
</html>
"""
Das sieht für mich reichtlich komisch aus... Ich würde das so machen:

Code: Alles auswählen

print """\
</body>
</html>
"""
Ist im Endeffekt das selbe, aber es sieht IMHO zusammenhängender aus ;)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten