PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : WHILE in WHILE-Schleife


schlodd
24.07.2004, 19:50:27
hallöchen an alle, ich möchte gern auf meine Seite einen Eventkalender haben,
der beim ersten Aufruf wie auf meiner jetzigen Seite (http://schlodd.bei.t-online.de/jul04.htm) zu sehen ist, aussieht.
Problem ist dass nur das erstgefunde Datum mit den dazugehörigen Datensätzen
ausgegeben wird. Ergebnis soll sein: Eine HTML-Tabelle mit einer Spalte

Zelle 1 erstgefundes Datum
Zelle 2 alle Datensätze mit erstgefunden Datum

Zelle 3 2.nächsteses Datum
Zelle 4 alle Datensätze mit 2.nächsteses Datum usw.

ich hoffe ihr könnt mir wiedermal helfen und bedank mich schonmal im Voraus für alles


fecho "<table cellspacing="0" cellpadding="2" border="0" class="text1">";
$sql = "SELECT DISTINCT dates FROM tour WHERE dates>='$today' ORDER BY dates";
$result = mysql_query($sql, $db);
while($row = mysql_fetch_array($result)){// while die1.
$datrow=$row['dates'];
echo "<tr><td bgcolor="#000000"><font color="#FF9900"><b>".$datrow."</b></font></td></tr>n<tr><td>";

$sql = "SELECT * FROM tour WHERE dates='$datrow' ORDER BY dates"; //waehlt alle nach ausgew. event und sortiert nach datum ab heutigen Tag
$result = mysql_query($sql, $db);
while($row = mysql_fetch_array($result)){// while die2.
echo $row['dates']." *".$row['a01'];
if ($row['a02'] !='') {echo ", ".$row['a02'];} if ($row['a03'] !='') {echo ", ".$row['a03'];}
echo " in ". $row['country']." ".$row['place'];
if ($row['venue'] != '') { echo " / ".$row['venue'];}
echo "<br>n";


}//2.while_end
echo "</td></tr>n";
}//1.while_end

echo "</table>";
error_reporting(E_ALL);

xabbuh
25.07.2004, 16:43:35
Original geschrieben von schlodd
Ergebnis soll sein: Eine HTML-Tabelle mit einer Spalte

Zelle 1 erstgefundes Datum
Zelle 2 alle Datensätze mit erstgefunden Datum

Zelle 3 2.nächsteses Datum
Zelle 4 alle Datensätze mit 2.nächsteses Datum usw.

1. Erklär mal bitte genauer, wie das Ergebnis aussehen soll. Was soll Zelle 1, Zelle 2 etc. bedeuten, wenn du eine Tabelle mit nur einer Spalte haben möchtest?

2. Du hast ja schon einen Auszug aus deinem Script gepostet. Ein übersichtlicherer Programmierstil wäre da nicht schlecht. Also so:

<?php
echo "<table cellspacing="0" cellpadding="2" border="0" class="text1">";
$sql = "SELECT
DISTINCT dates
FROM
tour
WHERE
dates>='$today'
ORDER BY
dates";
$result = mysql_query($sql, $db);

while($row = mysql_fetch_array($result)) {
$datrow=$row['dates'];
echo "<tr><td bgcolor="#000000"><font color="#FF9900"><b>" . $datrow . "</b></font></td></tr>n<tr><td>";

$sql = "SELECT
*
FROM
tour
WHERE
dates='$datrow'
ORDER BY
dates";
$result = mysql_query($sql, $db);

while($row = mysql_fetch_array($result)) {
echo $row['dates']." *".$row['a01'];
if($row['a02'] !='') {
echo ", ".$row['a02'];
}
if($row['a03'] !='') {
echo ", ".$row['a03'];
}
echo " in " . $row['country'] . " " . $row['place'];
if ($row['venue'] != '') {
echo " / ".$row['venue'];
}
echo "<br>n";
}
echo "</td></tr>n";
}
echo "</table>";
error_reporting(E_ALL);
?>

Schau dir dazu am besten auch mal diese Seiten an:
PEAR: Coding Standards (http://pear.php.net/manual/de/standards.php)
tut.php-q.net: MySQL-Querys einrücken (http://tut.php-q.net/mysql-einrueck.html)

3. Was für Fehlermeldungen erhälst du bzw. was macht dein Script nicht so, wie du es willst?

schlodd
25.07.2004, 22:59:10
...danke xabbuh dass Du Dich meiner annimmst. Ja ich weiß, mein
Schreibstil ist schlecht bzw. gar kein Programmierstil. Ich hab´s gern
enger zusammenstehend, damit ich nicht so oft scrollen muss.

zu Deiner Frage (1. Erklär mal bitte genauer, wie das Ergebnis
aussehen soll. Was soll Zelle 1, Zelle 2 etc. bedeuten, wenn
du eine Tabelle mit nur einer Spalte haben möchtest?):

Die Nummerierung der Tabellenzellen ist jetzt nur zur Erläuterung...

<table>
Zelle 1 <tr><td>Ausgabe des ersten Datums</td></tr>
Zelle 2 <tr><td>Ausgabe aller Datensätze die mit dem Datum in "Zelle 1" übereinstimmen</td></tr>

Zelle 3 <tr><td>Ausgabe des nächsten Datums</td></tr>
Zelle 4 <tr><td>Ausgabe aller Datensätze die mit dem Datum in "Zelle 3" übereinstimmen</td></tr> usw.

zu Deiner Frage 3. Was für Fehlermeldungen erhälst du bzw. was macht
dein Script nicht so, wie du es willst?:

keine Fehlermeldungen erhalten.

das Script gibt nicht alle Datensätze aus
ich bekomme nur die Zellen 1 und 2 anstatt für alle Datensätze
die restlichen Zellen wie oben Bsp. beschrieben.

ich hoffe dass man das Problem lösen kann und bitte um weitere Hilfe!

xabbuh
26.07.2004, 12:59:47
Ich habe mir deinen Quelltext mal ein wenig genauer zu Gemüte geführt und einige Stellen, die ich für nicht so gelungen halte, mit Kommentare versehen:


<?php
echo "<table cellspacing="0" cellpadding="2" border="0" class="text1">";
$sql = "SELECT
DISTINCT dates
FROM
tour
WHERE
dates>='$today'
ORDER BY
dates";
$result = mysql_query($sql, $db);

while($row = mysql_fetch_array($result)) {
$datrow=$row['dates'];
echo "<tr><td bgcolor="#000000"><font color="#FF9900"><b>" . $datrow . "</b></font></td></tr>n<tr><td>";

$sql = "SELECT
*
FROM
tour
WHERE
dates='$datrow'
ORDER BY
dates"; //<-- Nach Datum sortieren ist hier falsch, da eh alle Daten gleich sind, mach lieber ORDER BY id, falls du dieses Feld hast
$result = mysql_query($sql, $db);

while($row = mysql_fetch_array($result)) { //<-- $row als Name für das Array ist schlecht, $row ist schon der Arrayname der ersten Schleife, die erste Schleife kann somit nicht mehr weiter ausgeführt werden, für die 2 Schleife würde ich $row2 als Arraynamen empfehlen
echo $row['dates']." *".$row['a01'];
if($row['a02'] !='') {
echo ", ".$row['a02'];
}
if($row['a03'] !='') {
echo ", ".$row['a03'];
}
echo " in " . $row['country'] . " " . $row['place'];
if ($row['venue'] != '') {
echo " / ".$row['venue'];
}
echo "<br>n";
}
echo "</td></tr>n";
}
echo "</table>";
error_reporting(E_ALL);
?>


Wenn du nun die entsprechenden $row auf $row2 änderst, sollte es funktionieren.

schlodd
27.07.2004, 22:22:51
Vielen Dank xabbuh, auf die Idee wäre ich nie und nimmer gekommen. Die $result-Variablen musste ich auch noch ändern und jetzt funktionierts ;-)

Hast auch Recht bei der 2. Datenbankabfrage, muss natürlich ein anderes Kriterium als dates rein.

Danke nochmal vielmals