Nach 5 Datensätze Zeilenumbruch

Kufstein

B1G-Software-Kunde
#1
Kann mir noch jemand eine kleine Denkanregung geben, wie ich es hinbekomme, Datensätze aus einer MySql Datenbank auszulesen, und 5 stück nebeneinander anzeigen zu lassen und dann eine neue Zeile beginnen ?
(Soll für eine Bildergallery sein)

also untereinander ist einfach, mit ner for schleife für jedes

<tr>
<td> $DATENARRAY[$I]->FELD </td>
</tr>



Schon mal vielen Dank.
 

UNC

B1G-Software-Kunde
#2
PHP:
<?php
$i = 0;
while($row = $db->fetcharray()) {
  echo '<tr>
<td> ' . $row['bla'] . '</td>
</tr>';
  $i++;
  if($i % 5 == 0)
    echo 'Umbruch';
}
?>
 
Last edited:

modig

B1G-Software-Kunde
#3
Huhu,
ohne lange drüber nachzudenken:
Die äußere Schleife liest nacheinander alle Datensätze aus der DB,
die mittlere zählt immer bis 5 und gibt vor und nach der inneren Schleife die Tabellenzeilen <tr>...</tr> aus. Die innere Schleife rödelt die 5 <td>...</td> mit den Datensätzen raus.
Wenn die Anzahl der Datensätze nicht durch 5 teilbar ist, musst Du am Ende noch mit leeren Zellen auffüllen.

Karsten
 
Last edited:

modig

B1G-Software-Kunde
#4
PHP:
<?php
$i = 0;
while($row = $db->fetcharray()) {
  echo '<tr><td>' . $row['bla'] . '</td></tr>';
  $i++;
  if($i % 5 == 0)
    echo 'Umbruch';
}
?>
Öhmmm, das ergibt aber 5 Tabellenzeilen mit Daten und danach 'Umbruch', dann wieder 5 Zeilen...

Wollte er nich 5 Spalten pro Zeile und Zeilen bis die Daten alle sind?

Karsten 8o
 

Kufstein

B1G-Software-Kunde
#5
Ja, manchmal stehe ich ein wenig auf der Leitung. ... ich glaube ich habs jetzt ....



PHP:
<table>
<tr>

<?php
$i = 0;
while($row = $db->fetcharray()) {
  echo '
<td> ' . $row['bla'] . '</td>';
  $i++;
  if($i % 5 == 0)
    echo '</tr> <tr>';
}
?>

</tr>
</table>

So müsste es eigendlich gehen ... ich probiere es nachher mal aus ..


schon mal vienen Dank ;)
 
Last edited:

UNC

B1G-Software-Kunde
#6
Öhmmm, das ergibt aber 5 Tabellenzeilen mit Daten und danach 'Umbruch', dann wieder 5 Zeilen...

Wollte er nich 5 Spalten pro Zeile und Zeilen bis die Daten alle sind?

Karsten 8o
War nur mal ein Gedanken-Anstoss ;)
 

modig

B1G-Software-Kunde
#7
Huhu,
So müsste es eigendlich gehen...
gehen ja. Aber...
Das ergibt eine 'merkwürdige' Tabelle bei der Zellen fehlen, wenn die Anzahl der Datensätze nicht durch 5 teilbar ist. Wenn sie durch 5 teilbar ist, entsteht eine leere Zeile. Beides dürfte durch die W3C-Validierung fallen.

So müsste es passen:
PHP:
<table border="1">
<?php
$demodaten = array('alf','dieter','ulli','gabi','rot','blau','gruen','eins','zwei','brille','jacke','hose'); 
$spalten = 5; //Spaltenanzahl
$fueller = '-'; //Fuellzeichen für leere Zellen z.B. ' '
$i = 0; 
while ($demodaten[$i]) {
  	
    // Tabellenzeile beginnen	
    if ($i % $spalten == 0) {
    echo '<tr>';
    }
  	
    // Zellen erstellen und mit Daten füllen
    echo '<td>' . $demodaten[$i] . '</td>';
    $i++;
  
    // Zeile nach vorgegebener Spaltenzahl beenden
    if ($i % $spalten == 0) {
    echo '</tr>';
    } 	  
  	
}
    
    // Tabelle mit Zellen auffüllen und letzte Tabellenzeile korrekt abschliessen 
