PDA

Vollstndige Version anzeigen : WHILE in WHILE-Schleife


schlodd
24-07-2004, 20:50
hallchen an alle, ich mchte 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 dazugehrigen Datenstzen
ausgegeben wird. Ergebnis soll sein: Eine HTML-Tabelle mit einer Spalte

Zelle 1 erstgefundes Datum
Zelle 2 alle Datenstze mit erstgefunden Datum

Zelle 3 2.nchsteses Datum
Zelle 4 alle Datenstze mit 2.nchsteses Datum usw.

ich hoffe ihr knnt mir wiedermal helfen und bedank mich schonmal im Voraus fr 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, 17:43
Original geschrieben von schlodd
Ergebnis soll sein: Eine HTML-Tabelle mit einer Spalte

Zelle 1 erstgefundes Datum
Zelle 2 alle Datenstze mit erstgefunden Datum

Zelle 3 2.nchsteses Datum
Zelle 4 alle Datenstze mit 2.nchsteses Datum usw.

1. Erklr 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 mchtest?

2. Du hast ja schon einen Auszug aus deinem Script gepostet. Ein bersichtlicherer Programmierstil wre 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 einrcken (http://tut.php-q.net/mysql-einrueck.html)

3. Was fr Fehlermeldungen erhlst du bzw. was macht dein Script nicht so, wie du es willst?

schlodd
25-07-2004, 23:59
...danke xabbuh dass Du Dich meiner annimmst. Ja ich wei, mein
Schreibstil ist schlecht bzw. gar kein Programmierstil. Ich habs gern
enger zusammenstehend, damit ich nicht so oft scrollen muss.

zu Deiner Frage (1. Erklr 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 mchtest?):

Die Nummerierung der Tabellenzellen ist jetzt nur zur Erluterung...

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

Zelle 3 <tr><td>Ausgabe des nchsten Datums</td></tr>
Zelle 4 <tr><td>Ausgabe aller Datenstze die mit dem Datum in "Zelle 3" bereinstimmen</td></tr> usw.

zu Deiner Frage 3. Was fr Fehlermeldungen erhlst du bzw. was macht
dein Script nicht so, wie du es willst?:

keine Fehlermeldungen erhalten.

das Script gibt nicht alle Datenstze aus
ich bekomme nur die Zellen 1 und 2 anstatt fr alle Datenstze
die restlichen Zellen wie oben Bsp. beschrieben.

ich hoffe dass man das Problem lsen kann und bitte um weitere Hilfe!

xabbuh
26-07-2004, 13:59
Ich habe mir deinen Quelltext mal ein wenig genauer zu Gemte gefhrt und einige Stellen, die ich fr 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 fr das Array ist schlecht, $row ist schon der Arrayname der ersten Schleife, die erste Schleife kann somit nicht mehr weiter ausgefhrt werden, fr die 2 Schleife wrde 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, 23:22
Vielen Dank xabbuh, auf die Idee wre ich nie und nimmer gekommen. Die $result-Variablen musste ich auch noch ndern und jetzt funktionierts ;-)

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

Danke nochmal vielmals