Zum Inhalt springen

Checkboxen aus Datenbankabfrage aktivieren PHP/SQL


Empfohlene Beiträge

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>";

	}

}

Link zu diesem Kommentar
Auf anderen Seiten teilen


$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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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>";

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...