Datensätze aus DB in 4 Spalten darstellen

chäschpe

Grünschnabel
Hallo

Ich habe ein kleines Problem.

Ich möchte aus meiner mysql DB alle Daten auslesen, und dann Dynamisch in einer Tabelle von 2 Spalten ausgeben.

DB: Struktur:

#############################
# ID # Name # Vorname # Komm #
#############################
Daten ....hier unten drann
usw....

Und so möchte ich es gerne ausgegeben können (html-tabelle):

PHP:
--------------------------------------------------- 
| Datensatz 1              |   Datensatz 2        | 
|                          |                      | 
---------------------------------------------------
| Datensatz 3              |   Datensatz 4        | 
|                          |                      | 
---------------------------------------------------
| Datensatz 5              |   Datensatz 6        | 
|                          |                      | 
---------------------------------------------------

Mein Problem besteht jetzt darin, dass ich keine 2. Spalte erstellen kann, die es entsprechend richtig füllt.
Irgendwie müsste ich hier verschachtelte schleifen machen, komme aber nicht nach wie genau.

Das habe ich bis jetzt schon:

PHP:
$verbindung = @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Es konnte keine Verbindung aufgebaut werden"); 
$result = "SELECT Name, Vorname, Komm FROM tabelle";
$erg = mysql_db_query("usr_web",$result,$verbindung);


while (list($Name,$Vorname,$Vulgo,$Strasse,$Plz,$Ort) = mysql_fetch_row($erg)) {
                echo "$Name Vorname<br>$Komm<br><br>";
        }
// Das gibt mir jetzt eine Liste aller Datensätze untereinander aus

Besten Dank für eure Hilfe
 
PHP:
<?php
$verbindung = @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Es konnte keine Verbindung aufgebaut werden"); 
$result = "SELECT Name, Vorname, Komm FROM tabelle";
$erg = mysql_db_query("usr_web",$result,$verbindung);

echo "<table>";
while ($row = mysql_fetch_row($erg)) {
echo "<tr> \n <td> ".$row[0]." </td>  \n <td> ".$row[1]."</td>\n</tr>";
echo "<tr> \n <td> ".$row[2]."</td> \n <td> ".$row[3]."</td>\n</tr>";
echo "<tr> \n <td> ".$row[4]."</td> \n <td> ".$row[5]."</td>\n</tr>";         
}
echo "</table>";
?>

Probier es mal so?
 
Danke Felix für deine Hilfe

Ich habe mein Problem jetzt lösen können. und so siehts aus:

PHP:
<?
include('config.php');

function etiketten($tabelle, $leiter, $alle){
$server = MYSQL_HOST;
$user = MYSQL_USER;
$passwort = MYSQL_PASS;
$datenbank = MYSQL_DATABASE;

MYSQL_CONNECT($server, $user, $passwort) or die ( "<H3>Datenbankserver nicht erreichbar</H3>");
MYSQL_SELECT_DB($datenbank) or die ( "<H3>Datenbank nicht vorhanden</H3>");
if($alle == 0) {
$result=MYSQL_QUERY( "SELECT Name, Vorname, Vulgo, Strasse, Plz, Ort FROM $tabelle WHERE Leiter = '".$leiter."'");
} else {
$result=MYSQL_QUERY( "SELECT Name, Vorname, Vulgo, Strasse, Plz, Ort FROM $tabelle");
}
$daten_anzahl = mysql_num_rows($result);
$count=$daten_anzahl-1;
$calc=$count/4;
$td_count=(int) $calc;
$col_count=($count-($td_count*4))+1;
$row_count=$td_count+1;
if($col_count>=4){$fourth_row=$row_count;}
else{$fourth_row=$row_count-1;}
if($col_count>=3){$third_row=$row_count;}
else{$third_row=$row_count-1;}
if($col_count>=2){$second_row=$row_count;}
else{$second_row=$row_count-1;}
if($col_count>=1){$first_row=$row_count;}
else{$first_row=$row_count-1;}
?>
<table border=1 cols=4 align="center">
<tr>
<td valign=top width="140">
<?
/* jetzt nur noch in jede reihe so viele datensätze wie festgelegt reinschreiben */
for($j=$first_row;$j>0;$j--):
$output = MYSQL_FETCH_ROW($result);
echo "$output[2]<br>";
echo "$output[0] $output[1]<br>";
echo "$output[3]<br>";
echo "$output[4] $output[5]<br><br><br>";
endfor;
echo "</td><td valign=top width=\"140\">";
for($j=$second_row;$j>0;$j--):
$output = MYSQL_FETCH_ROW($result);
echo "$output[2]<br>";
echo "$output[0] $output[1]<br>";
echo "$output[3]<br>";
echo "$output[4] $output[5]<br><br><br>";
endfor;
echo "</td><td valign=top width=\"140\">";
for($j=$third_row;$j>0;$j--):
$output = MYSQL_FETCH_ROW($result);
echo "$output[2]<br>";
echo "$output[0] $output[1]<br>";
echo "$output[3]<br>";
echo "$output[4] $output[5]<br><br><br>";
endfor;
echo "</td><td valign=top width=\"140\">";
for($j=$fourth_row;$j>0;$j--):
$output = MYSQL_FETCH_ROW($result);
echo "$output[2]<br>";
echo "$output[0] $output[1]<br>";
echo "$output[3]<br>";
echo "$output[4] $output[5]<br><br><br>";
endfor;
?>
</td>
</tr>
</table><br />
<?
}
 
