Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Checkboxen aus Datenbankabfrage aktivieren PHP/SQL

Empfohlene Antworten

Veröffentlicht

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

	}

}


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

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

}

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.