Hallo Phixxi!
Sag mal, was läuft da?
Ich habe mich mal über Dein METHOD=GET gewundert.
Das ist nämlich ein Punkt, den ich selber noch nicht durchschaut habe. Was ist der Unterschied von GET und POST seitens des Browsers und seitens baseportal?
Also hab ich in der erweiterten Suche zum Forum :-) nach method=get gesucht. Dabei habe ich zwei sehr interessante Links gefunden:
1) Diskussion unserer Wissenden über GET:
http://baseportal.de/cgi-bin/baseportal.pl?htx=/baseportal/forum&wcheck=1&Pos=3016
2) Antwort einer Frage von Volle mit ähnlichem Templateinhalt von __Dir__ und der Antwort: Nimm METHOD=POST
http://baseportal.de/cgi-bin/baseportal.pl?htx=/baseportal/forum&wcheck=1&Pos=4171
Frage: Phixxi=Volle oder arbeitet ihr für den gleichen Kunden oder ist das ein Beispiel aus der Bib?
Nun zu den Fakten: Ich würde hier METHOD=POST benutzen. Damit kenne ich mich mittlerweile recht gut aus, auch wenn noch einige Details (speziel wegen %_cgi) fehlen ;-)
Punkt 1) Die Dokumentation
Sander hat im April in der Doku etwas erweitert, und ich hab dann die vergessenen Zeichen reklamiert :-)
http://baseportal.de/cgi-bin/baseportal.pl?htx=/hilfe/baseportal/db_help&help=98
Leider erklärt dieses Kapitel nicht die ganze Geschichte und schon gar nicht vollständig :-(
Die Folge davon ist, das es immer wieder Probleme gibt!
Mal schaun ob ich das mal hinkriege.
Punkt 2) Das HTML-Tag <form> in baseportal
Für die hier beschriebene Variante brauchst Du ein METHOD=POST
Im ACTION=... steht der Link, der durch Ausführen des Formulars angesprungen wird. Hier gibt es leider einige Browser, die Mist bauen, weshalb es notwendig ist, daß __alle__ Parameter, die Du in den Link gibts (z.B. Deine fixe Einstellungen) zusätzlich als HIDDEN mit einem Istgleich (=) überträgst.
ENCTYPE="multipart/form-data" muß so sein (HTTP-Protokoll). z.B.:
<FORM ACTION="http://baseportal.de/cgi-bin/baseportal.pl?htx=/name/template" METHOD=POST ENCTYPE="multipart/form-data">
Punkt 3) Die Hidden-Felder
Alle Parameter, die Du in den ACTION=-Url reinstellst, müssen mit einem = versehen einzeln als HIDDEN übertragen werden. z.B:
<INPUT TYPE="HIDDEN" NAME="htx=" VALUE="/name/template">
Punkt 4) Die Formular-Felder
Das allgemeine Wissen über Formularfelder (setze ich hier voraus) ist für baseportal leider zu wenig. Alle Daten, die per Formularfeld übergeben werden, werden servereingangsseitig speziell behandelt. Äußerst entscheidend ist dabe der NAME eines Formularfeldes. Wenn die hier abschließenden Symbole des Namens nicht richtig sind, gibts Probleme! z.B.:
<INPUT TYPE="TEXT" NAME="name:=" VALUE="" SIZE=10>
Das obige Beispiel stellt ein allgemeines Formular-Eingabefeld dar. Entscheidend hierbei ist das :=
Genaueres (na ja ;-) findest Du in der Dokumentation im folgenden Link ganz unten:
http://baseportal.de/cgi-bin/baseportal.pl?htx=/hilfe/baseportal/db_help&help=61
Verifizierte Fakten sind, daß bei diesen Istgleichs folgendes passiert (bei METHOD=POST):
= dieser Parameter-Typ findet sich in %_get wieder
:= dieser Parameter-Typ findet sich in %_put wieder
== dieser Parameter-Typ findet sich in %_sel wieder
Parameter, die im Url mit = angegeben werden stehen ebenfalls in %_get
Parameter, die im Url mit == angegeben werden stehen ebenfalls in %_sel
Alle Parameter, die sich in %_get wiederfinden sind außerdem als einfache Scalar-Variable ansprechbar. Zum Beispiel ist unser htx= (steht im Url und im HIDDEN) steht in unserem Template als $htx zur Verfügung!
Zu guter Letzt gibts da neben dem == noch eine Menge mehr an Vergleichsoperatoren, die Du in der Dokumentation findest unter:
http://baseportal.de/cgi-bin/baseportal.pl?htx=/hilfe/baseportal/db_help&help=50
Und noch etwas:
Die Information in %_sel ist leider sehr unvollständig!
Deshalb gibt es neben dem %_sel auch noch ein $_sel und ein @_sel.
Beispiel:
<INPUT TYPE="TEXT" NAME="name1=" VALUE="" SIZE=10>
<INPUT TYPE="TEXT" NAME="name2:=" VALUE="" SIZE=10>
<INPUT TYPE="TEXT" NAME="name3==" VALUE="" SIZE=10>
Wenn jetzt der User der Reihe nach in die Felder die Worte "Ich" "bin" "gut" (ups, eingebildet!) einträgt und an unser Template abschickt, dann ist dies identisch mit folgendem Perlcode:
<perl>
$_get{name1}="Ich";
$name1="Ich";
$_put{name2}="bin";
$_sel{name3}="gut";
$_sel="name3==gut";
$_sel[0]="name3";
$_sel[1]="==";
$_sel[2]="gut";
</perl>
Punkt 5) Die verschiedenen System-Hashes
Ok, aber was ist was und was passiert dann?
%_get:
Dies ist der allgemeine "Parameter"-Hash.
In der Regel befinden sich alle als Parameter übergebene Werte (in ACTION= als Url oder Datenbankabfrage). Wohlgemerkt Parameter und keine Abfragen.
Beispiel: htx=
Wenn Du zum Beispiel ein get "Id==0", "Datenbank"; ausführst, dann stehen alle Deine Daten des ersten Datensatzes in diesem Hash.
Abrufen kannst Du dann Deine Daten mit $_get{feldname} und natürlich auch mit $feldname.
%_put:
Alle Dateneingaben werden normalerweise über Formularfelder übertragen, und stehen in diesem Hash. Zum Beispiel erzeugt baseportal in einem <do action=all> (bzw. do_all;) bei "Neu" ein Formular, wo bei allen Formular-Feldname ein := hinten dran hängt. Nach Absenden dieses Formulars befinden sich dann alle Eingaben in diesem Hash.
Mit put %_put, "Datenbank"; wird dann dieser Datensatz an die Datenbank angehängt.
Bei "Ändern" schauts so ähnlich aus und es erfolgt ein mod "Id==$Id", %_put, "Datenbank";
%_sel:
Allgemein steht in diesem alles, was mit einer Abfrage zu tun hat. Aber das ist etwas komplizierter!
Die Elemente dieses Hashes haben gewisse Lücken, denn es befinden sich hier nur die beiden Seiten eines Vergleiches.
Beispiel1: name==Meier
Hier enthält der Hash nur dieses eine Element:
Beispiel2: name~=Meier
Ups, da gibts ebenfalls nur dieses eine Element:
Das ist natürlich zu wenig.
Somit gibts da, wie oben schon erwähnt, 2 weitere Variablen, nämlich $_sel und @_sel.
In $_sel steht der gesamte Abfrageausdruck.
Beispiel: name~=Meier
Hier steht also in $_sel:
Das Wichtigste bezüglich Abfragen ist jedoch unsere Liste @_sel, denn nur diese hat Auswirkungen.
Beispiel: name~=Meier
Hier steht also in @_sel:
$_sel[0]="name";
$_sel[1]="~=";
$_sel[2]="Meier";
__Nur__ Änderngen an @_sel haben Auswirkungen auf ein nachfolgendes <do action=all> oder do_all;
ACHTUNG:
In dem gerade Beschriebenen sind einige nicht dokumentierte Abläufe und einige nicht dokumentierte Variablen enthalten.
Speziell die Variablen können sich ohne Vorwarnung __ändern__!
Das sind:
1) $_sel
2) @_sel
3) Auswirkungen von Änderungen an @_sel
So, das war jetzt genug an bp-Theorie.
Das dahinterstehende Konzept von CHRISTOPH ist GENIAL!
Nur die Doku ist mies (he, Sander, ich mach nichts kaputt, ich hab ein 1/2 Jahr gebraucht, um diesen Teil der Doku zu verstehen, und da oben hab' ich noch einiges weggelassen, was ich noch immer nicht auf die Reihe gekriegt hab :-)
Nun zu Deinem Problem:
===================
Probier mal folgenden Code in Deinen Formularen (HTML-Seiten), sollte funzen!
__Achtung__ Du mußt auf die ~= aufpassen bei den Feldern, deren Code Du nicht in Deinen Beitrag reingegeben hast (dort fehlen die =)!
Formular 1) Ausgabe der Daten anhand von Mehrfachauswahl:
<FORM NAME="Objektsuche" ACTION="http://baseportal.de/cgi-bin/baseportal.pl?htx=/gastro4sale/Objektdaten/Objekte&cmd=all" TARGET=_self METHOD=POST ENCTYPE="multipart/form-data">
<INPUT TYPE="HIDDEN" NAME="htx=" VALUE="/gastro4sale/Objektdaten/Objekte">
<INPUT TYPE="HIDDEN" NAME="cmd=" VALUE="all">
#dann kommen die Auswahlfelder
<SELECT ID="Auswahlfeld3" NAME="Region~=">
<OPTION VALUE="*" SELECTED>Alle Regionen</OPTION>
<OPTION VALUE="Baden-Württemberg">Baden-Württemberg</OPTION>
<OPTION VALUE="Bayern">Bayern</OPTION>
<OPTION VALUE="Berlin">Berlin</OPTION>
#usw...plus zwei weitere Auswahlfelder
Formular 2) Ausgabe der Daten anhand einer eindeutigen Objekt-Nr:
<FORM NAME="DirektLogIn" ACTION="http://baseportal.de/cgi-bin/baseportal.pl?htx=/gastro4sale/Objektdaten/Objekte&cmd=all" TARGET=_self METHOD=POST ENCTYPE="multipart/form-data">
<INPUT TYPE="HIDDEN" NAME="htx=" VALUE="/gastro4sale/Objektdaten/Objekte">
<INPUT TYPE="HIDDEN" NAME="cmd=" VALUE="all">
#Feld für Objekt-Nr:
<INPUT ID="Objektnr" TYPE="TEXT" NAME="Objekt-Nr~=" VALUE="" SIZE=5 MAXLENGTH=4>
Mit allen Anführungsstrichen (") und Istgleichen(=) bzw. (~=) sollte die Geschichte gehen.
Na, bin gespannt, wo ich mich in der Syntax wieder vertippselt hab :-) Am eigenen Code ist man meistens ein schlechter Syntaxchecker!
Grüße Jurenda