Hallo,
nichts für ungut Felix, aber deins dürfte nix werden und chäschpe seins funktioniert zwar, aber eigentlich viel zu umständlich
hier mal ne alternative (ich nehm mir mal das Recht bis zur While schleife zu kopieren):

PHP:
MYSQL_CONNECT($server, $user, $passwort) or die ( "<H3>Datenbankserver nicht erreichbar</H3>");
MYSQL_SELECT_DB($datenbank) or die ( "<H3>Datenbank nicht vorhanden</H3>");
if($alle == 0) {
$result=MYSQL_QUERY( "SELECT Name, Vorname, Vulgo, Strasse, Plz, Ort FROM $tabelle WHERE Leiter = '".$leiter."'");
} else {
$result=MYSQL_QUERY( "SELECT Name, Vorname, Vulgo, Strasse, Plz, Ort FROM $tabelle");
}
$i = 1;
echo "<table><tr><td>Spalte 1</td><td>Spalte 2</td></tr><tr>";
while($rs = mysql_fetch_array($result)){
    echo "<td>$rs[Name] / $rs[Vorname] / $rs[Vulgo] / usw. </td>";
    if ($i == 2){
    echo "</tr><tr>";
    $i = 0;
    }
    $i++;
}
echo "</tr></table>";

So ich hoffe es ist klar was ich meine, der Code ist ungetestet, sollte aber grundlegend funktionieren.
 
Zuletzt bearbeitet:
Ah, sorry.

War mein Fehler, ich hatte seine Skizze genau so interpretiert, wie mein Source ihn umsetzt.
 
Hallo

Danke Badboyws

Deine Lösung ist natürlich die beste.

Wennn ich das jetzt richtig verstanden habe, kann ich die Spaltenanzahl beliebig wählen.
Kommentierter Code (Code von Badboyws)

PHP:
$i = 1;
echo "<table><tr><td>Spalte 1</td><td>Spalte 2</td><td>Spalte 3</td><td>Spalte 4</td></tr><tr>";
while($rs = mysql_fetch_array($result)){
    echo "<td>$rs[Name] / $rs[Vorname] / $rs[Vulgo] / usw. </td>"; //Die einzelnen Spalteninhalte ausgeben
	if ($i == 4){ // Wenn der Spalteninalt 4 erreicht hat, //  Die Zahl = Anzahl Spalten
    echo "</tr><tr>"; // wird die zeile geschlossen und eine neue begonnen
    $i = 0; // Dann $i zurückgesetzt, dass wider der Splateninhalt 4 mal eingetragen wird
    } // bis die schleife endet durch bedingung oben
$i++;	// und hier jeweils um 1 erhöht, wenn $i NICHT == 4 ist
}
echo "</tr></table>"; // ende der letzten Zeile und der Tabelle
}

Nocheinmal Danke, alleine währe ich nie drauf gekommen.
 
Hallo,

@Felix
macht ja nix, musste auch erst 2 mal hinschauen bis ich gesehen habe wie es aussehen sollte :)

@chäschpe

ja, richtig verstanden und die Kommentare stimmen soweit. Über $i steuerst, wie richtig erkannt die Anzahl der Spalten nach der in die neue Zeile gesprungen wird. Die Tabelle ist halt ohne Formatierung, sinvoll wäre vllt eine einheitliche spaltenbreite, aber ansonsten ist alles richtig. Schön wenns funktioniert :)
 

Neue Beiträge

Zurück