INSERT ID in koppeltabel met loop laatste ID user tabel
Ik ben het stoeien met het volgende:
Ik heb 3 tabellen waaronder 1 koppeltabel, een tabel users en een tabel category.
Als je een nieuwe user toevoegt en je voegt daar 2 categorieën aan toe dan wil ik dat de user ID en de categorie ID in de koppeltabel worden gezet.
+--------+
| userid |
+--------+
| 1 |
+--------+
| 2 |
+--------+
+--------+
| catid |
+--------+
| 1 |
+--------+
| 2 |
+--------+
| 3 |
+--------+
| 4 |
+--------+
| 5 |
+--------+
+--------+--------+
| userid | catid |
+--------+--------+
| 1 | 2 |
+--------+--------+
| 1 | 4 |
+--------+--------+
| 2 | 1 |
+--------+--------+
| 2 | 5 |
+--------+--------+
Stel ik voeg een 3e user toe met de categorie 3,4 en5 dan moet de uitkomste in de koppeltabel zijn
+--------+--------+
| userid | catid |
+--------+--------+
| 1 | 2 |
+--------+--------+
| 1 | 4 |
+--------+--------+
| 2 | 1 |
+--------+--------+
| 2 | 5 |
+--------+--------+
| 3 | 3 |
+--------+--------+
| 3 | 4 |
+--------+--------+
| 3 | 5 |
+--------+--------+
Dit is wat ik geprobeerd heb in PHP
Ik maak een array loop met de categorieën zodat deze word doorlopen en zoveel word ingevoerd aan het aantal categorieën die er voor die user zijn.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
//$category is een array
if (mysqli_query($connection, $insertnewuser)){
$lastuserID = mysqli_insert_id($connection);
foreach($category as $cat){
$insertrelation = "INSERT INTO $relation (userid, catid) VALUES ('$lastuserID', '$cat['value'];')";
mysqli_query($connection, $insertrelation);
}
}
?>
//$category is een array
if (mysqli_query($connection, $insertnewuser)){
$lastuserID = mysqli_insert_id($connection);
foreach($category as $cat){
$insertrelation = "INSERT INTO $relation (userid, catid) VALUES ('$lastuserID', '$cat['value'];')";
mysqli_query($connection, $insertrelation);
}
}
?>
Helaas werkt het niet zoals ik dacht en zou graag een duwtje in de goede richting willen hebben.
Gr. Jop
Waar voeg je de user toe? Dit zou in dezelfde pagina-aanroep moeten gebeuren, anders bevat $connection waarschijnlijk geen insert-id (meer).
In de file staat boven de code die ik stuurde de regels voor het invoeren van de user.
Vandaar dat ik het if statement heb gebruikt in bovenstaande code.
Als ik in PHPmyadmin kijk word wel de user netjes ingevoerd maar blijft de koppeltabel leeg.
Echo eens $insertrelation nadat je die aanmaakt?
Als ik de array doorloop en de waarde zelf echo krijg ik ze wel
Terug. Ik ga alles nog eens doorlopen
Code (php)
1
2
2
INSERT INTO $relation (userid, catid) VALUES ('$lastuserID', '$cat['value'];')
^ wat doet deze punt-komma hier?
^ wat doet deze punt-komma hier?
Echo voor de gein anders deze query eens. Dan zie je waarschijnlijk direct dat deze syntactisch niet klopt.
Daarnaast, dit is in zekere zin een batch aan queries: je voegt een user toe, en dan een aantal gerelateerde categorieën. Je wilt dus eigenlijk dat ofwel alles wordt ingevoegd, of helemaal niets, en niet, zoals nu gebeurt, enkel een user (een onvolledige batch). Op elke plaats waar dit gebeurt kan hierdoor je administratie uit de pas gaan lopen.
Hiervoor zijn database-transacties bedoeld. Deze garanderen dat alle wijzigingen in zijn geheel, of in zijn geheel niet worden doorgevoerd.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
foreach($category as $cat){
$cat = $cat['value'];
$insertrelation = "INSERT INTO $relation (userid, catid) VALUES ('$lastuserID', '$cat')";
mysqli_query($connection, $insertrelation);
}
?>
foreach($category as $cat){
$cat = $cat['value'];
$insertrelation = "INSERT INTO $relation (userid, catid) VALUES ('$lastuserID', '$cat')";
mysqli_query($connection, $insertrelation);
}
?>
Het werkt nu naar behoren:)
@Thomas de punt komma was een type foutje.