Ich habe 3 Tabellen:aktualisiert mehrere Zeilen Fremdschlüssel mit ausgewählter Form
Dateien (file_id, Name, etc ..),
Gruppen (group_id, Namen, etc ...) undfile_group (file_id, group_id) => Verwendung des Fremdschlüssels hier mit den primären Schlüsseln aus beiden Tabellen (Dateien und Gruppen).
Mein Problem ist: Ich habe Probleme, ein Update auf meinem Tisch file_group
.
Fehlermeldung: Integrität Einschränkungsverletzung: 1062 Duplcate Eintrag '40 -6' für Schlüssel PRIMARY ....
Ich weiß, warum es mir, dass zu sagen, aber ich kann immer noch nicht damit es funktioniert.
Der Code ist:
<form method="post" action="edit.php">
<select multiple="multiple" name="groups" class="form-control" >
<option value=1>Admin</option>
<option value=2>project_1</option>
<option value=11>Project_Bio</option>
<option value=12>Project_3</option>
<option value=20>Project_Off</option>
<option value=22>Project_zed</option>
</select>
</form>
<?php
$id = 40;
if(!empty($_POST)){
//signleton to get the table where i want to make the update
$fc = $app->getTable('fc');
$new_grps = $_POST['groups'];
foreach($new_grps as $k => $new_grp){
$fc->update($id,[
'group_id' => $new_group
]);
}
}
?>
In meinem Tisch file_group
, eine Datei 2 Gruppen haben kann. Also versucht der Code dasselbe Update mit den gleichen Daten zu machen. Für mich scheint es, als ob die Schleife nicht funktioniert!
Irgendwelche Tipps?
The Var_dump();
gibt die folgenden:
array(2){
[0]=>string(1)"11"
[1] =>string(2)"20"
}
Datentabellenstrukturen:
--
-- Table structure for file
--
CREATE TABLE files (
file_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
description TEXT DEFAULT NULL,
owner VARCHAR(255) DEFAULT NULL,
date DATETIME DEFAULT NULL,
last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (file_id),
KEY idx_title (title)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Table structure for table `groups`
--
CREATE TABLE groups (
group_id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(25) NOT NULL,
last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (group_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Table structure for table `file_group`
--
CREATE TABLE file_group (
file_id SMALLINT UNSIGNED NOT NULL,
group_id TINYINT UNSIGNED NOT NULL,
last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (file_id, group_id),
CONSTRAINT fk_file_group_file FOREIGN KEY (file_id) REFERENCES files (file_id) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT fk_film_group_group FOREIGN KEY (group_id) REFERENCES groups (group_id) ON DELETE RESTRICT ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
'var_dump ($ _ POST);' und was siehst du? Sind die Daten sinnvoll? Wenn Sie versuchen, den Befehl über eine SQL-IDE oder -Shell auszuführen, funktioniert die Abfrage? Sie zeigen nicht, wie Sie die Daten tatsächlich an den Server senden. Kannst du diesen Code entweder in die Frage eingeben oder die Ergebnisse des 'var_dump' in die Frage einarbeiten? – Terminus