kostenloser Webspace werbefrei: lima-city


Datenbank Tabelle in besonderer Form ausgeben

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    jhb

    Kostenloser Webspace von jhb

    jhb hat kostenlosen Webspace.

    Hi,

    bin noch recht neu hier und hab schon gleich eine Frage.

    Ich habe eine Tabelle in einer Datenbank, und das ausgeben an sich ist auch kein Thema, ich möchte es aber etwas anders ausgeben als in einer Stumpfen Tabelle, ich versuche es mal zu verdeutlichen:

    Ein Datensatz soll in so eine "Minitabelle":
    Name
    Bild
    Text


    Und diese Minitabellen (MT) soll dann in eine Große Tabelle die etwa wie folgt aussehen soll:
    |MT|MT|MT|MT|MT|
    |MT|MT|MT|MT|MT|
    |MT|MT|MT|MT|MT|
    |MT|MT|MT|MT|MT|



    Diese Große Tabelle soll sich allerdings Automatisch in der Anzahl der Zeilen erweitern, je nachdem
    wie viele Datensätze vorhanden sind.
    Zudem soll die Tabelle Rekursiv aufgebaut sein, (Also der letzte Eintrag in der Datenbank soll oben links stehen).

    Das ganze bereitet mir seit ner weile ganz schönes Kopfzerbrechen, vielleicht könnt ihr mir hier ja weiter helfen.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Das kannst du per foreach Schleifen und intergrierter if-Schleife machen, wenn ich es richtig verstehe.

    Das würde so aussehen:

    $i = 1;

    $num = count($text);

    $rows = 5;

    $tabs = ($num / $rows);

    echo "<table>";
    foreach($text As $id=>$var) {
    $p = $i % $tabs;
    echo "<td><table><tr><td>" . $var['Name'] . "</td></tr><tr><td>" . $var['bild'] . "</td></tr><tr><td>" . $var['text'] . "</td></tr></table></td>";
    if($p == 0) {
    echo "</tr><tr>";
    }
    $i++;
    }
    echo "</table>";

    Das würde dann so aussehen.

    http://vctb.lima-city.de/images/table.png

    Beitrag zuletzt geändert: 18.7.2012 8:18:12 von vctb
  4. Autor dieses Themas

    jhb

    Kostenloser Webspace von jhb

    jhb hat kostenlosen Webspace.

    Wow, danke schon mal,

    Ich bekomme noch eine Fehlermeldung die ich nicht wegbekomme:
    Warning: Invalid argument supplied for foreach()

    schätze das liegt an dem $id , wobei ich nicht genau weiß was der "Inhalt" ist bzw. sein sollte. den Rest habe ich schon soweit auf mein Script angepasst.
  5. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Was hast du denn in “text“ stehen? Dass sollte ein Array sein...
    @vctb: jaja, die “if-Schleife“ ;-)
  6. ne bessere Lösung ist mir auf die Schnelle nicht eingefallen ;)

    Die foreach Variante mit der $text As $id=>$var Zuweisung nimmst du wenn du als Ausgangswert ein assoziatives Array hast. Was beim Auslesen aus einer Datenbank in der Regel der Fall ist.

    $id bekommt hier nicht das Datenfeld sondern den Feldnamen, denn kannst du dann z.B. als Tabellenüberschrift nehmen. Das Datenfeld wird an $var übergeben. Zum Fehler du kannst einfach deine Daten aus der Datenbank lesen und dann direkt durch die Schleife abarbeiten lassen.

    Beitrag zuletzt geändert: 17.7.2012 23:43:34 von vctb
  7. Autor dieses Themas

    jhb

    Kostenloser Webspace von jhb

    jhb hat kostenlosen Webspace.

    Oh okay, ja jetzt geht es schon ein bisschen, es wird eine Tabelle mit einer Spalte ausgegeben mit folgendem Inhalt:

    7
    7
    7
    -
    2
    2
    2
    -
    L
    L
    L
    -
    L
    L
    L

    und ich bekomme ein Division by zero Error in der Zeile mit $p = $i % $tabs;

    Tut mir leid falls ich noch etwas Amateurhaft nachhake aber ich tuhe mich bei fremdem Code immer noch ziemlich schwer.
  8. t*************e

    wenn du es verschönern willst probiere es doch mit css oder verstehe ich das falsch?
  9. Autor dieses Themas

    jhb

    Kostenloser Webspace von jhb

    jhb hat kostenlosen Webspace.

    Ja das ist auch soweit kein Problem, aber man kann die Datenbank nun mal nicht in Css statt php ausgeben.(oder doch ? ;-)) derzeit ist das Problem das er etwas durch 0 teilen will ich aber nicht genau weiß was, und das er Sachen in die "Minitabellen" schreibt die überhaupt nicht in der Datenbank sind (Die einzelnen zahlen und Buchstaben wie oben aufgelistet)
  10. jhb schrieb:
    Ja das ist auch soweit kein Problem, aber man kann die Datenbank nun mal nicht in Css statt php ausgeben.(oder doch ? ;-))

    In einer .php-Datei kannst du HTML und CSS ausführen.

    Beitrag zuletzt geändert: 18.7.2012 17:30:31 von webfreclan
  11. Dann versuch es mal damit, es ist direkt an eine Datenbank angelehnt:

    //Datenbankconnect Alle Werte anpassen
    $sql = mysql_connect('DB_HOST', 'DB_USER', 'DB_PASSWORD');
    $sql = mysql_select_db('DATENBANKNAME');
    // MySQL-Query Tabellenname anpassen
    $qrystring = ('SELECT * FROM Tabellenname');
    
    $sql = mysql_query($qrystring);
    //einfacher Zähler um die Durchläufe zu zählen
    $i = 1;
    
    // Anzahl der angezeigten Tabellenreihen
    $reihen = 3;
    
    // liesst aus wieviele Zeilen in der Datenbank liegen
    $db_zeilen = mysql_num_rows($sql);
    
    // Brechnung für die Tabellenanzeige
    $div = $db_zeilen / $reihen;
    
    echo '<table border="1"><tr>';
    
    // in der Schleife werden alle DB-Zeilen einzeln eingelesen und ausgegeben
    while ($var = mysql_fetch_array( $sql )) {
    
    // $var['name/bild/text'] musst du auf deine Tabellenspaltennamen ändern
      echo "<td>". $var['name'] . "</td>";
      echo "<td>". $var['bild'] . "</td>";
      echo "<td>". $var['text'] . "</td>";
    
    // Berechnung für die neue Tabellenzeile
      $p = $i % $div;
    
    // Tabellenzeile schließen und neu öffnen
      if($p == 0) {
    	echo '</tr><tr>';
      }
    
      $i++;
      }
    
    echo "</tr></table>";
     
    mysql_free_result( $sql );
    mysql_close($sql);


    Ich hoffe du kommst damit klar und es sind keine größeren Fehler darin...

    Gruß

    Beitrag zuletzt geändert: 19.7.2012 23:35:01 von vctb
  12. Autor dieses Themas

    jhb

    Kostenloser Webspace von jhb

    jhb hat kostenlosen Webspace.

    Hmm also das Script funktioniert, danke für die mühe, aber es kommt jetzt wieder etwas vollkommen anderes raus, dort wird die Datenbank einfach nur in einer Tabelle ausgegeben. Das obere Script ist eher das was ich suche. Ich poste einfach mal was ich aus dem Oberen gemacht habe:

    $db_sel = mysql_select_db( $db )
       or die("Auswahl der Datenbank fehlgeschlagen");
     
    $sql = "SELECT * FROM projekte ORDER BY ID DESC";
     
    $db_erg = mysql_query( $sql );
    if ( ! $db_erg )
    {
      die('Ungültige Abfrage: ' . mysql_error());
    }
    
    $db = mysql_fetch_array( $db_erg, MYSQL_ASSOC);
     
     #
    
     $i = 1;
    
     $num = count($db);
    
    
     $rows = 5;
    
     $tabs = ($num / $rows);
    
     echo "<table border='0'>";
     foreach($db As $id=>$var) {
     $p = $i % $tabs;
     if($p == 1) {
     echo "<tr>";
     }
     echo "<td><a href=" . $db['link'] . "><table border='0' style='border:1px solid #000000;'><tr><td>" . $db['name'] . "</td></tr><tr><td><img src=" . $db['image'] . "></td></tr><tr><td>" . $db['description'] . "</td></tr></table></a></td>";
     if($p == 0) {
     echo "</tr>";
     }
     $i++;
     }
     echo "</table>";
     
     #


    Die Verbindungsdaten hab ich jetzt mal weggelassen. Und in der Tabelle befindet sich außerdem noch eine Spalte "ID" welche aber nicht mit ausgelesen werden soll.
  13. echo '<td><a href=" . $db['link'] . "><table>
    echo "<tr><td>" . $db['name'] .  "</td></tr>";
    echo "<tr><td>" . $db['image'] .  "</td></tr>";
    echo "<tr><td>" . $db['description'] . "</td></tr></table></a></td>";


    damit muss du den Teil in der while-Schleife ersetzen dann müsste es so aussehen wie vorher.

    Mit mysql_fetch_array liesst du meines Wissens nach immer nur eine Zeile der Datenbank aus. Mehrere Zeilen liesst du über
    mysql_fetch_all aus.

    Die Zeile:
    $db = mysql_fetch_array( $db_erg, MYSQL_ASSOC);


    sollte also so:
    $db = mysql_fetch_all( $db_erg, MYSQL_ASSOC);

    aussehen.

    Beitrag zuletzt geändert: 19.7.2012 23:34:40 von vctb
  14. Autor dieses Themas

    jhb

    Kostenloser Webspace von jhb

    jhb hat kostenlosen Webspace.

    Hmm ja okay, jetzt habe ich eine Spalte aber es ist immer noch nicht das was es mal werden soll, der Screenshot den du in deiner erste Antwort hast, so ist es eigendlich genau so wie es soll. nur das ich eventuell 5 statt 4 Spalten im gesamt Ergebnis haben will, das sehe ich aber erst dann wenn ich es in die HP einbaue und ich sinnvollen Content habe.

    und mysql_fetch_all gibt es meines Wissens nach gar nicht, hab da auch sogut wie gar nichts zu gefunden.
    mysql_fetch_array sollte eigendlich die ganze Tabelle in ein Array packen, hat es jedenfalls bis jetzt immer.
  15. Bei dem Code kommt bei mir eine Tabelle wie aus meinem ersten Beispiel raus...

    echo '<table border="1"><tr>';
    while ($db = mysql_fetch_array( $sql )) {
    	echo '<td><a href="' . $db['link'] .  '"><table>';
    	echo "<tr><td>" . $db['name'] . "</td></tr>";
    	echo "<tr><td>" . $db['image'] . "</td></tr>";
    	echo "<tr><td>" . $db['description'] . "</td></tr></table></a></td>"; 
      $p = $i % $div;
      if($p == 0) {
    	echo '</tr><tr>';
      }
      $i++;
      
    
    }
    echo "</table>";


    Mit der Funktion mysql hab ich schon ewig nicht mehr gearbeitet, da müsste ich erstmal nen drüber grübeln.

    Beitrag zuletzt geändert: 18.7.2012 19:01:38 von vctb
  16. Autor dieses Themas

    jhb

    Kostenloser Webspace von jhb

    jhb hat kostenlosen Webspace.

    Also bei mir sieht das so aus:

    http://emil-online.square7.ch/Sonstiges/tabelle.png

    Beitrag zuletzt geändert: 18.7.2012 19:32:44 von jhb
  17. So der nächste Versuch :)....
    $n++;
    
    while ($db = mysql_fetch_array( $sql )) {
    	$db_1[$n] = $db;
    	$n++;
    }
    echo "<table border='0'>";
    
     foreach($db_1 As $id=>$var) {
     $p = $i % $div;
     if($p == 1) {
     echo "<tr>";
     }
     echo "<td><a href=" . $var['link'] . "><table border='0' style='border:1px solid #000000;'><tr><td>" . $var['name'] . "</td></tr><tr><td><img src=" . $var['image'] . "></td></tr><tr><td>" . $var['description'] . "</td></tr></table></a></td>";
     if($p == 0) {
     echo "</tr>";
     }
     $i++;
     }


    ich habe keine Lösung ohne while-Schleife gefunden, deshalb nun die obige Lösung herausbekommen.

    Du musst das mysql_fetch_array nur durch die while Schleife laufen lassen und bekommst dort ein neues array $db_1[].
    Dieses übergibst du dann an die foreach-Schleife und lässt es dort verarbeiten.

    Beitrag zuletzt geändert: 18.7.2012 21:01:51 von vctb
  18. Autor dieses Themas

    jhb

    Kostenloser Webspace von jhb

    jhb hat kostenlosen Webspace.

    Hmm tut mir leid aber da kommt immer noch das selbe Ergebnis raus. Ich kann zwar die Var. reihen anpassen so das es von der Form her stimmt, aber sobald ich neue Datensätze einfüge verschiebt sich das ganze.

    Man müsste vielleicht versuchen das php den wert bei der Var. reihen selbst berechnet.
  19. Gib der inneren Tabelle
    ...<table border='0' style='border:1px solid #000000; width: 125px;'>...


    mal eine Breite durch z.B. width: 125px; das liegt sicher an der Formatierung der Tabelle.



    Beitrag zuletzt geändert: 19.7.2012 23:35:48 von vctb
  20. Autor dieses Themas

    jhb

    Kostenloser Webspace von jhb

    jhb hat kostenlosen Webspace.

    Hmm,
    also das hat jetzt auch nicht so viel gebracht es sind jetzt 2 Spalten (wenn ich reihen auf 5 lasse) kann aber auch daran liegen das ein paar mehr Datensätze dazu gekommen sind.
  21. jhb schrieb:
    Hmm,
    also das hat jetzt auch nicht so viel gebracht es sind jetzt 2 Spalten (wenn ich reihen auf 5 lasse) kann aber auch daran liegen das ein paar mehr Datensätze dazu gekommen sind.
    yo mey! wie wärs einfach einfacher ;)
    <?php
    
    error_reporting(E_ALL | E_STRICT);
    
    // ---- connect ----------------------------------------------------------------
    $conn = ($c = mysql_connect('mysql.lima-city.de', 'USERxxxxxx', ';) ;) ;)')) ?
      $c:
      sql_error(__LINE__);
    
    // ---- query ------------------------------------------------------------------
    $q = <<< EOT
    select concat('<td>',
                  <col_1>,
                  '<br />',
                  <col_2>,
                  '<br />',
                  <col_3>,
                  '</td>')
    from <db_name>.<table_name>
    EOT;
    $r = ($r = mysql_query($q)) ?
      $r:
      sql_error(__LINE__);
    
    
    // ---- get resultset into php-var ---------------------------------------------
    $count = 0;
    $cols  = 4; // number of cols
    $res   = "<table border=\"1\"><br />\n";
    while($row = mysql_fetch_assoc($r)) {
      $res .= (($cc = $count % $cols) === 0) ? '<tr>': '';
      foreach($row as $k => $v) {$res .= "$v";}
      $res .= (($count % $cols) === ($cols - 1)) ? '</tr>': '';
      $res .= "\n";
      $count++;
    }
    $res .= "\n</table>";
    
    // ---- show site --------------------------------------------------------------
    exit(<<< EOT
    <!DOCTYPE html>
    <html>
      <head>
        <title>table view</title>
      </head>
      <body>
    
        <header>
          <h3>table view</h3>
        </header>
    
        <section>
    $res
        </section>
    
      </body>
    </html>
    EOT
    );
    
    
    
    
    // ---- sqlerror() -------------------------------------------------------------
    function sql_error($l) {
      $res = print_r(array("<strong>mysql_error in line $l</strong>", mysql_errno(), mysql_error()), true);
      exit(<<< EOT
    <!DOCTYPE html>
    <html>
      <head>
        <title>mysql_error</title>
      </head>
      <body>
        <header>
          <h3>mysql_error</h3>
        </header>
        <section>
          <pre>
    $res
          </pre>
        </section>
      </body>
    </html>
    EOT
    );
    }
    editieren musst du allerdings die zeile 6 (no klar ;) und die ganze query (wobei sowas wie '<col_1>' steht dann natürlich ohne eckigen klammern! wiederum '<td>', '<br />' und '</td>' mit eckigen klammern, weil ich ja die spalten vom sql server generieren lasse! ;)
    und das ganze sieht dann so aus (eine 5-spaltige variante [siehe $cols in zeile 28]).
  22. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!