Seite 1 von 1

cgi und post formular

Verfasst: Montag 11. Juni 2007, 10:56
von roakin
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?

Re: cgi und post formular

Verfasst: Montag 11. Juni 2007, 11:02
von gerold
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
:-)

Verfasst: Montag 11. Juni 2007, 12:20
von roakin
danke ... das funktioniert bei mir ... dann werd ich mal vergleichen

Re: cgi und post formular

Verfasst: Dienstag 12. Juni 2007, 10:29
von jens
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 ;)