if ($i % $spalten != 0) {
    echo (str_repeat ('<td>' . $fueller . '</td>', $spalten - (bcmod($i, $spalten))));
    echo '</tr>';
}   
?>
</table>
Karsten
 

Kufstein

B1G-Software-Kunde
#8
Okay, das sieht jetzt im entefekt so aus wie ich möchte, der HTML Quelltext kommt auch richtig rüber.

Schon einmal vielen Dank Karsten.

ABER:

Ich raffe es jetzt grad nicht so ...
Kannst du mir des sagen, wie ich des mit einer For statt while schleife hinbekommne ...


PHP:
for($i=0; $i<mysql_num_rows($result); $i++)
{
   $abfrage[$i]=mysql_fetch_object($result);
}

for($i=0; $i<mysql_num_rows($result); $i++)
{



 #### -> Ab hier stimmit es jetzt nicht mehr....

$spalten = 5; //Spaltenanzahl
$fueller = '-'; //Fuellzeichen für leere Zellen z.B. ' '


      
    // Tabellenzeile beginnen    
    if ($i % $spalten == 0) {
    echo '<tr>';
    }
      
    // Zellen erstellen und mit Daten füllen
    echo '<td>' . $abfrage[$i]->name . '</td>';
    
  
    // Zeile nach vorgegebener Spaltenzahl beenden
    if ($i % $spalten == 0) {
    echo '</tr>';
    }       
      
}
    
    // Tabelle mit Zellen auffüllen und letzte Tabellenzeile korrekt abschliessen 
if ($i % $spalten != 0) {
    echo (str_repeat ('<td>' . $fueller . '</td>', $spalten - (bcmod($i, $spalten))));
    echo '</tr>';



}
 
Last edited:

modig

B1G-Software-Kunde
#9
Warum 'for'? Pack das Abfrageergebnis doch einfach in ein Array,
PHP:
...($row = $db->fetcharray())...
dann passt das 1:1.

Karsten
 

Kufstein

B1G-Software-Kunde
#10
Warum 'for'? Pack das Abfrageergebnis doch einfach in ein Array,
PHP:
...($row = $db->fetcharray())...
dann passt das 1:1.

Karsten
Also in dem Fall ist $db = mysql_query("SELECT * FROM bilder WHERE EVENTID=" . $_GET['eventid'] . " LIMIT 100;");
oder ????


Das ist mein (Momentan nicht funktionierender) Quelltext :

