Ankündigung

Einklappen
Keine Ankündigung bisher.

Tabelle sortieren

Einklappen

Neue Werbung 2019

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

  • Tabelle sortieren

    Hallo, ich erstelle aus einer sql Datenbank eine dynamische Tabelle. Jetzt würde ich gern die Spalten sortieren. Die Spaltenüberschrift ist nicht dynamisch. Wie kann ich es realisieren, dass ich beim Kick auf die jeweilige Zelle des Tabellenkopfes sortiert wird, absteigend reicht mir in diesem Fall aus.

    PHP-Code:

    <?php

    $server    
    "localhost";
    $user    "use";
    $pass    "pass";
    $database "db";
    $table    "Statistik";

    $verbindung mysql_connect($server$user$pass)
        or die (
    "verbindung zu sql geht nicht");

    mysql_select_db($database$verbindung);


    // SQL-Anfrage: Ergebnis ist stets eine Tabelle
    $sql "SELECT NName, SpieleG, ToreG, MinutenG, GelbeG, RoteG, Spiele, Tore, Minuten, Gelbe, Rote FROM $table";

    // Anfrage ausführen
    $result=mysql_query($sql) or die("Fehler im SQL-Kommando $sql");


    // Tabelle in HTML darstellen
    echo "<table id=centeredtable>\n";
    echo 
    "<tr id=firstline>
                    <td class=name><div>Name</div></td>
                    <td><div>Spiele gesamt</div></td>
                    <td><div>Tore gesamt</div></td>
                    <td><div>Minuten gesamt</div></td>
                    <td><div>Gelbe gesamt</div></td>
                    <td><div>Rote gesamt</div></td>
                    <td class=spiele><div>Spiele 10/11</div></td>
                    <td class=tore><div>Tore 10/11</div></td>
                    <td class=minuten><div>Minuten 10/11</div></td>
                    <td class=gelbe><div>Gelbe 10/11</div></td>
                    <td class=rote><div>Rote 10/11</div></td>
          </tr>"
    ;
    while (
    $row=mysql_fetch_row($result))
    {
    echo 
    "<tr class=evenline>";
    foreach (
    $row as $item// jedes Element $item der Zeile $row durchlaufen
    echo "<td>$item</td>";
    echo 
    "</tr>\n";
    }
    echo 
    "</table>\n";
    ?>
    Vielen Dank


  • #2
    Zunächst einmal solltest du die Spaltenüberschriften in einem <thead> Bereich gruppieren, um sie semantisch von den Daten zu trennen.

    SELFHTML: HTML/XHTML / Tabellen / Aufbau einer Tabelle

    Dann kannst du, wenn nur die angezeigten Daten sortiert werden sollen und keine neue Datenbankabfrage nötig ist, das ganze mit JavaScript sortieren lassen. Da gibt es z.B. für jQuery fertige Lösungen:

    Plugins | jQuery Plugins
    @fschmengler - @fschmengler - @schmengler
    PHP Blog - Magento Entwicklung - CSS Ribbon Generator

    Kommentar


    • #3
      Danke, habe das jetzt mit tablesorter probiert, leider get es nichts. Ich bin mir aber auch nicht sicher ob ich thead und tbody richtig palziert hab. Kannst Du bitte mal drüberschauen.

      PHP-Code:
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
          <script type="text/javascript" src="../jquery-latest.js"></script>
          <script type="text/javascript" src="../jquery.tablesorter.min.js"></script>
          <script type="text/javascript">
          
          $(document).ready(function() 
          { 
              $("#centeredtable").tablesorter(); 
          } 
      ); 
          </script>

      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <title>Spielerstatistik</title>
      <link rel="stylesheet" type="text/css" href="style.css">
      </head>

      <body>

      <?php

      $server    
      "localhost";
      $user    "user";
      $pass    "pass";
      $database "db";
      $table    "Statistik";

      $verbindung mysql_connect($server$user$pass)
          or die (
      "verbindung zu sql geht nicht");

      mysql_select_db($database$verbindung);


      // SQL-Anfrage: Ergebnis ist stets eine Tabelle
      $sql "SELECT NName, SpieleG, ToreG, (ToreG / SpieleG) AS durchschnitt, MinutenG, GelbeG, RoteG, Spiele, Tore, Minuten, Gelbe, Rote, (Tore / Spiele) AS durchschnitt, (Minuten / Tore) AS durchschnitt  FROM $table";

      // Anfrage ausführen
      $result=mysql_query($sql) or die("Fehler im SQL-Kommando $sql");


      // Tabelle in HTML darstellen
      echo "<table id=centeredtable>\n";
      echo 
      "<thead>
              <tr id=firstline>
                      <td class=name><div>Name</div></td>
                      <td><div>Spiele gesamt</div></td>
                      <td><div>Tore gesamt</div></td>
                      <td><div>Tore/Spiel gesamt</div></td>
                      <td><div>Minuten gesamt</div></td>
                      <td><div>Gelbe gesamt</div></td>
                      <td><div>Rote gesamt</div></td>
                      <td class=spiele><div>Spiele 10/11</div></td>
                      <td class=tore><div>Tore 10/11</div></td>
                      <td class=minuten><div>Minuten 10/11</div></td>
                      <td class=gelbe><div>Gelbe 10/11</div></td>
                      <td class=rote><div>Rote 10/11</div></td>
                      <td class=rote><div>Tore pro Spiel</div></td>
                      <td class=rote><div>Minuten pro Tor</div></td>
                </tr>
          </thead>"
      ;
      while (
      $row=mysql_fetch_row($result))
      {

      echo 
      "<tbody><tr class=evenline>";
      foreach (
      $row as $item// jedes Element $item der Zeile $row durchlaufen
      echo "<td>$item</td>";
      echo 
      "</tr></tbody>\n";
      }
      echo 
      "</table>\n";
      ?>
      </body>
      </html>
      Danke bin echt am verzweifeln.

      Kommentar


      • #4
        Der Fehler liegt im <tbody> innerhalb in der Schleife - <tbody> gibt es nur einmal je Table. Bitte den Link beachten, der Dir da zugestellt wurde - das geht daraus hervor. Für Dich würde das simplifiziert so aussehen - beachte, dass es im thead th ist und nicht td!!:

        Code:
        <table>
          <thead>
            <tr>
              <th>...</th>
              <th>...</th>
              <th>...</th>
            </tr>
          </thead>
          <tbody>
            <?PHP // HIER IST DEINE TR-ANSAMMLUNG ?>
          </tbody>
        </table>
        Meine persönliche Bitte für Deine individuelle Zukunft: Trenne PHP von HTML - probiere, alle PHP Abfragen vor dem DOCTYPE zu machen, da es übersichtlicher wird. Darüber hinaus sollten Zugangsdaten zentral an einer Stelle liegen - so erspart man sich spätere Änderungen auf allen 50.000 Seiten, die die Zugangsdaten evtl. "hart kodiert" enthalten. (wenn nur eine Seite, dann klack, zisch, grill ...)
        Manche Menschen sind wie Schnitzel - nicht zäh, aber beidseitig bekloppt!

        Kommentar


        • #5
          Danke jetzt geht es.

          Kommentar


          • #6
            Zitat von Curanai Beitrag anzeigen
            Der Fehler liegt im <tbody> innerhalb in der Schleife - <tbody> gibt es nur einmal je Table.
            Das mag zwar in diesem Fall angebracht sein - aber theoretisch gibt es so viele TBODYs wie du willst, lediglich THEAD/TFOOT gibt es nur ein mal pro Tabelle.

            Kommentar

            Lädt...
            X