Seite 1 von 1
Z SQL-Methode und das gemeine Formular...
Verfasst: Dienstag 4. Juli 2006, 09:36
von majoversum
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!
Kleiner Hinweis: Datenbank verbindung klappt, Z SQL Methoden kann ich auch ausführen. Lediglich diese übergabe per Formular klappt nicht.
Danke im voraus!
majo
Re: Z SQL-Methode und das gemeine Formular...
Verfasst: Dienstag 4. Juli 2006, 10:56
von gerold
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.
mfg
Gerold

Verfasst: Dienstag 4. Juli 2006, 11:03
von majoversum
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
Verfasst: Dienstag 4. Juli 2006, 16:20
von gerold
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.
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
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

Verfasst: Mittwoch 5. Juli 2006, 07:44
von majoversum
Hallo Gerold,
vielen Dank! Klappt!
MfG
majo
Verfasst: Mittwoch 5. Juli 2006, 09:18
von majoversum
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?
MfG
majo

Verfasst: Mittwoch 5. Juli 2006, 10:28
von gerold
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

Verfasst: Mittwoch 5. Juli 2006, 10:32
von majoversum
Super, danke!!
