Hallöchen,
vorab ist zu erwähnen, dass folgende Struktur vorhanden ist.
id | group_id | right_id | negate
------------------------------------
1 | 2 | 20 | 0
2 | 2 | 30 | 0
3 | 2 | 40 | 1
Die Einträge sind beispielhaft.
Bei der Auswertung meines Formulars werden alle Rechte übergeben
und sollen bestehende Rechte in der Datenbank aktualisieren oder ggf. falls
die Checkboxen GRANT & REVOKE "unchecked" sind, dieses Recht löschen.
Die Checkboxen werden folgendermaßen erzeugt:
PHP-Code:
negate 0: <input type="checkbox" name="' . $right['name'] . '" value="1" checked />
negate 1: <input type="checkbox" name="' . $right['name'] . '" value="0" checked />
Ist eine oder beide Checkboxen "checked", soll das Recht in der Datenbank
eingetragen werden oder ggf. aktualisiert werden. Ist
keine Checkbox
"checked" soll das Recht wieder entfernt werden oder wenn es nicht existent ist,
nichts unternommen werden.
Das Problem:
PHP-Code:
ON DUPLICATE KEY UPDATE
Die Spalte
id hat
auto_increment und ist der Primärschlüssel.
In der Auswertung des Formulars kann ich die
id aber nicht ermitteln.
Sie ist also als Primärschlüssel nutzlos.
Die
group_id kann ich nicht als Primärschlüssel setzen, da diese mehrfach
für jedes einzelne Recht je Gruppe vorkommt.
Setze ich
right_id als Primärschlüssel existiert das selbe Problem.
Lösung?
Kann ich zwei Primärschlüssel festlegen, für die das jeweilige Recht überprüft wird?
So entstehen keine Verwechselungen.
Sprich
ON DUPLICATE KEY UPDATE reagiert auf group_id und right_id.
PHP-Code:
mysqli_query($_MySQL, "INSERT INTO `group_rights` (group_id, right_id, negate) VALUES (" . $_group_edit_id . ", " . $col['id'] . ", 0) ON DUPLICATE KEY UPDATE `id` = `id` + 1;");