PHP:
<?PHP
IF ($_SESSION['login'] == "1") {

IF ($_REQUEST['id'] == "") {
$eventid = $_REQUEST['eventid']; 
} else {
$eventid = $_REQUEST['id'];
}



echo "<h2 align=\"center\">Bilder</a></h2>";

// Wieviel Einträge pro Seite sollen dargestellt werden?
define("MAX_EINTRAEGE",10);

// Wieviel Seitenzahlen in der Navigationsleiste angezeigt werden. Ausgabe kann sein
// << < 2 3 4 5 6 7 8 9 10 11 12 > >>
// Die Berechnung erfolgt nur für ungerade Zahlen!!!
define("NAV_LEISTE",11);


// Definiert die Parameter für den Datenbank Connect
define("DB_HOST","localhost"); // MySQL hostname
define("DB_NAME","DBNAME"); //MySQL db-name
define("DB_USER","USER"); //MySQL User
define("DB_PASS","XXXXXXX"); // MySQL Passwort

// Datenbank Connect herstellen
$db = @MYSQL_CONNECT(DB_HOST,DB_USER,DB_PASS) or die("Datenbank-Connect fehlgeschlagen");
$db_check = @MYSQL_SELECT_DB(DB_NAME) or die("Datenbank momentan nicht erreichbar");


/**
 * Erstellt die Navigationsleiste für die einzelnen Seiten
 *
 * @param		integer		$SitesComplete		Breite des Bildes
 * @param		integer		$seiteAktuell			Höhe des Bildes
 * @param		string  	$extVariables			Zeiger auf das Bild
 *
 * @return	string			
 */
function navigationsLeiste($SitesComplete,$seiteAktuell,$extVariables){
		
	// Die Menge der angezeigten Links für die Seiten werden errechnet 
	$NavCeil = floor(NAV_LEISTE / 2);
	
	// Eine Seite zurück oder zum Anfang nur anzeigen, wenn mindestens eine Seite zurück
	// geblättert werden kann 
	if($seiteAktuell > 1){
		$string .= '<a href="?cmd=pics&site=1'.$extVariables.'"><<</a>  ';
		$string .= '<a href="?cmd=pics&site='.($seiteAktuell-1).$extVariables.'"><</a>  ';
	}
	
	// Baut die Seitennavigation aúf (1 2 3 4 5 6 ... n)
	for($x=$seiteAktuell-$NavCeil;$x<=$seiteAktuell+$NavCeil;$x++){
		// Alle Seitenzahlen vor und nach der aktuellen Seite verlinken
		if(($x>0 && $x<$seiteAktuell) || ($x>$seiteAktuell && $x<=$SitesComplete))
			$string .= '<a href="?cmd=pics&site='.$x.$extVariables.'">'.$x.'</a>  ';
		
		// Die Seitenzahl der aktuellen Seite nicht verlinken
		if($x==$seiteAktuell)
			$string .= $x . '  ';
	}
	
	// Eine Seite vor oder zum Ende nur anzeigen, wenn mindestens eine Seite weiter
	// geblättert werden kann 
	if($seiteAktuell < $SitesComplete){
		$string .= '<a href="?cmd=pics&site='.($seiteAktuell+1).$extVariables.'">></a>  ';
		$string .= '<a href="?cmd=pics&site='.$SitesComplete.$extVariables.'">>></a>  ';
	}
	
	return $string;
	
}

// Die aktuell angeforderte Seite
$seiteAktuell = $_GET['site'] + 0;

// Falls noch keine Seitenzahl übergeben wurde, den Wert auf die erste Seite setzen
if(empty($seiteAktuell))
	$seiteAktuell = 1;
	
// Berechnet die nächsten Eintraege aus MAX_EINTRAEGE
$start = $seiteAktuell * MAX_EINTRAEGE - MAX_EINTRAEGE; 

// Holt die aktuellen Datensätze aus - define("MAX_EINTRAEGE",10)
$result = @mysql_query("SELECT * FROM bilder WHERE eventid='" . $eventid . "' ORDER BY ID DESC LIMIT $start, ".MAX_EINTRAEGE);

// Ermittelt die Gesamtzahl der Datensätze
$resultGesamt = @mysql_query("SELECT COUNT(*) AS menge FROM bilder WHERE eventid='" . $eventid . "'"); 
$Eintraege = @mysql_result($resultGesamt,0,"menge");

// Ausgabe der Seite



echo "<table>";

$row = $result->fetcharray();

$spalten = 5; //Spaltenanzahl
$fueller = '-'; //Fuellzeichen für leere Zellen z.B. ' '
$i = 0;

while($row[$i]) {
      
    // Tabellenzeile beginnen    
    if ($i % $spalten == 0) {
    echo '<tr>';
    }
      
    // Zellen erstellen und mit Daten füllen
    echo '<td>' . $abfrage[$i]->name . '</td>';
    
  
    // Zeile nach vorgegebener Spaltenzahl beenden
    if ($i % $spalten == 0) {
    echo '</tr>';
    }       
      
}
    
    // Tabelle mit Zellen auffüllen und letzte Tabellenzeile korrekt abschliessen 
if ($i % $spalten != 0) {
    echo (str_repeat ('<td>' . $fueller . '</td>', $spalten - (bcmod($i, $spalten))));
    echo '</tr>';
}   
echo "
</table>";

$contentWeb .= '<div align="center">'; 
// Errechnet die kompletten Seiten
$SitesComplete = ceil($Eintraege / MAX_EINTRAEGE);

// Ergebnisseite x von y anzeigen
$contentWeb .= 'Seite ' . $seiteAktuell . ' von ' . $SitesComplete . '<br>';

// Weitere Variablen den Seitenzahlem mit übergeben in Form:
// &var1=wert1&var2=wert2
$extVariables = '&eventid=' . $eventid;

// Navigation mit in Ausgabe einfügen
$contentWeb .= navigationsLeiste($SitesComplete,$seiteAktuell,$extVariables); 


$contentWeb .= '</div>';
echo $contentWeb;
} else {

include "page/nologin.tpl";
}
?>
 
