Ausgabe einer Datenbank-Tabelle

Metha

Mitglied
Hallo zusammen

Hätte da gerne noch mal ein Problem. Und zwar arbeite ich gerade an einer Template Klasse die auch eine Funktion haben soll mit der man ein Datenbank-Tabelle ausgeben kann.

Es funktioniert auch alles bis auf eine kleine, aber Entscheidende Sache. Und zwar gibt er mir bei mehreren Einträgen pro Seite immer wieder ein und den selben Eintrag aus. Entscheidend ist hier nur die while Schleife, die für die Ausgabe zuständig ist.

Hier mal mein verkürzter Code:
PHP:
// $tabelle ist variabel. Hier z.B. personaldatenbank
// $spalten ist variabel. Hier z.B. Vorname, Nachname, Alter
// $einträge (pro Seite) wird angegeben. Hier z.B. 2
// $anfang berechnet sich so: $anfang=$this->seite*$einträge-$einträge;


// Hier meine Funktion zum auslesen

	function auslesen($einträge, $tabelle, $spalten)
		{
		include('config/mysql.php');

		$anfang=$this->seite*$einträge-$einträge;
		
		$durchgänge=count($spalten);
		$lastkomma=$durchgänge-1;

		for($count=0; $count<$durchgänge; $count++)
			{
			if($count<$lastkomma){$komma=', ';}else{$komma='';}
			$select.=$spalten[$count].$komma;
			}

		$qry=mysql_query('SELECT '.$select.' FROM '.$tabelle.' ORDER BY id DESC LIMIT '.$anfang.', '.$einträge);
		while($erg=mysql_fetch_object($qry))
			{
			for($count=0; $count<$durchgänge; $count++)
				{$ausgabe=$this->ersetzen($spalten[$count], $erg->$spalten[$count]);}
			echo $ausgabe;
			}
		}

// Hier meine ersetzen Funktion

	function ersetzen($platzhalter, $wert)
		{
		$this->template=str_replace('{gfx}', $this->g_pfad, $this->template);
		$this->template=str_replace('{img}', $this->i_pfad, $this->template);
		$this->template=str_replace('{'.$platzhalter.'}', $wert, $this->template);
		return($this->template);
		}

Also kurz zusammengefasst, es funktioniert alles, bis auf die Tatsache, das er mir bei angenommener Konstelation:

Einträge pro Seite 2, zweimal Eintrag 3 ausgibt und nicht Eintrag 2 und 3 von insgesammt 3 Einträgen.

Jemand eine Idee wo mein Fehler liegt?

Gruß Micha
 
Ich steht wohl aufm Schlauch. Ich gebe doch alle Spalten durch die While-Schleife aus ? ? ? :confused: Nur durch die LIMIT Funktion eingeschränkt.
 
Nein, du verarbeitest zwar alle Spalten, gibst sie jedoch nicht aus. Probier mal Folgendes:
PHP:
$qry=mysql_query('SELECT '.$select.' FROM '.$tabelle.' ORDER BY id DESC LIMIT '.$anfang.', '.$einträge);
while($erg=mysql_fetch_object($qry)) {
	for($count=0; $count<$durchgänge; $count++) {
		echo $this->ersetzen($spalten[$count], $erg->$spalten[$count]);
	}
}
 
Das hatte ich auch schon probiert. Dann gibt er mit aber jede der Einzelnen Felder einer Zeile einzel aus!

Und selbst dann nimmt er nicht Eintrag 2 von den 3 Einträgen!

Ich hatte schon gedacht das es an dem LIMIT liegt, kann aber kein Fehler finden, da ich es vorher schon mal anders verwendet hatte, wo es funktioniert hat.
 
PHP:
function auslesen( $einträge, $tabelle, $spalten )
{ 
	include 'config/mysql.php';

	$anfang = $this->seite*$einträge-$einträge;
	$durchgänge = count($spalten);
	$query = '
		SELECT
		        `'.implode('`, `', $spalten).'`
		  FROM
		        `'.$tabelle.'`
		  ORDER BY
		        `id` DESC
		  LIMIT
		        '.$anfang.', '.$einträge.'
		';
	$result = mysql_query($query);
	while( $erg = mysql_fetch_object($result) ) {
		for($count=0; $count<$durchgänge; $count++) {
			echo $this->ersetzen($spalten[$count], ${'erg->'.$spalten[$count]});
		}
	}
}
 
Funktioniert leider nicht!

Hierbei gibt er mir lediglich jede Zelle einzeln aus. Sprich ich bekomme bei mir 6 Ausgaben.

Die for-Schleife muss einmal mit einem Datensatz komplett durchlaufen - Nur dann ist der Datensatz komklett eingelesen. Das problem ist ja nur das er mir zweimal den selben Datensatz ausspuckt.

So habe ich es vorher gemacht:
PHP:
$aus['ausgabe']=file_get_contents('classes/template/tpl/tpl_cont5.htm');
$aus['ausgabe']=str_replace('{name}', $erg->name, $name['ausgabe']);
$aus['ausgabe']=str_replace('{vorname}', $erg->vorname,  $aus['ausgabe']);
$aus['ausgabe']=str_replace('{alter}', $erg->alter,  $aus['ausgabe']);
echo $aus['ausgabe'];

Das funktioniert auch. Nur kann ich es so nicht mehr mehr machen, da die Zellenspalten Name, Vorname etc. variabel sind.

Ich komme aber auch nicht drauf wo der Fehler liegt
 
Wird die $this->template-Variable eigentlich immer neu gesetzte?
PHP:
function ersetzen( $platzhalter, $wert )
{
	$template = $this->template;
	$template = str_replace('{gfx}', $this->g_pfad, $template);
	$template = str_replace('{img}', $this->i_pfad, $template);
	$template = str_replace('{'.$platzhalter.'}', $wert, $template);
	return $template;
}
 
In der Hauptfunktion habe ich sie so definiert:
PHP:
$this->template=file_get_contents($this->t_pfad.$template);

Wobei $this->t_pfad ein einfacher Pfad ist und $template der Dateiname.
 
Hast du meine ersetzen()-Funktion mal probiert? In der wird nämlich nicht die Urvorlage verändert sondern immer nur ein Duplikat.
 
Zurück