Tabellarische Darstellung von Daten aus einer DB
Bettina
- php
Hallo zusammen,
ich bin im Bereich PHP noch ein Anfänger und habe eine Frage zur tabellarischen Darstellung von Daten aus einer Datenbank.
Ich erhalte die darzustellenden Daten (Personen) aus der Datenbank.
Folgende Informationen enthält eine Zeile: ID - Name - Pfad zum Bild
Diese Infos sollen nun tabellarisch dargestellt werden, wobei in einer Tabellenzeile vier Personen dargestellt werden sollen. Die Tabelle soll nicht verschachtelt sein.
Die Tabelle soll folgendes Aussehen haben:
| BildPerson1 | BildPerson2 | NamePerson1, NamePerson2 | NamePerson3, NamePerson4 | BildPerson3 |BildPerson4 |
______________________________________________________________________________________________________________
| BildPerson5 | BildPerson6 | NamePerson5, NamePerson6 | NamePerson7, NamePerson8 | BildPerson7 |BildPerson8 |
______________________________________________________________________________________________________________
Mein Problem liegt nun darin, dass ich nicht weiss wie ich über den Array iterieren soll damit ich die Infos in der gewünschten Reihenfolge darstellen kann.
Beispiel:
an erster Stelle im Aray befinden sich die Infos: "ID BildPerson1 NamePerson1". Allerdings möchte ich nach der Zelle mit dem BildPerson1 die Zelle mit dem BildPerson2 einfügen.
Ich habe nun gelesen, dass ich auf einen Aray die Funktionen "prev()" und "next()" anwenden kann.
Das würde dann sinngemäß für eine Tabellenzeile folgendermassen funktionieren:
Das wäre die erste Iteration über das Ergebnis aus der Datenbank gewesen.
Zum einen weiss ich nun nicht wie ich in nächsten Iteration zu Person 5 kommen soll und zum anderen glaube ich das es sich bei meinem Vorschlag um keine "schöne" Lösung handelt.
Habt Ihr vielleicht eine bessere Idee?
Macht es evtl. Sinn die Abfrage auf die DB anders zu gestalten oder aus dem bestehenden Ergebnis aus der DB acht Arrays (für jeden Wert einen Array) zu erstellen?
Vielen Dank im Voraus
Grüssle
Bettina
echo $begrüßung;
Diese Infos sollen nun tabellarisch dargestellt werden, wobei in einer Tabellenzeile vier Personen dargestellt werden sollen.
Wenn das Array numerische, fortlaufende Keys enthält, und jeweils $n Werte dargestellt werden sollen, könntest du das so tun:
for ($i = 0; $i < count($array); $i += $n) {
anzeige($array[$i], $array[$i + 1], ...);
}
Im Beispiel habe ich eine Prüfung auf Existenz des Elements $i + offset weggelassen, die du noch implementieren solltest, da am Ende Elemente fehlen können, wenn die Anzahl der Elemente im Array nicht durch $n ohne Rest teilbar ist.
echo "$verabschiedung $name";
Hallo $begrüßung,
werde ich ausprobieren, danke.
Wie würde ich dann $i und offset überprüfen?
Gruss
Bettina
echo $begrüßung;
Wie würde ich dann $i und offset überprüfen?
Wie üblich mit isset().
if (isset($array[$i + 1])) etc.
echo "$verabschiedung $name";
Hallo dedlfix,
Wie würde ich dann $i und offset überprüfen?
Wie üblich mit isset().
if (isset($array[$i + 1])) etc.
OK, isset habe ich verstanden.
Spielen wir doch mal einen Fall durch:
for ($i = 0; $i < count($array); $i += $n) {
anzeige($array[$i];
if (isset($array[$i + 1])) {
$array[$i + 1];
}
usw...
}
Bei einem Array von 10 personen würde die obere Schleife bei Darstellung von 4 Personen in einer Zeile ($n=4) folgendes ergeben:
1. Durchlauf: i=0 -> Personen 1-4 werden dargestellt.
2. Durchlauf: i=4 -> Personen 5-8 werden dargestellt.
3. Durchlauf: i=8 -> Personen 9-10 werden dargestellt, da es i+2 und i+3 im Array nicht gibt.
Nun habe ich noch ne Frage: Wenn ich nun das Ergebnis der DB-Abfrage betrachte, habe ich ja mehrere Einzelne Zeilen. Jede Zeile besteht aus "ID", "PersonenName" und "PersonenBild".
Wie würde ich nun auf den PersonenNamen des 3. Eintrags im Array zugreifen?
Der Array wird ja durch $myArray = my_sql_fetch_array($resultSet); erstellt.
wenn ich nun den Zugriff über $myArray[2][PersonenName] versuche klappt es nicht.
Sorry, ich bin noch etwas neu auf dem Gebiet.
Danke
Gruss
Bettina
echo $begrüßung;
Nun habe ich noch ne Frage: Wenn ich nun das Ergebnis der DB-Abfrage betrachte, habe ich ja mehrere Einzelne Zeilen. Jede Zeile besteht aus "ID", "PersonenName" und "PersonenBild".
Wie würde ich nun auf den PersonenNamen des 3. Eintrags im Array zugreifen?
Der Array wird ja durch $myArray = my_sql_fetch_array($resultSet); erstellt.
wenn ich nun den Zugriff über $myArray[2][PersonenName] versuche klappt es nicht.
Aus deinem ersten Posting entnahm ich, dass die Abfrage bereits Geschichte ist und alle Datensätze in einem Array vorliegen. In der Art:
$records = array();
while ($record = mysql_fetch_array($queryresult))
$records[] = $record;
$records ist jetzt Array mit fortlaufend numerischen Keys. Damit funktioniert mein Lösungsvorschlag, und du kannst $records[$i]['PersonenName'] usw. verwenden.
(Bitte unterschlage nicht die Stringbegrenzungszeichen, wenn du auf String-Keys zugreifen möchtest: http://de.php.net/manual/en/language.types.array.php#language.types.array.donts)
echo "$verabschiedung $name";
Hallo dedlfix,
wenn ich aber ein while Schleife benutze, kann ich doch nicht die im vorigen Posting for-Schleife mit $n=4 benutzen, oder?
Grüssle
Bettina
echo $begrüßung;
wenn ich aber ein while Schleife benutze, kann ich doch nicht die im vorigen Posting for-Schleife mit $n=4 benutzen, oder?
Eben deswegen ist ja zuerst der Schritt mit dem Array anlegen da (while) und dann kommt das Durchlaufen (for).
Es wäre auch möglich gleich in der Ergebnis-Auslese-while-Schleife die Ausgabe abzuhandeln. Jedoch müsste man dann erst $n Datensätze sammeln um sie in jeden $n. while-Durchlauf zur Ausgabe aufzubereiten.
Ich empfehle die 2-Schritt-Geschichte, weil damit das Datenholen von der Datenausgabe getrennt sind. Z.B. ist die Fehlersuche in in sich abgeschlossenen Teilen einfacher als in einem großen gemeinsamen Etwas.
echo "$verabschiedung $name";
Hallo dedlfix,
ach, Du meinst also, ich soll in der while-Schleife mir zuerst einen neuen, indizierten, Array zusammenbasteln, welchen ich dann in einer darauf folgenden for-Schleife abarbeite? Habe ich das richtig verstanden?
OK, werde ich gleich ausprobieren wenn ich zu Hause bin.
Ich melde mich dann, wenn ich es geschafft habe. Bist Du morgen oder heute abend auch hier zu erreichen? (falls ich es doch nicht geschafft habe;-))
Ich hoffe, ich mache nicht all zu grosse Umstände.
Gruss
Bettina
Hallo dedlfix,
ich habe Deinen Vorschlag ausprobiert. Es hat funktioniert.
Vielen Dank nochmal, das war sehr hilfreich.
Was ich allerdings nicht so ganz verstehe ist, warum ich denn nun in der while-Schleife nochmal einen Array erstellen musste.
Einen Array erhalte ich doch auch wenn ich folgendes mache:
$persons = mysql_fetch_array($dbResultQuery);
kann ich auf diesem Array nicht genauso drauf arbeiten?
Gruss
Bettina
echo $begrüßung;
Was ich allerdings nicht so ganz verstehe ist, warum ich denn nun in der while-Schleife nochmal einen Array erstellen musste.
Einen Array erhalte ich doch auch wenn ich folgendes mache:
$persons = mysql_fetch_array($dbResultQuery);
kann ich auf diesem Array nicht genauso drauf arbeiten?
Damit bekommst du ein Array mit _einem_ Datensatz.
($persons müsste eigentlich nur $person heißen, weil nur die Daten einer Person enthalten sind. Ich bennene das mal im Folgenden um. $persons ist dann das Array, das vor der while-Schleife initialisiert wurde: $persons = array(); )
Nach einem
$person = mysql_fetch_array($dbResultQuery); // [1]
sieht $person so aus, als ob es so initialisiert wurde:
$person = array(
'Name' => 'Meier',
'Vorname' => 'Max',
'BildURL' => 'http://...');
Diese musst du in ein weiteres Array packen, damit du später einen gleichzeitigen Zugriff auf alle Personen bekommst. Die while-Schleife holt alle Datensätze ab und hängt sie an das $persons-Array an:
$persons[] = $person;
Das ergibt solch ein verschachteltes Array.
$persons = array(
0 => array(
'Name' => 'Meier',
'Vorname' => 'Max',
'BildURL' => 'http://...'),
1 => array(
'Name' => 'Müller',
'Vorname' => 'Manfred',
'BildURL' => 'http://...'),
2 => array(...) );
Und nun gehen solche Dinge wie
echo $persons[$i]['Name'];
echo $persons[$i + 2]['Vorname'];
echo "$verabschiedung {$persons[0]['Nickname']}";
Hallo dedlfix,
jetzt hats klick gemacht.
Ich war immer der Meinung, dass ich über 'mysql_fetch_array' gleich alle Ergebnisse der Ergebnistabelle im Array habe.
Das war mein Fehler.
Vielen Dank nochmal fürs Aufschlauen
Gruss
Bettina