Klick auf Link soll SQL Befehl ausführen
Matthias P.
- php
0 Vinzenz Mai0 Matthias P.0 Tom0 Vinzenz Mai0 Guy Gaz
0 Matthias P.
Hallo!
Bekomms einfach nicht hin und hoffe ihr könnt helfen.
Ich habe eine Tabelle mit 10 Spalten die ich mir wunderbar anzeigen lassen kann (results.php). Die erste Zeile ist die Spaltenüberschrift. Nun will ich dass beim Klicken auf eine Spaltenüberschrift die angezeigte Tabelle nach dieser Spalte sortiert (ORDER BY) wird. Doch ich bekomme es nicht hin.
Bin für Ansätze sehr dankbar!
Hallo,
Die erste Zeile ist die Spaltenüberschrift. Nun will ich dass beim Klicken auf eine Spaltenüberschrift die angezeigte Tabelle nach dieser Spalte sortiert (ORDER BY) wird.
Bin für Ansätze sehr dankbar!
a) sortiere clientseitig mit Javascript, z.B. Jürgen Berkemeiers TableSort.
b) sortiere serverseitig mit SQL.
Setze einen Request mit entsprechenden Parametern ab, die Dein Skript
verarbeiten kann.
Freundliche Grüße
Vinzenz
Hallo und vielen Dank zunächst für die Antwort:
a) sortiere clientseitig mit Javascript, z.B. Jürgen Berkemeiers TableSort.
b) sortiere serverseitig mit SQL.
Setze einen Request mit entsprechenden Parametern ab, die Dein Skript
verarbeiten kann.
Möchte es auf jeden Fall serverseitig, hätte ich gleich zu Beginn erwähnen sollen.
Leider habe ich es noch nicht hinbekommen. Sofern ich richtig informiert bin sollte der Link so aussehen:
<a href='results.php?sort=A'>Spalte A</a>
Das SQL Statement:
SELECT * FROM table ORDER BY $sort
Leider weiß ich nicht wie ich jetzt weiter vorgehen soll/muss.
Hello,
Möchte es auf jeden Fall serverseitig, hätte ich gleich zu Beginn erwähnen sollen.
Leider habe ich es noch nicht hinbekommen. Sofern ich richtig informiert bin sollte der Link so aussehen:<a href='results.php?sort=A'>Spalte A</a>
$sort = 'id'; ## Deine Standardsortierung voreinstellen
if (isset($_GET['sort']))
{
if ($_GET['sort'] == 'A')
{
$sort = spalteA;
}
elseif ($_GET['sort'] == 'B')
{
$sort = spalteB;
}
elseif ($_GET['sort'] == 'C')
{
$sort = spalteC;
}
}
Das SQL Statement:
SELECT * FROM table ORDER BY $sort
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo,
b) sortiere serverseitig mit SQL.
Setze einen Request mit entsprechenden Parametern ab, die Dein Skript
verarbeiten kann.
Leider habe ich es noch nicht hinbekommen. Sofern ich richtig informiert bin sollte der Link so aussehen:
<a href='results.php?sort=A'>Spalte A</a>
Nun hast Du in $_GET['sort'] den Wert 'A' stehen. Dies könntest Du wie folgt nutzen (Pseudocode):
Wenn der Sortierparameter mitgeliefert wurde
Vergleiche den Wert des Sortierparameters mit der Liste der erlaubten
Ist es 'A':
Ergänze " ORDER BY A"
Fertig
Ist es 'B':
Ergänze " ORDER BY B"
Fertig
...
Sonst:
Nicht erlaubter Wert für den Sortierparameter
Es wird keine ORDER-BY-Klausel angehängt
Fertig
Ende des Vergleiches
Ende Wenn
Alternativ und kürzer:
Wenn Sortierparameter mitgeliefert wurde und in Array der erlaubten Sortierparameter enthalten ist
Hänge entsprechende ORDER-BY-Klausel an
Ende Wenn
Auf keinen Fall darfst Du den Inhalt des Sortierparameters ungeprüft ins SQL-Statement einbauen, es könnte jemand über eine UNION alles Mögliche abfragen, was Du bestimmt nicht haben möchtest ...
Freundliche Grüße
Vinzenz
Hallo!
a) sortiere clientseitig mit Javascript, z.B. Jürgen Berkemeiers TableSort.
b) sortiere serverseitig mit SQL.
Setze einen Request mit entsprechenden Parametern ab, die Dein Skript
verarbeiten kann.
Möchte es auf jeden Fall serverseitig, hätte ich gleich zu Beginn erwähnen sollen.
Das stimmt.
Leider habe ich es noch nicht hinbekommen. Sofern ich richtig informiert bin sollte der Link so aussehen:
<a href='results.php?sort=A'>Spalte A</a>
Das SQL Statement:
SELECT * FROM table ORDER BY $sort
Drei Anmerkungen hierzu:
1. was steht in $sort
- ich gehe mal davon aus, das register_globals auf off steht (ansonsten hast Du bzw. Dein Hoster ein anderes Problem) und ein vorheriges Umkopieren von $_GET['sort']
nach $sort
ist i.d.R. sinnfrei.
2. Du solltest den Inhalte des GET-Parameters sort vor der Verwendung im SQL-Query-String validieren, damit Dir nichts untergeschoben werden kann.
3. Man kann sowohl auf- als auch absteigend sortieren - überlege, was beim 1. und beim 2. Benutzen des Links sinnvoll angewendet werden könnte -> ASC /DESC.
Ciao
GG
Besten Dank für die Antworten soweit!
Hat geklappt, nach Methode von Tom (letzte Antwort).
Nun kommt eine kleine Schwierigkeit hinzu. Geht auch ohne wäre aber nett, wenn: Beim 1. Klicken sortiert er nach ASC bzw. DSC und beim 2. klicken vice versa. Sodass man quasi ständig zwischen auf- und abwärts sortieren switchen kann.
Hallo!
Nun kommt eine kleine Schwierigkeit hinzu. Geht auch ohne wäre aber nett, wenn: Beim 1. Klicken sortiert er nach ASC bzw. DSC und beim 2. klicken vice versa. Sodass man quasi ständig zwischen auf- und abwärts sortieren switchen kann.
Dann übergib doch die aktuelle Sortierung (ASC oder DESC) mit an das Script und baue entsprechend den Link um z.B:
<a href="results.php?sort=A&orderType=ASC">Spalte A</a>
Wird der Parameter orderType mit ASC übergeben: sortiere so und setzte DESC in den Link ein und entsprechend anders herum.
Ciao
GG
Hello,
Nun kommt eine kleine Schwierigkeit hinzu. Geht auch ohne wäre aber nett, wenn: Beim 1. Klicken sortiert er nach ASC bzw. DSC und beim 2. klicken vice versa. Sodass man quasi ständig zwischen auf- und abwärts sortieren switchen kann.
Na, dann kommen bestimmt auch gleich noch die dritte und vierte und einzigen wirklichen Schwierigkeiten hinzu...
Aber erstmal zurück zu Deiner Frage.
Wenn Du nicht willst, dass es gleich wieder Auswirkungen auf das HTML und die Darstellung hat, dann baue einfach je einen Link für abwärts und für aufwärts ein. Das wäre dann unabhängig vom Status Quo rein imperativ möglich.
Anderenfalls musst Du auch in der "Ausgabeabteilung", die den Code für die steuernden Links generiert, diese Information zur Verfügung haben. Und Du benötigst eine Zustandsorientierung dafür. Die kannst Du Dir auf unterschiedliche Arten herstellen. Die beste wäre sicherlich eine Session dafür zu führen. In den Sessionvariablen kannst Du Dir dann den letzten Zustand merken. Aber bedenke, dass am Client ein Browserfenster ggf. auch mehrfach geöffnet sein kann. Das sieht der Server erstmal nicht. Du musst also die Zustände dann möglichst auch einem speziellen Fenster und nicht nur einer Fensterart zuordnen können.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg