Matthias P.: Klick auf Link soll SQL Befehl ausführen

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!

  1. 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

    1. 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.

      1. 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>

        hier fehlt Dir also ein Stück Code:

        $sort = 'id';   ## Deine Standardsortierung voreinstellen

        und wenn jetzt eine Anweisung zum Sortieren im Link enthalten ist,

        diese feststellen und ggf. umstellen

        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

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
      2. 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

      3. 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

        --
        "If I do not seek to understand what is happening here
        - then I've got peanuts in my head!"
        (I. Hosein)
  2. 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.

    1. 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&amp;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

      --
      "If I do not seek to understand what is happening here
      - then I've got peanuts in my head!"
      (I. Hosein)
    2. 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...

      • Die Kombination von Sortierspalten
      • Die Wahl des Aufsetzpunktes in der Liste

      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

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de