datensaetze tabellarisch ausgeben, darunter navigation vor/zurueck

datensaetze tabellarisch ausgeben, darunter navigation vor/zurueck

am 29.09.2004 00:48:59 von Michael Rittweger

Hallo, allerseits!

Ich hab mir hier was gebastelt, was zwar auch funktioniert, bei dem ich aber
irgendwie das Gefühl habe, daß es eleganter gehen könnte.

Ablauf:

a) "suche_schnell.php" (Ja, es wird auch noch ein "suche_detail.php" geben)
besteht aus einem Formular mit 6 Feldern (1 ComboBox, 4 Checkboxen und 1
Textfeld). Mit "Abschicken" wird "suche_ergebnis.php" aufgerufen.

b) "suche_ergebnis.php" nimmt die 6 Parameter entgegen, bastelt einen
SQL-String mit WHERE-Klausel draus und stellt $count Datensätze ab $index
dar. $count wird, wenn 0, auf 5 gesetzt und $index ist beim ersten Aufruf
eben 0, also Anfang der Datensätze, und wird dann mit +/- $count bearbeitet
in der Navigation.

c) Unter den $count Datensätzen ist jetzt noch eine Navigation mit "Anfang",
"Zurück", "Vorwärts" und "Ende". Die Links auf diesen Texten zeigen
ebenfalls wieder auf "suche_ergebnis.php", nur daß eben neue Parameter für
$index und $count mit übergeben werden.

Nun ist es so, daß ich in "suche_ergebnis.php" ja der Reihe nach alle
_möglichen_ Parameter (bg, sg1, sg2, sg3, sg4 und sp) überprüfen muß, um
daraus ein WHERE basteln zu können. Das WHERE könnte z.Z. max. aussehen:
"((bg='m') AND (sg1='1' OR sg2='1' OR sg3='1' OR sg4='1') AND (sp LIKE
'24*'))

Bei der Gelegenheit werden die _gesetzten_ Parameter "gemerkt" und in
$argumente gespeichert. Dort könnte also z.B. "bg=m&sg2=1&sp=24" stehen.
$argumente ist danach also eigentlich das, was hinter ? in der URL mit
übergeben wurde, allerdings _ohne_ die Werte für $index und $count.

Klickt man jetzt auf z.B. "Weiter", dann wird erneut "suche_ergebnis.php"
aufgerufen. Hinter ? wird dann $argumente übergeben und zusätzlich z.B.
"ix=15&ds=5".

Und dann beginnt der ganze Spaß wieder von vorne. Also wieder alle Parameter
scannen, WHERE basteln, Navigation berechnen usw.

Bei den 6 Feldern der Schnell-Suche geht das irgendwie ja auch noch. Die
Parameter hinter der URL werden nicht allzu lang/viele und die Berechnung
des WHERE anhand der Parameter geht auch recht flott. Aber: Die Detail-Suche
wird eine ganze Menge an ComboBoxen und Checkboxen mehr haben. Die Tabelle
besteht aus knapp 100 Spalten, wovon die meisten CHAR(1)-Felder sind, die
für ja/nein-Speicherung diverser Attribute sind, nach denen eben später
wieder gesucht werden soll.

Nun frage ich mich, ob man das Scannen der Parameter und Basteln des WHERE
nicht irgendwie (ab der 2. Seite) überspringen und auf ein vorgefertigtes
Ergebnis zurückgreifen kann. Dabei würde ich nur höchst ungern den
SQL-String als GET-Parameter übergeben. Wenn es eine andere Möglichkeit
gibt, wäre das schon prima.

Könnte ich z.B. ein POST abschicken und den SQL-String in einem versteckten
Formularfeld übergeben? Aber ich bräuchte dann ja 4 Submit-Buttons. Oder
gibt's andere, bessere Möglichkeiten?

Gruß, Michael

Re: datensaetze tabellarisch ausgeben, darunter navigation vor/zurueck

am 29.09.2004 13:47:15 von Michael Rittweger

[Nachtrag]

> Könnte ich z.B. ein POST abschicken und den SQL-String in einem
> versteckten
> Formularfeld übergeben? Aber ich bräuchte dann ja 4 Submit-Buttons.

Ich habe die Navigation jetzt wirklich mal auf 4 kleine Formulare geändert,
die folgenden Inhalt haben:

"suche_ergebnis.php
?index=
&count="
method="post">




($vorwaerts und "Weiter" variieren natürlich.)

Das suche_ergebnis.php holt sich mit $filter=$_GET['sql'] den String. Ist er
leer, wird der String wie gehabt über die $_GET zusammengebastelt. Ist auch
der leer (alle Datensätze ohne Filterung anzeigen) wird $filter auf "1"
gesetzt. So wird beim 2. Aufruf ebenfalls die Abkürzung genommen. ("select *
from tabelle where 1" geht ja ohne Probleme.)

Funktioniert prächtig soweit. Ich bin trotzdem an Kommentaren interessiert,
ob es anders / besser gehen würde.

Wobei mich nebenbei auch interessieren würde, ob es die Möglichkeit gibt,
einen Button auch "ausgegraut", also "inaktiv", darzustellen. Bei den
textmäßigen Links war es ja kein Problem, mit grauer Farbe und ohne href
eine "inaktive" Navigation darzustellen. Bei den Buttons hab ich jetzt eben
ein   gesetzt, wenn es nicht vorwärts / zurück geht in den Datensätzen.
Ich bin aber kein Freund von Steuerelementen, die "mal da, mal nicht" sind.
Geht das nur über grafische Buttons, die ich selber basteln muß?

Gruß, Michael

Re: datensaetze tabellarisch ausgeben, darunter navigation vor/zurueck

am 29.09.2004 17:50:39 von Uli Honal

Michael Rittweger wrote:

> Ablauf:
> [..]

SQL-Statement jedesmal daraus neu erzeugt>

> Nun frage ich mich, ob man das Scannen der Parameter und Basteln des WH=
ERE
> nicht irgendwie (ab der 2. Seite) überspringen und auf ein vorgeferti=
gtes
> Ergebnis zurückgreifen kann. Dabei würde ich nur höchst ungern de=
n
> SQL-String als GET-Parameter übergeben. [..]

PHP-Sessions.

In der Session könntest Du die Parameter, die SQL-Query, oder sogar=20
das komplette Result-Array aufheben. Der Umgang mit Session zieht aber=20
auch Nachteile bzw. zusätzlichen Aufwand mit sich.


> Könnte ich z.B. ein POST abschicken und den SQL-String in einem verst=
eckten
> Formularfeld übergeben?=20

Möglich, aber genauso unsicher wie per GET - und damit auf keinen Fall =

empfehlenswert.


HTH,

-Uli.