Hallo!
Ich habe ein Suchformular mit ziemlich vielen Suchkriterien. Nach dem
Absenden wird zu Beginn der Ergebnisseite die Gültigkeit der Eingaben
geprüft. Werden Fehler gefunden, so schicke ich den Benutzer per
header("Location: ...") zurück zum Formular. Dabei übergebe ich die
gemachten Eingaben und die gefundenen Fehler als GET-Parameter. Bei den
vielen Formularfeldern wird der String ziemlich lang. Und elegant erscheint
mir das auch nicht gerade.
Man müsste die Eingaben doch auch irgendwie per POST zurückschaffen können,
oder? Ich denke da an eine Art unsichtbares Formular, das sich bei Bedarf
selbst auf den Submit-Button klickt - um es mal etwas schlicht auszudrücken.
Ich bin sicher, dass es da eine Möglichkeit geben muss, an der ich aber
bislang immer zielsicher vorbeigesucht habe. Wie macht man das?
Schönen Gruß
Jörg
Re: POST ohne Formular absenden
am 30.06.2006 08:13:07 von letters
Am Fri, 30 Jun 2006 08:05:00 +0200 schrieb Jörg Driesner:
> Hallo!
> Ich habe ein Suchformular mit ziemlich vielen Suchkriterien. Nach dem
> Absenden wird zu Beginn der Ergebnisseite die Gültigkeit der Eingaben
> geprüft. Werden Fehler gefunden, so schicke ich den Benutzer per
> header("Location: ...") zurück zum Formular. Dabei übergebe ich die
> gemachten Eingaben und die gefundenen Fehler als GET-Parameter. Bei den
> vielen Formularfeldern wird der String ziemlich lang. Und elegant erscheint
> mir das auch nicht gerade.
>
> Man müsste die Eingaben doch auch irgendwie per POST zurückschaffen können,
> oder? Ich denke da an eine Art unsichtbares Formular, das sich bei Bedarf
> selbst auf den Submit-Button klickt - um es mal etwas schlicht auszudrücken.
> Ich bin sicher, dass es da eine Möglichkeit geben muss, an der ich aber
> bislang immer zielsicher vorbeigesucht habe. Wie macht man das?
>
> Schönen Gruß
> Jörg
Wie wärs mit Session Variablen?
Du kannst natürlich auch ein Javascript verwenden und die Felder bereits
vor dem senden abfagen.
Man kann natürlich auch die das Suchformular und die Ergebnisseite in ein
Script bringen und nur mit if / else festlegen wohin verzweigt wird. Dann
entfällt die Sache mit dem Header komplett.
Mathias
Re: POST ohne Formular absenden
am 30.06.2006 08:25:36 von newsmail
Mathias Fiedler wrote:
> Wie wärs mit Session Variablen?
> Du kannst natürlich auch ein Javascript verwenden und die Felder
> bereits vor dem senden abfagen.
Das JavaScript habe ich schon drin, aber das ist ja nur eine Hilfe für den
Benutzer und kann meine Datenbank nicht wirklich vor schädlichen Eingaben
schützen.
Ich habe das hier http://www.php-faq.de/q/q-code-post.html gefunden,
verstehe aber das Verfahren noch nicht so ganz.
Jörg
Re: POST ohne Formular absenden
am 30.06.2006 11:56:45 von newsmail
Mathias Fiedler wrote:
> Wie wärs mit Session Variablen?
Das war das richtige Stichwort. Ich habe einfach alle nicht leeren Elemente
von $_POST als assoziatives Array in der Session gespeichert und auf der
Seite mit der Tabelle wieder ausgelesen. Funktioniert prima!
Danke für den Tipp!
Jörg
Re: POST ohne Formular absenden
am 30.06.2006 12:09:53 von Frank Schenk
Jörg Driesner wrote:
> Hallo!
> Ich habe ein Suchformular mit ziemlich vielen Suchkriterien. Nach dem
> Absenden wird zu Beginn der Ergebnisseite die Gültigkeit der Eingaben
> geprüft. Werden Fehler gefunden, so schicke ich den Benutzer per
> header("Location: ...") zurück zum Formular. Dabei übergebe ich die
> gemachten Eingaben und die gefundenen Fehler als GET-Parameter. Bei den
> vielen Formularfeldern wird der String ziemlich lang. Und elegant
> erscheint mir das auch nicht gerade.
FAQ bookmarken und lesen, v.a.
27.2. Von HTML zu PHP: Schreibe Formularverarbeitungen in Normalform
http://www.php-faq.de/q/q-stil-normalform.html
frank
Re: POST ohne Formular absenden
am 30.06.2006 13:12:06 von Rainer Hinz
Moin,
ich finde den Punkt mit header("Location:...") zu redirekten nicht=20
schön und ich denke, dein Problem kann man wie folgt recht elegant=20
lösen: (siehe obigen Thread php-goto)
$okay=3Dtrue;
break;
case "pruefeeingaben":
$formulareingaben["name"]=3D$_POST["name"];
$formulareingaben["vorname"]=3D$_POST["vorname"];
usw...
=09
// Prüfe alle Eingaben, ob diese korrekt sind
// wenn ja: Speichern
$okay=3Dtrue;
break;
// Wenn nein:
// Fehlerausgabe:
//=09
$step=3D"buildform"; =09
break;
default:
$step=3D"buildform";
}
}
Erklärung:
Dein ganzer Haupt-Code ist von einer While Schleife umgeben, diese=20
While Schleife wird durchlaufen, solange $okay=3Dfalse ist und=20
$emergencyout<5. Letzeres dient als eine Art Notausstieg, wenn man mal=20
vergißt $okay auf true zu setzen.
Dein Code enthält mehrere Schritte, die sich durch die GET/POST=20
Variable $step unterscheiden=20
(http://rechner?step=3Dtudies&wert1=3DX&wert2=3DY usw.)
Das Switch() Konstrukt wertet nun diese Variable $step aus. Willst du=20
ein Formular erstellen, bist du halt im Schritt "buildform", willst du=20
die Daten auswerten, im Schritt "pruefeeingaben".
Der Trick ist nun, dass im fehlerhaften Fall, das Formular gleich in=20
diesem Schritt wieder ausgegeben wird, ohne umständliche "Sprünge": D=
ie=20
while() Bedingung bleibt auf "false" und somit wird die Schleife erneut=20
durchlaufen. Da nun aber der $step-Wert geändert wurde, wertet die=20
Switch Konstruktion den Schritt der Formularausgabe aus. - voila...
Auch vorteilhaft ist es, dass du mit Hilfe dieser Konstruktion=20
regelrechte Formularblöcke machen kannst, die an beliebigen Stellen im =
Programm "eingeflochten" werden können.
Versuch das mal...
Gruß
Anni
Re: POST ohne Formular absenden
am 30.06.2006 15:26:26 von newsmail
Anni Schmidt wrote:
> Moin,
>
> ich finde den Punkt mit header("Location:...") zu redirekten nicht
> schön und ich denke, dein Problem kann man wie folgt recht elegant
> lösen...
Hallo Anni,
danke für die ausführliche Beschreibung. Mein Skript funktioniert zwar jetzt
einwandfrei, aber so im nachhinein wäre es schon eleganter, in derselben
Datei zu bleiben, bis die Validierung durch ist. Allerdings ist es z.Zt. für
unsere Arbeitsweise von Vorteil, die Dateien nach Funktion zu trennen, da es
mit der Trennung von HTML und PHP bei mir noch nicht weit her ist. Wenn ich
dann Formular, Validierung und Ergebnisliste in ein- und derselben Datei
habe, könnte der Kollege, der die Gestaltung überarbeiten will, ganz schön
ins Grübeln kommen. ;-)
Aber es gibt noch viel zu lernen und ich finde es immer wieder spannend, wie
viele verschiedene Ansätze es gibt, ein Problem zu lösen.
Schönen Gruß
Jörg
Re: POST ohne Formular absenden
am 30.06.2006 16:47:16 von Rainer Hinz
Jörg Driesner wrote:
> Hallo Anni,
> danke für die ausführliche Beschreibung.=20
Bitte, ist meine Standardantwort ;-)
> Mein Skript funktioniert zwar=20
> jetzt einwandfrei, aber so im nachhinein wäre es schon eleganter, in =
> derselben Datei zu bleiben, bis die Validierung durch ist.=20
Stimmt.
> Allerdings=20
> ist es z.Zt. für unsere Arbeitsweise von Vorteil, die Dateien nach=20
> Funktion zu trennen, da es mit der Trennung von HTML und PHP bei mir=20
> noch nicht weit her ist.=20
Ich würde grundsätzlich auf derartige Trennungen verzichten, dass hei=
ßt=20
entweder eine Datei komplett PHP oder komplett HTML, niemals mischen.
Gründe sind vielfältig, da wären:
* Lesbarkeit: Kaum ein Editor kann vernünftig strukturiert HTML und PHP=
=20
darstellen.
* Fehler und Erweiterbarkeit: PHP und HTML laden zum Schmuddel-code=20
ein, Beispiel:
VIELVIELVIELVIELVIEL HTML (über mehrere Bildschirmseiten)
VIELVIELVIELVIELVIEL HTML (über mehrere Bildschirmseiten)
Dieses Beispiel ist nicht ganz vollständig, die SERVERADRESSE war die=20
ursprüngliche URL, den Programmierer habe ich, nachdem er mir das=20
gezeigt hat, sofort von seinen Aufgaben entbunden und entfernt.
> Wenn ich dann Formular, Validierung und
> Ergebnisliste in ein- und derselben Datei habe, könnte der Kollege, d=
er=20
> die Gestaltung überarbeiten will, ganz schön ins Grübeln kommen. =
;-)
Das darf eigentlich dank css gar nicht der Fall sein ;-) Gerade bei=20
Formularen sollte man sich *einmal* mit dem Layouter zusammensetzen und=20
ein einheitliches Konzept erarbeiten und schriftlich fixieren. Meine=20
Projekte haben immer so im Schnitt zwischen 80 bis 140 unterschiedliche=20
Eingabemasken, vom Login bis hin zu komplexen Eingabemasken mit Ajax=20
Unterstützung usw. Das schöne ist, ich ändere an *einer* Stelle nic=
ht=20
nur das Aussehen der Formulare sondern auch den gesamten Code, wenn=20
z.B. mal ein Fehler entstanden ist wie z.B. ohne /> Endung.
> Aber es gibt noch viel zu lernen und ich finde es immer wieder spannend=
,=20
> wie viele verschiedene Ansätze es gibt, ein Problem zu lösen.
Ja, stimmt. Das obige lange Beispiel ist soweit funktional, aber weder=20
ein Ansatz noch eine Lösung, sondern schlicht ein Ärgernis, was kein =
Mensch mehr versteht.
Re: POST ohne Formular absenden
am 30.06.2006 19:29:40 von newsmail
Anni Schmidt wrote:
> ..., den Programmierer habe ich, nachdem er mir das
> gezeigt hat, sofort von seinen Aufgaben entbunden und entfernt.
Ui ui, also entfernt werden möchte ich nun aber wirklich nicht. ;-)
Schönen Gruß
Jörg.
Re: POST ohne Formular absenden
am 30.06.2006 20:15:52 von Rainer Hinz
Jörg Driesner wrote:
> Ui ui, also entfernt werden möchte ich nun aber wirklich nicht. ;-)
Nun, gesehen hast du den Code aber, oder?
Und sowas noch seitenweise und du wirst irre. Das dumme ist, dieser=20
Programmierer meinte auch noch 40 Euro pro Stunde bekommen zu wollen.
Re: POST ohne Formular absenden
am 30.06.2006 22:06:56 von Gregor Kofler
Anni Schmidt meinte:
> Und sowas noch seitenweise und du wirst irre. Das dumme ist, dieser
> Programmierer meinte auch noch 40 Euro pro Stunde bekommen zu wollen.
Und bei dem Code braucht man auch noch haufenweise Stunden...
Gregor
--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum
Re: POST ohne Formular absenden
am 30.06.2006 22:28:03 von Rainer Hinz
Gregor Kofler wrote:
> Anni Schmidt meinte:
>=20
>> Und sowas noch seitenweise und du wirst irre. Das dumme ist, dieser=20
>> Programmierer meinte auch noch 40 Euro pro Stunde bekommen zu wollen.
>=20
>=20
> Und bei dem Code braucht man auch noch haufenweise Stunden...
Und das Doppelte derer, wenn man dort nochmal "kurz was hinzufügen"=20
möchte... :-(
Gruß
Anni
Re: POST ohne Formular absenden
am 01.07.2006 00:05:09 von Gregor Kofler
Anni Schmidt meinte:
> Gregor Kofler wrote:
>> Anni Schmidt meinte:
>>
>>> Und sowas noch seitenweise und du wirst irre. Das dumme ist, dieser
>>> Programmierer meinte auch noch 40 Euro pro Stunde bekommen zu wollen.
>>
>>
>> Und bei dem Code braucht man auch noch haufenweise Stunden...
>
> Und das Doppelte derer, wenn man dort nochmal "kurz was hinzufügen"
> möchte... :-(
Und nachdem sich andere Programmierer sicher weigern, in dem Dreck zu
wühlen, hat sich der Original...öhm...programmierer auch gleich eine
Monopolstellung gesichert. Garnicht blöd...
Gruß, Gregor
--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum