Hallo Tom,
OK, ich lass mich mal auf das ein, was du und die anderen mir geschrieben haben. Ich sehe zwar noch kein Vorteil darin alle Daten untereinander zu schreiben, aber OK, wenn ihr es sagt wird es schon ein Grund haben, ihr macht es ja definitiv schon länger wie ich.
Hab mir nun eine Tabelle mit „sprachen“ angelegt, diese sieht so aus
CREATE TABLE IF NOT EXISTS `sprachen` (
`s_id` int(11) NOT NULL,
`s_titel` varchar(200) NOT NULL,
`s_bezeichnung` varchar(200) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
Hab auch schon meine Daten eingefügt, diese sehen wie folgt aus
INSERT INTO `sprachen` (`s_id`, `s_titel`, `s_bezeichnung`) VALUES
(1, 'Deutsch', 'deutsch'),
(2, 'Holländisch', 'hollaendisch'),
(3, 'Tschechisch', 'tschechisch'),
(4, 'Türkisch', 'tuerkisch'),
(5, 'Russisch', 'russisch');
Das zusammenbauen meiner Felder kann ich nun auch einfacher machen, dieses habe ich wie folgt gelöst:
<form name="form1" method="post" action="">
<?php
$stmt = $mysqli->prepare("SELECT s_id, s_titel, s_bezeichnung FROM sprachen");
$stmt->execute();
$stmt->bind_result($s_id, $s_titel, $s_bezeichnung);
while($stmt->fetch()) {
?>
<input name="lang[]" type="checkbox" id="<?php echo $s_bezeichnung;?>" value="<?php echo $s_id;?>">
<label for="<?php echo $s_bezeichnung;?>"><?php echo $s_titel;?></label>
<br>
<?php } ?>
<br>
<input type="submit" name="abschicken" id="abschicken" value="Daten eintragen">
</form>
Das ganze sieht nun so aus:
Wenn ich mir den generierten Quelltext ansehe, sollte soweit auch alles passen. In Value habe ich nun die jeweilige ID stehen.
So, kommen wir nun zum speichern, dieses habe ich nun wie folgt gelöst. In meiner Datenbank gibt es nun eine weitere Tabelle mit „sprachen_user“ diese sie derzeit so aus:
CREATE TABLE IF NOT EXISTS `sprachen_user` (
`su_id` int(11) NOT NULL,
`su_userID` varchar(200) NOT NULL,
`su_sprachenID` varchar(200) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Bevor ich meine neuen Daten in die Datenbank eintragen, lösche ich erstmal alle Datensätze die diesem User gehören, da wir hier nicht von großen Datenmengen reden, denke ich mal, dass das der beste und vor allem einfachste Weg ist oder? Dieses mache ich so:
$id = '1';
$stmt = $mysqli->prepare("DELETE FROM sprachen_user WHERE su_userID=?");
$stmt->bind_param("i", $id);
$stmt->execute();
Derzeit hat $id ein festen Wert, dieser wird später noch dynamisch auf meine UserID geändert, zum testen wollte ich schauen ob wirklich nur die Datensätze gelöscht werden, die den entsprechenden Wert haben.
Kommen wir nun zum speichern meiner Daten, dieses habe ich so gelöst:
if(is_array($_POST["lang"]) && $_POST["lang"][0]){
foreach($_POST["lang"] as $v){
$stmt = $mysqli->prepare("INSERT INTO sprachen_user (su_userID, su_sprachenID) VALUES (?, ?)");
$su_sprachenID = $v;
$su_userID = $user_code;
$stmt->bind_param("ss", $su_userID, $su_sprachenID);
$stmt->execute();
}}
Hab ich es richtig verstanden wie ihr es gemeint habt? Wenn nicht ich bin gerne bereit dieses nochmals umzustellen, sollten noch Fehler vorhanden sein.