Last edited:

UNC

B1G-Software-Kunde
#11
PHP:
<?PHP
IF ($_SESSION['login'] == "1") {

IF ($_REQUEST['id'] == "") {
$eventid = $_REQUEST['eventid']; 
} else {
$eventid = $_REQUEST['id'];
}
Besser:
PHP:
if ($_SESSION['login'] == "1") {
  if (empty($_REQUEST['id'])) {
    $eventid = $_REQUEST['eventid']; 
  } else {
    $eventid = $_REQUEST['id'];
}
PHP:
$seiteAktuell = $_GET['site'] + 0;
Macht keinen Sinn.
PHP:
echo "<table>";

$row = $result->fetcharray();

$spalten = 5; //Spaltenanzahl
$fueller = '-'; //Fuellzeichen für leere Zellen z.B. ' '
$i = 0;

while($row[$i]) {
      
    // Tabellenzeile beginnen    
    if ($i % $spalten == 0) {
    echo '<tr>';
    }
      
    // Zellen erstellen und mit Daten füllen
    echo '<td>' . $abfrage[$i]->name . '</td>';
    
  
    // Zeile nach vorgegebener Spaltenzahl beenden
    if ($i % $spalten == 0) {
    echo '</tr>';
    }       
      
}
    
    // Tabelle mit Zellen auffüllen und letzte Tabellenzeile korrekt abschliessen 
if ($i % $spalten != 0) {
    echo (str_repeat ('<td>' . $fueller . '</td>', $spalten - (bcmod($i, $spalten))));
    echo '</tr>';
}   
echo "
</table>";
}
?>
Müsste so aussehen:
PHP:
echo "<table>";


$spalten = 5; //Spaltenanzahl
$fueller = '-'; //Fuellzeichen für leere Zellen z.B. ' '
$i = 0;

while($row = $result->fetcharray()) {
      
    // Tabellenzeile beginnen    
    if ($i % $spalten == 0) {
    echo '<tr>';
    }
      
    // Zellen erstellen und mit Daten füllen
    echo '<td>' . $row['name'] . '</td>';
    
  
    // Zeile nach vorgegebener Spaltenzahl beenden
    if ($i % $spalten == 0) {
    echo '</tr>';
    }       
      
}
    
    // Tabelle mit Zellen auffüllen und letzte Tabellenzeile korrekt abschliessen 
if ($i % $spalten != 0) {
    echo (str_repeat ('<td>' . $fueller . '</td>', $spalten - (bcmod($i, $spalten))));
    echo '</tr>';
}   
echo "
</table>";
}
?>
 

Kufstein

B1G-Software-Kunde
#12
Habe ich auch probiert,


Fehler: Fatal error: Call to a member function on a non-object in /home/www/web3/html/qradio/page/user/bilder.tpl on line 106

