Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Tabelle über Spalten sortieren

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Tabelle über Spalten sortieren

    Hallo zusammen

    Ich bin neu hier (und auch relativ unerfahren, was PHP und MySQL) anbetrifft.

    In den letzten zwei Tagen (bzw. Nächten) habe ich versucht, eine Funktion zu "basteln", mit welcher man eine gegebene Tabelle mit Klick auf den Tabellenkopf auf- oder absteigend sortieren kann. Das soll bei jeder Spalte möglich sein.

    Im Moment habe ich es ganz unelegant so gelöst, indem ich die ganze Seite 8x dupliziert und dann auf jeder Seite die Sortierung geändert habe. Ziemlich umständlich und mühsam. Das Ergebnis seht ihr hier.

    Das geht bestimmt professioneller und eleganter! Nur wie?

    Folgenden Code habe ich mal gebastelt (bzw. "ergoogelt):

    ====Code====

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <?php
    include ("dbconnect.php");
    ?>
    </head>
    <body>
    <?php
    function direction($dir)
    {
    if($dir="ASC")
    {
    return "DESC";
    }
    else
    {
    return "ASC";
    }
    }
    if($sort)
    {
    $dir=direction($dir);
    $abfrage="SELECT f0, f1, f6, f9, f11, f13, f15, f16 ORDER BY $sort $dir";
    }
    else
    {
    $abfrage="select f0, f1, f6, f9, f11, f13, f15, f16 FROM user1_3 ORDER BY f1";
    }
    $ergebnis = mysql_query($abfrage)or die("Anfrage fehlgeschlagen: " . mysql_error());
    ?>
    <p></p>
    <table width="700" border="0" bordercolor="#FFFFCC" >
    <tr>
    <td nowrap="nowrap" bordercolor="#FFFFCC"><strong> <?php echo "<a href= 'test3.php?sort=$dir\'>Nachname</a>" ?></strong></td>
    <td nowrap="nowrap" bordercolor="#FFFFCC"><strong>Vorname</strong></td>
    <td nowrap="nowrap" bordercolor="#FFFFCC"><strong>Motorrad</strong></td>
    <td nowrap="nowrap" bordercolor="#FFFFCC"><strong>Anz. Pers.</strong></td>
    <td nowrap="nowrap" bordercolor="#FFFFCC"><strong>Zimmer</strong></td>
    <td nowrap="nowrap" bordercolor="#FFFFCC"><strong>Anreise</strong></td>
    <td nowrap="nowrap" bordercolor="#FFFFCC"><strong>Abreise</strong></td>
    </tr>
    <?php
    while ($result = mysql_fetch_array($ergebnis)){
    ?>
    <tr>
    <td align="left" nowrap="nowrap" bordercolor="#FFFFCC"><?=$result['f1']?></td>
    <td align="left" nowrap="nowrap" bordercolor="#FFFFCC"><?=$result['f0']?></td>
    <td align="left" nowrap="nowrap" bordercolor="#FFFFCC"><?=$result['f9']?></td>
    <td align="left" nowrap="nowrap" bordercolor="#FFFFCC"><?=$result['f11']?></td>
    <td align="left" nowrap="nowrap" bordercolor="#FFFFCC"><?=$result['f13']?></td>
    <td align="left" nowrap="nowrap" bordercolor="#FFFFCC"><?=$result['f15']?></td>
    <td align="left" nowrap="nowrap" bordercolor="#FFFFCC"><?=$result['f16']?></td>
    </tr>
    <?php
    }
    ?>
    </table>
    <?php mysql_close($connection);?>
    <p>&nbsp;</p>
    </body>
    </html>

    ====Code Ende====

    Ich habe hier alles Überflüssige weggelassen und nur den Code für die Tabelle aufgeführt.

    Fragt bitte nicht, weshalb die Felder keine selbsterklärende Namen haben, sondern f0, f1, f2 etc. heissen. Ist so, und ich kann's leider nicht ändern.

    Ich habe das ganze mal "test3.php" benannt, und wie ihr hier seht, funktioniert der Code auch ohne Fehlermeldung - aber die Sortierung wird eben auch nicht gemacht.

    Ich bin für jede Hilfe dankbar!

    Gruss, vtx-rider

  • #2
    also ich les mal nicht durch was Du da fabriziert hast, aber deine vorgehensweise kann so sein:
    in deinem link in der tabelle gibst Du 2 parameter mit
    zb:
    ?sort_col=f1&sort_dir=desc
    dann machst Du Deine Abfrage wie folgt:
    $abfrage="select f0, f1, f6, f9, f11, f13, f15, f16 FROM user1_3 ORDER BY ".$_GET['sort_col']." ".$_GET['sort_dir'];
    Natürlich solltest Du noch das incoming data überprüfen auf alles Inhalt, dass Dir keine einen schlechten scherz spielt...
    Stichwort: SQL injection

    Kommentar


    • #3
      also ich les mal nicht durch was Du da fabriziert hast,
      Dito. Editiere doch bitte das Posting und ergänze [php] Tags.
      [COLOR="#F5F5FF"]--[/COLOR]
      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
      [COLOR="#F5F5FF"]
      --[/COLOR]

      Kommentar


      • #4
        Danke schon mal.

        Der erste Vorschlag hat nicht funktioniert (ich erhalte einen leeren Bildschirm, aber auch keine Fehlermeldung). Ausserdem möchte ich ja die Sortierrichtung mit jedem Klick immer umkehren können.

        Ich versuche den Code mal zu editieren:

        1. Ich habe eine Funktion, welche die Sortierrichtung steuert.

        ====Code====
        <?php
        function direction($dir)
        {
        if($dir ="ASC"){
        return "DESC";
        }else{
        return "ASC";
        }
        }
        ?>
        ====Code Ende====

        2. Dann folgt die Abfrage mit einer If-Anweisung
        Die Bedingung "If($sort)" überprüft, ob die Variable $sort mit einem Wert gefüllt ist.
        Wenn ja, wird der ja-Zweig der if-Abfrage ausgeführt. Die Tabelle wird so ausgegeben, dass die Spalte, deren Tabellenkopf angeklickt wurde, sortiert ausgegeben wird. Wenn nein, wird die Abfrage in der Standardsortierung ausgegeben.

        ====Code====
        <?php
        if($sort){
        $dir=direction($dir);
        $ergebnis=mysql_query("SELECT f0, f1, f6, f9, f11, f13, f15, f16 FROM user1_3 ORDER BY $sort $dir");
        }else{
        $ergebnis=mysql_query("SELECT f0, f1, f6, f9, f11, f13, f15, f16 FROM user1_3");
        }
        ?>
        ====Code Ende====

        3. Im Tabellenkopf folgt der Link
        Hier soll auf Klick die Sortierung nach dieser Spalte erfolgen, wobei bei jedem Klick die Sortierrichtung um gekehrt wird.

        ====Code====
        <?php echo "<a href= 'test3.php?sort=$ergebnis[f1]&dir=$dir'>Nachname</a>" ?>
        ====Code Ende====

        Wenn ich das ganze teste, wird die Tabelle richtig ausgegeben. Auch der Link im Tabellenkopf ist da. Nur wenn ich ihn anklicke, wird nicht sortiert. Fehlermeldung gibt es keine.

        Das Resultat könnt ihr hier sehen. Bei Klick auf den Tabellenkopf erscheint in der Browserzeile Folgendes: "http://www.vtx-treffen.ch/test3.php?sort=&dir=". Eine Fehlermeldung gibt es aber nicht.

        Ich hoffe, meine Frage ist nun klarer geworden. Wahrscheinlich liegt es nur an einem kleinen Detail... aber ich komme nicht drauf.

        Kommentar


        • #5
          Editiere doch bitte das Posting und ergänze [php] Tags.
          [COLOR="#F5F5FF"]--[/COLOR]
          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
          [COLOR="#F5F5FF"]
          --[/COLOR]

          Kommentar


          • #6
            Was meinst du damit?

            Kommentar


            • #7
              PHP-Code:
              //[noparse]
              echo 'in diesem Board kann Code durch [php] formatiert ausgegeben werden';
              // es existiert auch ein Button.
              //[/noparse] 
              [COLOR="#F5F5FF"]--[/COLOR]
              [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
              [COLOR="#F5F5FF"]
              --[/COLOR]

              Kommentar


              • #8
                Also nochmals...

                Ziel ist, die Tabelle auf der fraglichen Seite durch Klick auf den jeweiligen Spaltenkopf neu zu sortieren. dabei soll bei jedem erneuten Klick die Sortierrichtung wieder umgekehrt werden.

                Das möchte ich in drei Schritten erreichen.

                1. Funktion für die Steuerung der Sortierrichtung
                PHP-Code:
                <?php
                function direction($dir//Funktion, welche die Sortierrichtung steuert
                {
                if(
                $dir ="ASC"){
                      return 
                "DESC";
                 }else{
                           return 
                "ASC";
                         }
                }
                ?>


                2. MYSQL-Abfrage

                Die MYSQL-Abfrage ist mit einer If-Anweisung verbunden: Es soll geprüft werden, ob die Variable $sort mit einem Wert gefüllt ist.
                Wenn ja, soll der ja-Zweig der if-Abfrage ausgeführt. Die Tabelle wird dann so ausgegeben, dass die Spalte, deren Tabellenkopf angeklickt wurde, sortiert ausgegeben wird. Wenn nein, wird die Abfrage in der Standardsortierung ausgegeben.

                PHP-Code:
                 <?php
                 
                if($sort){ //Prüfung, ob $sort mit einem Wert gefüllt ist
                     
                $dir=direction($dir); //Inhalt von $dir aufrufen
                     
                $ergebnis=mysql_query("SELECT f0, f1, f6, f9, f11, f13, f15, f16 FROM user1_3 ORDER BY $sort $dir"); //DB-Abfrage sortiert nach $sort und $dir
                 
                }else{ //Falls $sort leer ist
                         
                $ergebnis=mysql_query("SELECT f0, f1, f6, f9, f11, f13, f15, f16 FROM user1_3"); //DB-Abfrage, Standard-Sortierung
                         
                }
                 
                ?>
                3. Link im Spaltenkopf
                Im Spaltenkopf folgt der Link. Hier soll auf Klick die Sortierung nach dieser Spalte erfolgen, wobei bei jedem Klick die Sortierrichtung um gekehrt wird.

                Soweit ich das überblicke, liegt das Problem hier.

                PHP-Code:
                <?php
                echo "<a href= 'test3.php?sort=$ergebnis[f1]&dir=$dir'>Nachname</a>" //Link, der die Seite mit der neuen Sortierung neu  aufruft
                ?>
                Wenn ich das ganze teste, wird die Tabelle richtig ausgegeben. Auch der Link im Tabellenkopf ist da. Nur wenn ich ihn anklicke, wird nicht sortiert. Fehlermeldung gibt es keine.

                Das Resultat könnt ihr hier sehen. Bei Klick auf den Tabellenkopf erscheint in der Browserzeile Folgendes: "http://www.vtx-treffen.ch/test3.php?sort=&dir=". Eine Fehlermeldung gibt es aber nicht.

                Kommentar


                • #9
                  <?php
                  echo "<a href= 'test3.php?sort=$ergebnis[f1]&dir=$dir'>Nachname</a>"
                  //Link, der die Seite mit der neuen Sortierung neu aufruft
                  ?> ergibt:

                  Teilnehmerliste Ride-In 2009=
                  das heisst Deine Variablen $ergebnis[f1] und $dir sind leer, bzw. nicht gesetzt

                  Kommentar


                  • #10
                    Zitat von HPR1974 Beitrag anzeigen
                    <?php
                    echo "<a href= 'test3.php?sort=$ergebnis[f1]&dir=$dir'>Nachname</a>"
                    //Link, der die Seite mit der neuen Sortierung neu aufruft
                    ?> ergibt:

                    Teilnehmerliste Ride-In 2009=
                    das heisst Deine Variablen $ergebnis[f1] und $dir sind leer, bzw. nicht gesetzt
                    Das erste Problem habe ich erkannt und gelöst:
                    PHP-Code:
                    $row=mysql_fetch_array($ergebnisMYSQL_ASSOC);
                    $field=key($row);
                    .
                    .
                    .
                    echo 
                    "<td><a href=\" test3.php?sort=$field&dir=$dir\">Name</a></td>"
                    Aber warum ist $dir nicht gesetzt bzw. leer? Die Funktion $dir ist definiert....

                    Kommentar


                    • #11
                      Zitat von vtx-rider Beitrag anzeigen
                      Aber warum ist $dir nicht gesetzt bzw. leer? Die Funktion $dir ist definiert....
                      weil du nirgens $dir="ASC"; oder $dir="ASC"; verwendest so wird deine Funktion zwar aufgerufen jedoch wird ihr nix übergeben sprich "" wo durch dein if nicht greift.

                      Kommentar


                      • #12
                        Zitat von sharp Beitrag anzeigen
                        weil du nirgens $dir="ASC"; oder $dir="ASC"; verwendest so wird deine Funktion zwar aufgerufen jedoch wird ihr nix übergeben sprich "" wo durch dein if nicht greift.
                        Danke.

                        Warum aber ist $dir nicht durch die Funktion definiert und durch die Abfrage mit der "If-Anweisung" gesetzt? Wie muss ich das sonst bewerkstelligen, dass $dir eintweder mit "ASC" oder "DESC" gefüllt ist (ich will ja bei jedem Klick die Sortierrichtung ändern)?

                        Kommentar


                        • #13
                          Versuch ma
                          PHP-Code:
                          ...
                          $dir="ASC";
                          if(
                          $sort){
                          ... 
                          Das sollte funktionier wenn ich dich richtig verstanden habe

                          Kommentar


                          • #14
                            Zitat von sharp Beitrag anzeigen
                            Versuch ma
                            PHP-Code:
                            ...
                            $dir="ASC";
                            if(
                            $sort){
                            ... 
                            Das sollte funktionier wenn ich dich richtig verstanden habe
                            Danke für den Hinweis

                            Funktioniert leider nicht... in der Browserzeile wird beim Aufruf der seite nun zwar "xy.php?sort=f1&dir=asc" angezeigt, aber die Sortierung bleibt unverändert. Der Wechsel von "asc" auf "desc" geht auch nicht.

                            D.h. irgend etwas mit dieser Funktion oder der If-Anweisung scheint da nicht zu funktionieren... aber mir ist nicht klar, was.

                            Gibt es eine andere Lösung, als ich mir vorgestellt habe?

                            Kommentar


                            • #15
                              ups mein Fehler du benötigst noch den Abfang per $_get fürs dir

                              Kommentar

                              Lädt...
                              X