Announcement

Collapse
No announcement yet.

Teile einer Datenbanktabelle anzeigen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Teile einer Datenbanktabelle anzeigen

    Hi @all,

    ich bin neu hier und mit php-Programmierung habe ich wenig Erfahrung! Vielleicht kann mir jemand bei meinem Problem helfen.

    Ich möchte mehrere Daten in einer Datenbanktabelle speichern aber in verschiedenen Tabellen einer HTML-Datei anzeigen.
    Das folgende Script erzeugt eine Tabelle in der alle 9 Spalten der Datenbanktabelle angezeigt werden.

    Mein Problem besteht darin, dass ich die Tabelle "so" anzeigen möchte aber nur einige Spalten (z.B id, eintrag_1, eintrag_2, eintrag_3 und eintrag_4) sollen auf der Webseite ausgefüllt werden.

    <?php

    @mysql_connect("localhost", "root", "pw");

    @mysql_select_db("db_1");

    $sql = "SELECT * FROM tabelle_x";

    $result = mysql_query($sql);

    $zeilen = mysql_num_rows($result);

    echo "<p>$zeilen Einträge:</p>\n";

    // Tabellendefinition:

    echo "<table border='1' cellspacing='0'>\n";

    // so soll die Kopfzeile der Tabelle aussehen:

    echo "<tr><th>id</th><th>eintrag_1</th>" .

    "<th>eintrag_2</th><th>eintrag_3</th><th>eintrag_4</th>" .

    "<th>eintrag_5</th><th>eintrag_6</th><th>eintrag_7</th>" .

    "<th>eintrag_8</th><th>eintrag_9</th></tr>\n";

    // while-Schleife Anfang

    while ($row = mysql_fetch_assoc($result)) {

    echo "<tr>"; // hier soll eine Zeile erzeugt werden:

    // foreach Anfang:

    foreach ($row as $key => $value) {

    echo "<td>$value&nbsp;</td>";

    } // foreach Ende:

    echo "</tr>"; // Zeile wird geschlossen:

    } // while Ende

    echo "</table>\n"; // Tabelle wird geschlossen.

    mysql_close();

    ?>

    Viele Grüße
    Jürgen W.

  • #2
    Hallo Jürgen,

    grundsätzlich würde ich immer dafür plädieren Layout und Logik voneinander zu trennen. Dein Code wird lesbarer (auch für dich) und spätere Layoutänderungen sind leichter machbar. Am besten und saubersten sind dafür Templates geeignet - aber das geht hier sicherlich zu weit. Ich würde mir deshalb zuerst Gedanken machen, wie soll das fertige HTML aussehen und was sind davon feste bestandteile und welche müssen dynamisch (durch die Programmlogik) gefüllt werden. Mein Vorschlag wäre zur Darstellung einer DB-Tabelle auch eine HTML-Tabelle zu nehmen. Dort hast du dann einen festen Bereich für das &lt;table&gt; und die erste Zeile als Überschrift, danach kommt eine unbestimmte Anzahl an Datenzeilen mit festen Spalten und veränderlichen Werten. Zum Schluß dann noch das schließende &lt;/table&gt; Für jeden dieser Blöcke würde ich eine Variable anlegen:<code>
    $TabOpen = '&lt;table border="1"&gt;';
    $TabClose = '&lt;/table&gt;';
    $TabHead = '&lt;tr&gt;&lt;td&gt;id&lt;/td&gt;&lt;td&gt;eintrag_1&lt;/td&gt;&lt;td&gt;eintrag_2&lt;/td&gt;...&lt;/tr&gt;';
    $TabRow = '&lt;tr&gt;&lt;td&gt;{id}&lt;/td&gt;&lt;td&gt;{eintrag_1}&lt;/td&gt;&lt;td&gt;{eintrag_2}&lt;/td&gt;...&lt;/tr&gt;';</code>
    Die Einträge der Art {id} in $TabRow sind dabei Platzhalter, die später durch die tatsächlichen Werte aus der DB ersetzt werden und der Einfachheithalber den Namen der DB-Felder entsprechen sollten.
    Jetzt kommt nur noch die Logik (den Teil für den Datenbankconnect lass ich mal weg):<code>
    ...
    // Ausgabe
    echo $TabOpen;
    echo $TabHead;
    while ($row = mysql_fetch_assoc($result))
    {
    $RowLine = $TabRow;
    while (list($key, $val) = each($row))
    {
    $RowLine = str_replace('{'.$key.'}', $val, $RowLine);
    }
    echo $RowLine;
    }
    echo $TabClose;</code>
    Für jede Zeile des Cursor wird die äußere Schleife einmal durchlaufen und jeweils die Definition für die Ausgabezeile in $RowLine geladen. In der Inneren Schleife wird dann für jede Spalte in dem Cursor der zugehörige Platzhalter ersetzt. Gibt es den Platzhalter nicht - wird einfach nichts ersetzt. Somit hast du die Möglichkeit durch einfache Änderung von $TabHead und $TabRow Spalten in die Ausgabe aufzunehmen oder zu entfernen <b>ohne</b> an der Programmlogik etwas ändern zu müssen. Nachteil: Gibt es sehr viel mehr Felder im Cursor als dann tatsächlich ausgegeben werden, wird die innere Schleife natürlich entsprechend oft "sinnlos" durchlaufen. Wenn dies nicht mehr zu vernachlässigen ist, dann sollte man dann doch die Logik ändern und z.B. das SQL-Statement anpassen.

    Gruß Fal
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Vielen Dank, :-)

      aber ich bin ein absoluter "Anfänger" und komme
      damit nich richtig klar.
      Würde das gesammte Script dann so aussehen ?

      <?php
      @mysql_connect("localhost", "root", "pw");
      @mysql_select_db("db_1");
      $sql = "SELECT * FROM tabelle_x";
      $TabOpen = '<table border="1">';
      $TabClose = '</table>';
      $TabHead = '<tr><td>id</td><td>eintrag_1</td>
      <td>eintrag_2</td>...</tr>';
      $TabRow = '<tr><td>{id}</td><td>{eintrag_1}</td>
      <td>{eintrag_2}</td>...</tr>';
      // Ausgabe
      echo $TabOpen;
      echo $TabHead;
      while ($row = mysql_fetch_assoc($result))
      {
      $RowLine = $TabRow;
      while (list($key, $val) = each($row))
      {
      $RowLine = str_replace('{'.$key.'}', $val, $RowLine);
      }
      echo $RowLine;
      }
      echo $TabClose;
      ?>

      Viele Grüße
      Jürge

      Comment


      • #4
        Hallo Jürgen,

        wenn die Felder in deiner Tabelle 'id', 'eintrag_1' und 'eintrag_2' heißen, dann JA. Das Ersetzen der Platzhalter ist casesensitiv - bitte beachten!

        Gruß Fal
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          Hallo Falk,

          so sieht jetzt der letzte Teil des php-Scripts aus:

          ...

          $TabOpen = '<table border="1">';
          $TabClose = '</table>';
          $TabHead = '<tr><td>Name</td><td>Datum</td><td>Zeit</td></tr>';
          $TabRow = '<tr><td>{Name}</td><td>{Datum}</td><td>{Zeit}</td></tr>';
          // Ausgabe
          echo $TabOpen;
          echo $TabHead;
          while ($row = mysql_fetch_assoc($result))
          {
          $RowLine = $TabRow;
          while (list($key, $val) = each($row))
          {
          $RowLine = str_replace('{'.$key.'}', $val, $RowLine);
          }
          echo $RowLine;
          }
          echo $TabClose;
          ?>

          ...

          Leider wird nur der Tabellenkopf der zweiten Tabelle angezeigt! Das die Datenbank schon Daten enthält kann man an der oberen Tabelle sehen. Wenn du möchtest kannst du dir das auf der Seite, die du über den folgenden Link erreichst, einmal anschauen.

          http://test32607.test-account.com/index.php

          Gruß Jürge

          Comment


          • #6
            Hallo Falk,
            so sieht jetzt der letzte Teil des php-Scripts aus:

            ...

            $TabOpen = '<table border="1">';
            $TabClose = '</table>';
            $TabHead = '<tr><td>Name</td><td>Datum</td><td>Zeit</td></tr>';
            $TabRow = '<tr><td>{Name}</td><td>{Datum}</td><td>{Zeit}</td></tr>';
            // Ausgabe
            echo $TabOpen;
            echo $TabHead;
            while ($row = mysql_fetch_assoc($result))
            {
            $RowLine = $TabRow;
            while (list($key, $val) = each($row))
            {
            $RowLine = str_replace('{'.$key.'}', $val, $RowLine);
            }
            echo $RowLine;
            }
            echo $TabClose;
            ?>

            ...

            Leider wird nur der Tabellenkopf der zweiten Tabelle angezeigt! Das die Datenbank schon Daten enthält kann man an der oberen Tabelle sehen. Wenn du möchtest kannst du dir das auf der Seite, die du über den folgenden Link erreichst, einmal anschauen.

            http://test32607.test-account.com/index.php

            Gruß Jürge

            Comment


            • #7
              Hallo Jürgen,

              du kannst die beiden Tabelle nicht nacheinander füllen! Den Cursor kannst du mit <i>while ($row = mysql_fetch_assoc($result))</i> nur <b>einmal</b> abrufen. Sprich, im zweiten Teil ist der Cursor sozusagen "leer gesaugt" und die Tabelle bleibt leer. Hier hilft nur:
              a) die Datenbankabfrage ein zweites mal ausführen
              b) die konsequente Arbeit mit Templates

              Wenn a) und b) nicht in Frage kommen, dann bleibt dir nur die komplette Zwischenspeicherung der Daten aus dem Cursor in z.B. einem Array. Dieses kannst du dann für den zweiten Durchlauf einfach zurücksetzen (reset).

              Ich poste mit Absicht keinen fertigen Code, da du ja "Anfänger" bist und lernen möchtest . Hier gibt es übrigens eine gute Hilfe zu PHP:
              <a href="http://dynamicwebpages.de/php/">Das deutschsprachige PHP Handbuch</a>

              Gruß Fal
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment


              • #8
                Hallo Falk,

                vielen Dank für deinen Hinweis ! :-)
                Ich sehe da wartet noch eine ganze Menge Arbeit auf mich, mal sehen ob ich da "durchsteige".

                Gruß Jürgen

                Comment


                • #9
                  Hallo Falk,

                  vielen Dank für deinen Hinweis ! :-)
                  Ich sehe da wartet noch eine ganze Menge Arbeit auf mich, mal sehen ob ich da "durchsteige".

                  Hast du eventuell eine Buchempfehlung für mich ?

                  Gruß Jürgen

                  Comment


                  • #10
                    Eine aktuelle Buchempfehlung habe ich nicht. Außer das Handbuch vielleicht zum Nachschlagen von Syntax und Funktionen.
                    Ein gutes Online-Tutorial sind z.B. die Seiten von <a href="http://selfphp.de">SELFPHP</a>. Dort findest du mit Sicherheit auch ein paar Buchempfehlungen.

                    Gruß Fal
                    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                    Comment

                    Working...
                    X