Die Zeile bezieht sich auf
PHP:
while($row = $result->fetcharray()) {
Mein Quelltext sieht jetz wie folgt aus ....


PHP:
<?PHP


if ($_SESSION['login'] == "1") {
  if (empty($_REQUEST['id'])) {
    $eventid = $_REQUEST['eventid']; 
  } else {
    $eventid = $_REQUEST['id'];
}  



echo "<h2 align=\"center\">Bilder</a></h2>";

// Wieviel Einträge pro Seite sollen dargestellt werden?
define("MAX_EINTRAEGE",10);

// Wieviel Seitenzahlen in der Navigationsleiste angezeigt werden. Ausgabe kann sein
// << < 2 3 4 5 6 7 8 9 10 11 12 > >>
// Die Berechnung erfolgt nur für ungerade Zahlen!!!
define("NAV_LEISTE",11);


// Definiert die Parameter für den Datenbank Connect
define("DB_HOST","localhost"); // MySQL hostname
define("DB_NAME","db"); //MySQL db-name
define("DB_USER","uaser"); //MySQL User
define("DB_PASS","xxxxxxx"); // MySQL Passwort

// Datenbank Connect herstellen
$db = @MYSQL_CONNECT(DB_HOST,DB_USER,DB_PASS) or die("Datenbank-Connect fehlgeschlagen");
$db_check = @MYSQL_SELECT_DB(DB_NAME) or die("Datenbank momentan nicht erreichbar");


/**
 * Erstellt die Navigationsleiste für die einzelnen Seiten
 *
 * @param		integer		$SitesComplete		Breite des Bildes
 * @param		integer		$seiteAktuell			Höhe des Bildes
 * @param		string  	$extVariables			Zeiger auf das Bild
 *
 * @return	string			
 */
function navigationsLeiste($SitesComplete,$seiteAktuell,$extVariables){
		
	// Die Menge der angezeigten Links für die Seiten werden errechnet 
	$NavCeil = floor(NAV_LEISTE / 2);
	
	// Eine Seite zurück oder zum Anfang nur anzeigen, wenn mindestens eine Seite zurück
	// geblättert werden kann 
	if($seiteAktuell > 1){
		$string .= '<a href="?cmd=pics&site=1'.$extVariables.'"><<</a>  ';
		$string .= '<a href="?cmd=pics&site='.($seiteAktuell-1).$extVariables.'"><</a>  ';
	}
	
	// Baut die Seitennavigation aúf (1 2 3 4 5 6 ... n)
	for($x=$seiteAktuell-$NavCeil;$x<=$seiteAktuell+$NavCeil;$x++){
		// Alle Seitenzahlen vor und nach der aktuellen Seite verlinken
		if(($x>0 && $x<$seiteAktuell) || ($x>$seiteAktuell && $x<=$SitesComplete))
			$string .= '<a href="?cmd=pics&site='.$x.$extVariables.'">'.$x.'</a>  ';
		
		// Die Seitenzahl der aktuellen Seite nicht verlinken
		if($x==$seiteAktuell)
			$string .= $x . '  ';
	}
	
	// Eine Seite vor oder zum Ende nur anzeigen, wenn mindestens eine Seite weiter
	// geblättert werden kann 
	if($seiteAktuell < $SitesComplete){
		$string .= '<a href="?cmd=pics&site='.($seiteAktuell+1).$extVariables.'">></a>  ';
		$string .= '<a href="?cmd=pics&site='.$SitesComplete.$extVariables.'">>></a>  ';
	}
	
	return $string;
	
}

// Die aktuell angeforderte Seite
$seiteAktuell = $_GET['site'] + 0;

// Falls noch keine Seitenzahl übergeben wurde, den Wert auf die erste Seite setzen
if(empty($seiteAktuell))
	$seiteAktuell = 1;
	
// Berechnet die nächsten Eintraege aus MAX_EINTRAEGE
$start = $seiteAktuell * MAX_EINTRAEGE - MAX_EINTRAEGE; 

// Holt die aktuellen Datensätze aus - define("MAX_EINTRAEGE",10)
$result = @mysql_query("SELECT * FROM bilder WHERE eventid='" . $eventid . "' ORDER BY ID DESC LIMIT $start, ".MAX_EINTRAEGE);



// Ermittelt die Gesamtzahl der Datensätze
$resultGesamt = @mysql_query("SELECT COUNT(*) AS menge FROM bilder WHERE eventid='" . $eventid . "'"); 
$Eintraege = @mysql_result($resultGesamt,0,"menge");

// Ausgabe der Seite


echo "<table>";


$spalten = 5; //Spaltenanzahl
$fueller = '-'; //Fuellzeichen für leere Zellen z.B. ' '
$i = 0;

while($row = $result->fetcharray()) {
      
    // Tabellenzeile beginnen    
    if ($i % $spalten == 0) {
    echo '<tr>';
    }
      
    // Zellen erstellen und mit Daten füllen
    echo '<td>' . $row['name'] . '</td>';
    
  
    // Zeile nach vorgegebener Spaltenzahl beenden
    if ($i % $spalten == 0) {
    echo '</tr>';
    }       
      
}
    
    // Tabelle mit Zellen auffüllen und letzte Tabellenzeile korrekt abschliessen 
if ($i % $spalten != 0) {
    echo (str_repeat ('<td>' . $fueller . '</td>', $spalten - (bcmod($i, $spalten))));
    echo '</tr>';
}   
echo "
</table>";


$contentWeb .= '<div align="center">'; 
// Errechnet die kompletten Seiten
$SitesComplete = ceil($Eintraege / MAX_EINTRAEGE);

// Ergebnisseite x von y anzeigen
$contentWeb .= 'Seite ' . $seiteAktuell . ' von ' . $SitesComplete . '<br>';

// Weitere Variablen den Seitenzahlem mit übergeben in Form:
// &var1=wert1&var2=wert2
$extVariables = '&eventid=' . $eventid;

// Navigation mit in Ausgabe einfügen
$contentWeb .= navigationsLeiste($SitesComplete,$seiteAktuell,$extVariables); 


$contentWeb .= '</div>';
echo $contentWeb;
} else {

include "page/nologin.tpl";
}
?>
 

UNC

B1G-Software-Kunde
#13
Ja... $result ist bei dir ja auch kein Objekt. Somit ist $result->fetcharray() gar nicht möglich. Am besten schreibst du dir eine DB-Klasse.
Oder sonst halt so:
PHP:
$result = @mysql_query("SELECT * FROM bilder WHERE eventid='" . $eventid . "' ORDER BY ID DESC LIMIT $start, ".MAX_EINTRAEGE);
while($row = mysql_fetch_object($result))
{
      
    // Tabellenzeile beginnen    
    if ($i % $spalten == 0) {
    echo '<tr>';
    }
      
    // Zellen erstellen und mit Daten füllen
    echo '<td>' . $row->name . '</td>';
    
  
    // Zeile nach vorgegebener Spaltenzahl beenden
    if ($i % $spalten == 0) {
    echo '</tr>';
    }       
      
}
Achtug: Strings immer escapen!
 
Last edited:

Kufstein

B1G-Software-Kunde
#14
Was ist Escapen genua??? -> Ich google mal ...

wenn ich des jetzt so wie du gesagt hast mache wirft er mir
Code:
<table><tr><td>011.jpg</td></tr><tr><td>010.jpg</td></tr><tr><td>009.jpg</td></tr><tr><td>008.jpg</td></tr><tr><td>007.jpg</td></tr><tr><td>006.jpg</td></tr><tr><td>005.jpg</td></tr><tr><td>004.jpg</td></tr><tr><td>003.jpg</td></tr><tr><td>002.jpg</td></tr>

</table>

Also alles untereinander, warum?

Nochmals der Code für die Seite:
PHP:
echo "<table>";


$spalten = 5; //Spaltenanzahl
$fueller = '-'; //Fuellzeichen für leere Zellen z.B. ' '
$i = 0;
while($row = mysql_fetch_object($result))
{
      
    // Tabellenzeile beginnen    
    if ($i % $spalten == 0) {
    echo '<tr>';
    }
      
    // Zellen erstellen und mit Daten füllen
    echo '<td>' . $row->name . '</td>';
    
  
    // Zeile nach vorgegebener Spaltenzahl beenden
    if ($i % $spalten == 0) {
    echo '</tr>';
    }       
      
}
 

UNC

B1G-Software-Kunde
#16
Fehlt noch ein $++; nach
PHP:
    // Zeile nach vorgegebener Spaltenzahl beenden
    if ($i % $spalten == 0) {
    echo '</tr>';
    }
 
Top