Mehrfachauswahl in Datenbank speichern

Horrortubby

Grünschnabel
Hallo,
ich hoffe ihr könnt mir helfen. Folgende Situation: Über eine Checkboxauswahlliste sollen einzelne Benutzer die in einer eigenen Tabelle(t_Mitglieder) stehen stehen einer Gruppe zugeordnet werden. Eine klassische 1:n Beziehung.

Hier mal das ganz grobe Modell der Datenbank:
t_Mitglieder:
-mitglieder_ID
-Name
-fkGroup

t_Group
-group_ID
-Name

In meinem Formular werden für eine Gruppe nun alle Mitglieder ausgelesen, jeder bekommt schön brav sein eigenes Checkbox Feld. Der Nutzer kann fröhlich makieren und makierungen Rückgängig machen und das ganze dann an das Script rüberjodeln. Das verarbeitet dann die Daten so:

PHP:
$sql = "SELECT mb_id FROM t_Mitglieder";
			$rs = mysql_query($sql);
			while($row = mysql_fetch_object($rs))
			{
				foreach($_POST['fkGroup'] as $user)
				{
						
					if($user == $row->mb_id)
					{
						$sqlInsert = "UPDATE t_Mitglieder SET fkGroup = '$_POST[group_id]' WHERE mb_id LIKE $row->mb_id";
  						mysql_query($sqlInsert);
  						
  						break 1;
					}else
					{
						
						$sqlInsert = "UPDATE t_Mitglieder SET fkGroup = '0' WHERE mb_id LIKE $row->mb_id";
  						mysql_query($sqlInsert);
					}
  						
				}
				reset($_POST['fkGroup']);
			}

Bisher prüft er also für JEDEN User in der Tabelle ob seine ID im Rückgabe Array des Formulars vorhanden ist und speichert das ganze dann dementsprechend. Naja sollte er eigentlich. Denn es funktioniert nicht und ich habe keinen blanken schimmer wieso. Ich habe die SQL Statements gecheckt, die sind korrekt. Er scheint auch richtig durch die Abfragen zu laufen, dennoch speichert er immer nur den letzten Datensatz.

Oder eine ganz andere Frage, habt ihr eine Idee wie ich den ganzen Prozess etwas performanter gestalten kann?
 
Zuletzt bearbeitet:
Also wenn ich dich richtig verstanden habe, dann müsste folgender Code deinen Ansprüchen genügen:
PHP:
// Erst bei alle Mitgliedern, die der Gruppe angehört haben die GruppenID auf 0 setzen
$update = "UPDATE `t_Mitglieder` SET `fkGroup` = 0 WHERE `fkGroup` = " . intval(abs($_POST['group_id']));
mysql_query($update) or die(mysql_error());

// Dann die übergebenen Mitglieder auslesen und ein MySQL-Statement zusammenschustern
$where = '';
foreach($_POST['fkGroup'] as $userID)
{
	$where .= "`mb_id` = " . intval(abs($userID)) . " OR ";
}
// Das letzte OR rausschnippeln
$where = substr($where, 0, -4);

// Und die Gruppe für alle ausgewählten Mitglieder setzen
$update = "UPDATE `t_Mitglieder` SET `fkGroup` = " . intval(abs($_POST['group_id'])) . " WHERE {$where}";
mysql_query($update) or die(mysql_error());
 
Zurück