while() verschachteln
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anwendung
bau
beton
blume
code
depp
energie
ersten kategorie
fehler
garnichts
gold
inhalt
katastrophe
kategorie
lese
problem
rasse
schlaf
schleife
spalten
-
Ich habe gerade ein seltsames Problem. Ich habe zwei While-Schleifen verschachtelt, in denen ye eine MySQL-Query ausgeführt wird. Dabei werden zuerst Kategorien geladen und danach die Inhalte der Kategorien. Seltsamerweise, werden alle Kategorien geladen, yedoch nur der Inhalt der ersten Katgorie. Der Code sieht folgendermaßen aus:
$i = 0; $catsql = mysql_query("SELECT * FROM Buildings WHERE Kategorie = 'cat' "); while($cat=mysql_fetch_assoc($catsql)) { $i++; echo "<fieldset class=building>"; echo "<legend>".$cat['Name']."</legend>"; echo "<table width=100%>"; echo "<tr class=description>"; echo "<td style=\"text-align:left;\">Gebäude</td>"; echo "<td><img align=absmiddle src=bilder/pvc.gif alt=\"PVC\"></td>"; echo "<td><img align=absmiddle src=bilder/beton.gif alt=\"Beton\"></td>"; echo "<td><img align=absmiddle src=bilder/titan.gif alt=\"Titan\"></td>"; echo "<td><img align=absmiddle src=bilder/gold.gif alt=\"Gold\"></td>"; echo "<td><img align=absmiddle src=bilder/energie.gif alt=\"Energie\"></td>"; echo "<td><img align=absmiddle src=bilder/nanoblack.gif alt=\"Nanoblack\"></td>"; echo "<td>Bauen</td>"; echo "</tr>"; $bui[$i] = mysql_query("SELECT * FROM Buildings WHERE Kategorie = '".$cat['Name']."' AND Rasse = 'Necris' ORDER BY Name ASC "); while($building[$i]=mysql_fetch_assoc($bui[$i])) { echo "<tr>"; echo "<td style=\"text-align:left;\">".$building[$i]['Name']."</td>"; echo "<td>".$building[$i]['PVC']."</td>"; echo "<td>".$building[$i]['Beton']."</td>"; echo "<td>".$building[$i]['Titan']."</td>"; echo "<td>".$building[$i]['Gold']."</td>"; echo "<td>".$building[$i]['Energie']."</td>"; echo "<td>".$building[$i]['Spezial']."</td>"; echo "<td><input type=text size=5 maxlength=4 name=".$building[$i]['ID']."></td>"; echo "</tr>"; } echo "</table>"; echo "</fieldset><br>"; }
Habe bereits alle Unterquerys und Unterwhiles mit Indizes versehen, so dass alle seperat existieren und sich nicht im Laufe der Schleife gegenseitig überschreiben. Trotzdem wird nur der Inhalt der ersten Kategorie ausgegeben. Findet einer den Fehler ?
Liebe Grüße
- VampireSilence -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi,
was gibt das Script denn genau aus?
in dem 2. while einfach <td></td> ???
MfG
Steffen -
Nein, einfach garnichts. Als wäre die While-Schleife beim 2. Hauptdurchlauf einfach nicht mehr vorhanden.
Liebe Grüße
- VampireSilence -
Lass mich raten, dies soll ein BG werden und Du arbeitest noch net so lange mit HTML und PHP.
Ich könnte jetzt zwar herrunter beten, dass das nichts bringt und so weiter. Aber Du wirst Dich eh nicht davon abhalten lassen. Deswegen hier ein paar Tipps:
- Lern HTML und zwar richtig. Für PHP solltest Du dies beherschen und im Schlaf ein HTMLGrundgerüst hinstellen können.
- Lern PHP und zwar richtig. Grade bei einem solch großen Projekt ist es wichtig alles Platz und Zeitsparend zu coden. Das was ich bisher da sehe, ist eine Katastrophe.
- Benutze eine Template Engine, das spart Dir eine ganze menge Arbeit und noch mehr Nerven.
- Baue PHP Anwendungen Idiotensicher. Irgendwann kommt immer ein Depp, der Dir mit einem Klick das System zerschießt.
Klingt zwar ein wenig hart, ist auch so gemeint. Aber ich rede net gern durch nen Straus Blumen ;) -
Ich arbeite seit ca. 5 Yahren mit HTML und seit 3 mit PHP, aber wenn du mir wenigstens die Lösung des Problems erklärst, kann ich darüber hinweg sehen. :P
Liebe Grüße
- VampireSilence -
Hi,
setze Errorreporting mal auf E_ALL, villeicht gibt PHP dann einen Helfenden Hinweis!
MfG
Steffen
Beitrag zuletzt geändert: 19.3.2009 19:10:29 von fusballmanager -
Wenn Du schon seid 5 Jahren mit HTML arbeitest, warum verwendest Du dann immernoch ein Tabellenkonstrukt? Da geht doch die Übersicht völlig bei flöten. Dann kannst Du Dir auch gleich noch " im PHP abgewöhnen und statt dessen ' verwenden. Dadurch ersparst Du Dir das Escapen:
echo = '<a href="blabla">Link</a>';
Zum Beispiel, ist definitiv kürzer als:
echo = "<a href=\"blabla\">Link</a>";
Außerdem einfacher.
Um aber Dein Problem zu lösen, müsste ich wissen wie die DB aussieht und was Du am Ende haben willst. -
Ich verwende es, weil es für mich am übersichtlichsten Aussieht und das Escapen ist Gewohnheitssache. Wenn ich es anders mache, baue ich einfach viel öfter Fehler ein, als wenn ich es wie gewohnt mit \" schreibe, also bleibe ich dabei.
Also zur DB:
In der betreffenden Tabelle sind Gebäude mit den Spalten (ID, Name, Rasse, Kategorie) gelistet. Gebäude die selbst als Kategorie fungieren sollen, haben die Kategorie "cat". Anhand dessen lese ich sie auch zuerst aus. Danach Lese ich alle Gebäude aus, dessen Kategorie dem "Gebäudenamen" (eigtl ya Kategorienamen) entspricht. Bei der ersten Kategorie funktioniert das wie gesagt auch noch, nur bei der Zweiten und den Folgenden nicht mehr.
@fussballmanagar
Das hatte ich schon probiert, aber da wird auch nichts angezeigt.
Liebe Grüße
- VampireSilence -
Hi,
dann liegt der Fehler wahrscheinlich in der Datenbank, dass in der 2. Kategorie keine Gebäude für dir Rasse Necris vorhanden sind. Dann wird nämilch das 2. while erst garnicht ausgeführt!
MfG
Steffen -
Omfg, du hast Recht. -.-
Yetzt wollte ich so schnell sein und hab dabei einfach vergessen bei den Testgebäude ne Rasse einzutragen.
Dann bin ich wohl doch nich doof, sondern einfach nur senil. ^^"
Trotzdem Danke an Alle !! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage