madimalocka Geschrieben 27. September 2005 Geschrieben 27. September 2005 Folgendes Problem: Es betrifft zwei verschiedene SQL-Tabellen: Tabelle mit den verfügbaren Reisearten Tabelle mit Kundenpräferenzen für Reisearten In einem Formular zum bearbeiten des Kundenstammsatzes sollen die Reisearten als Liste ausgegeben werden (Checkboxen) und alle Checkboxen aktiviert werden, die der Kunde in der Präferenzentabelle gespeichert hat. Leider wird mir dabei immer nur eine Checkbox - unabhängig wieviele Präferenzen gespeichert sind - aktiviert. Hat jemand einen Lösungsansatz? $result = mysql_query("SELECT interesse FROM interessen ORDER BY interesse"); while($row = mysql_fetch_array($result)) { $result2 = mysql_query("SELECT reiseart FROM praeferenz WHERE kundenID='".$_GET['kundenID']."'"); while($row2 = mysql_fetch_array($result2)) { if($row['interesse'] == ($row2['reiseart'])) echo "<tr><td width=462 colspan=2><input type=checkbox name=praeferenz[] value='".$row['interesse']."' checked>".$row['interesse']."</td></tr>"; else echo "<tr><td width=462 colspan=2><input type=checkbox name=praeferenz[] value='".$row['interesse']."'><label for=check".$i.">".$row['interesse']."</td></tr>"; } } Zitieren
schlati Geschrieben 27. September 2005 Geschrieben 27. September 2005 $result = mysql_query("SELECT interesse FROM interessen ORDER BY interesse"); while($row = mysql_fetch_array($result)) { $result2 = mysql_query("SELECT reiseart FROM praeferenz WHERE kundenID='".$_GET['kundenID']."'"); while($row2 = mysql_fetch_array($result2)) { //in dieser Schleife wird die 2te Abfrage komplett abgearbeitet, während //$row['interesse'] stets gleich bleibt, daher ist der Vergleich max. 1 Mal //erfolgreich if($row['interesse'] == ($row2['reiseart'])) echo "<tr><td width=462 colspan=2><input type=checkbox name=praeferenz[] value='".$row['interesse']."' checked>".$row['interesse']."</td></tr>"; else echo "<tr><td width=462 colspan=2><input type=checkbox name=praeferenz[] value='".$row['interesse']."'><label for=check".$i.">".$row['interesse']."</td></tr>"; } } Hat jemand einen Lösungsansatz? Naja, das Problem ist doch die Verschachtelung der while-Schleifen. Wenn du in deiner zweiten While-Schleife die Variable $row['interesse'] mal mit nem echo oder so ausgeben würdest, würdest du sehen, dass der Inhalt während der ganzen 2ten Schleife gleich bleibt, daher wird auch max. 1 Datensatz gecheckt. Auf die schnelle könnte man das Problem lösen, indem du die $row['interessen'] vorab in ein Array packst und dieses während deiner 2ten while-Schleifen schrittweise ausliest und dann halt vergleichst bzw. das komplette "interessen"-Array auf eine Übereinstimmung mit der Spalte Reiseart prüfst. Zitieren
etreu Geschrieben 27. September 2005 Geschrieben 27. September 2005 Wieso benutzt du denn nicht gleich ein JOIN in deiner Abfrage? Zitieren
madimalocka Geschrieben 27. September 2005 Autor Geschrieben 27. September 2005 Inwiefern ein JOIN? Bei einem JOIN hätte ich ja das Problem, dass mir nur diejenigen Reisearten ausgegeben werden, die der Kunde als Präferenz hat. Es sollen aber alle Reisearten ausgegeben und diejenigen aktiviert werden, die der Kunde als Präferenz hat. Das mit dem vorab Erzeugen eines Arrays leuchtet mir jedenfalls ein (siehe Skript unten) aber nun habe ich das Problem dass ich im Array wiederrum nur einen Wert stehen hab. Leider klappt es auch nicht mit if(in_array($row['interesse'], $row2)) wobei $row2 ja bereits ein Array mit allen Werten der Abfrage sein sollte. ------------------------------ $z = 0; while($row2 = mysql_fetch_array($result2)) { $a = array_fill($z, 1, $row2['reiseart']); $z++; } $result = mysql_query("SELECT interesse FROM interessen ORDER BY interesse"); while($row = mysql_fetch_array($result)) { if(in_array($row['interesse'], $a)) echo "<tr><td width=462 colspan=2><input type=checkbox name=praeferenz[] value='".$row['interesse']."' checked>".$row['interesse']."</td></tr>"; else echo "<tr><td width=462 colspan=2><input type=checkbox name=praeferenz[] value='".$row['interesse']."'>".$row['interesse']."</td></tr>"; } Zitieren
madimalocka Geschrieben 27. September 2005 Autor Geschrieben 27. September 2005 Ok, das Problem hat sich nun von selbst gelöst. --> while($row2 = mysql_fetch_array($result2)) { $a[] = $row2['reiseart']; } $result = mysql_query("SELECT interesse FROM interessen ORDER BY interesse"); while($row = mysql_fetch_array($result)) { if(in_array($row['interesse'], $a)) echo "<tr><td width=462 colspan=2><input type=checkbox name=praeferenz[] value='".$row['interesse']."' checked>".$row['interesse']."</td></tr>"; else echo "<tr><td width=462 colspan=2><input type=checkbox name=praeferenz[] value='".$row['interesse']."'>".$row['interesse']."</td></tr>"; } So klappt es endlich. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.