Z SQL-Methode und das gemeine Formular...

Django, Flask, Bottle, WSGI, CGI…
Antworten
majoversum
User
Beiträge: 8
Registriert: Dienstag 20. Juni 2006, 11:20

Servus!

Habe Problem ;)

Folgendes: Ich will ein Formular auslesen und per Z SQL Methode in eine DB senden... Aber irgendwie bin ich zu dumm dazu *gg*

Wenn ich das richtig verstanden habe, muss ich doch im <form>-Tag das action="name_von_z-SQL-Methode" nennen.

Im Formular dann die Felder benennen. Dann sollte ich die doch in der SQL-Methode im Select folgendermaßen aufrufen können:

Code: Alles auswählen

INSERT INTO user
 (vorname, nachname)
VALUES
 (<dtml-sqlvar vorn type="string">, <dtml-sqlvar nachn type="string">)
Klappt aber nid... Als Fehlermeldung sagt er mir das die variable nicht definiert ist... Aber m.E. müsste die doch definiert sein, sobald ich ihr im Formular den Namen vorn und nachn (also den input feldern) zuweise...

Folglich bitte ich um Hilfe! :oops:

Kleiner Hinweis: Datenbank verbindung klappt, Z SQL Methoden kann ich auch ausführen. Lediglich diese übergabe per Formular klappt nicht.

Danke im voraus!

majo
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

majoversum hat geschrieben:Klappt aber nid... Als Fehlermeldung sagt er mir das die variable nicht definiert ist... Aber m.E. müsste die doch definiert sein, sobald ich ihr im Formular den Namen vorn und nachn (also den input feldern) zuweise...
Hi majo!

Du musst die Variablen auch im Kopf der SQL-Methode definieren.
Der Bereich "Arguments" ist dafür da. Schreib dort die Variabelnamen rein.

Code: Alles auswählen

vorn
nachn
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
majoversum
User
Beiträge: 8
Registriert: Dienstag 20. Juni 2006, 11:20

Danke! Nun geht immerhin beim klick auf Absende das DB-Query auf. Aber da habe ich eine ZMI-Oberfläche mit leeren Eingabefeldern.
Ich hab die Felder ja schon im Formular befüllt. Die werden anscheinend nicht richtig übergeben, da sie ja sonst gefüllt sein müssten?!?

MfG

majo
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

majoversum hat geschrieben:Danke! Nun geht immerhin beim klick auf Absende das DB-Query auf. Aber da habe ich eine ZMI-Oberfläche mit leeren Eingabefeldern.
Hi majo!

Du erwartest zu viel. :roll:

Erstell dir ein "Python Script", das als "Action" des Formulars eingetragen wird. Dieses "Python Script" bekommt vom Formular die Daten und ruft die Z-SQL-Methode auf, die die Adresse in die Datenbank schreibt. Ist das erledigt, dann kann das "Python Script" entweder eine einfache Meldung mit "print" ausgeben oder zu einer HTML-Seite weiterleiten oder diese anzeigen.

Hier ein kleines Beispiel, wie so ein "Python Script" aussehen könnte:

Code: Alles auswählen

## Script (Python) "insert_address"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=vorname, nachname
##title=
##
request = container.REQUEST
response =  request.RESPONSE

context.sql_insert_address(vorname = vorname, nachname = nachname)

message = 'Die Adresse "%s %s" wurde erfolgreich in die Datenbank geschrieben'
print message % (vorname, nachname)
return printed
Und hier die zugehörige Z-SQL-Methode (sql_insert_address):

Code: Alles auswählen

<params>vorname
nachname</params>

Code: Alles auswählen

INSERT INTO adressen (
  vorname,
  nachname
) VALUES (
  <dtml-sqlvar vorname type="string">,
  <dtml-sqlvar nachname type="string">
)
Siehe auch: http://www.zope.org/Documentation/Books ... T.stx#3-47

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
majoversum
User
Beiträge: 8
Registriert: Dienstag 20. Juni 2006, 11:20

Hallo Gerold,

vielen Dank! Klappt! :)

MfG

majo
majoversum
User
Beiträge: 8
Registriert: Dienstag 20. Juni 2006, 11:20

gerold hat geschrieben:Ist das erledigt, dann kann das "Python Script" entweder eine einfache Meldung mit "print" ausgeben oder zu einer HTML-Seite weiterleiten oder diese anzeigen.
Aiai, leider kenn ich mich in Python noch nicht gut aus... Wie kann ich es realisieren das er die z.B. die index_html im root von Zope öffnet bzw. aufruft? Also welcher befehl? Habe leider nix passendes im Inder-Net gefunden...

Vielleicht kannst du mir hier nochmals helfen? :oops:

MfG

majo :wink:
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

majoversum hat geschrieben:die index_html im root von Zope öffnet
Hi majo!

Zur index_html im Root umleiten:

Code: Alles auswählen

request = container.REQUEST
response =  request.RESPONSE
response.redirect("/index_html")
Zur ersten index_html, die gefunden wird, umleiten (unschönes Beispiel):

Code: Alles auswählen

request = container.REQUEST
response =  request.RESPONSE
response.redirect("index_html")
Zur ersten index_html, die gefunden wird, umleiten (schönes Beispiel):

Code: Alles auswählen

request = container.REQUEST
response =  request.RESPONSE
url = context.index_html.absolute_url()
response.redirect(url)
Zur index_html des übergeordneten Ordners umleiten:

Code: Alles auswählen

request = container.REQUEST
response =  request.RESPONSE
url = context.aq_parent.index_html.absolute_url()
response.redirect(url)
Zur index_html des übergeordneten Ordners *traversieren* und die Optionen vorname und nachname mitgeben. Diese können in der PageTemplate mit options/vorname und options/nachname abgefragt werden:

Code: Alles auswählen

request = container.REQUEST
response =  request.RESPONSE
return context.aq_parent.index_html(
    vorname = "Gerold", nachname = "Penz"
)
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
majoversum
User
Beiträge: 8
Registriert: Dienstag 20. Juni 2006, 11:20

Super, danke!! :D
Antworten