Probleem met foreign key

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Gijs Marien

Gijs Marien

10/04/2021 19:13:05
Quote Anchor link
Hallo allen,
voor een hobbyprojectje ben ik wederom bezig met een Shopping Cart, die de bestelling doorgeeft in de database. Nu zit het probleem niet in de query op de website, maar in de database zelf. Ik krijg de volgende foutmelding: Cannot add or update a child row: a foreign key constraint fails.
Even ter uitleg, ik heb twee tabellen, in de eerste zitten de persoonlijke gegevens van de bestelling met orderar en in de tweede tabel zit het ordernr, productnr en hoeveelheid.
Dit is hoe de tabel eruit ziet.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE `Bestellingdetails` (
`ordernr` int(11) NOT NULL,
`voornaam` varchar(255) NOT NULL,
`achternaam` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`telnr` int(20) NOT NULL,
`straatnaam` varchar(255) NOT NULL,
`huisnummer` int(9) NOT NULL,
`postcode` varchar(6) NOT NULL,
`plaats` int(255) NOT NULL,
`besteldatum` datetime NOT NULL DEFAULT current_timestamp(),
`status` varchar(255) NOT NULL,
PRIMARY KEY (`ordernr`)
) ENGINE=InnoDB DEFAULT CHARSET=latin

NOTE: Ik heb auto increment hier uit ordernr gehaald.

En de andere:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
CREATE TABLE `Bestellingproduct` (
`ordernr` int(11) NOT NULL,
`productnr` int(11) NOT NULL,
`hoeveelheid` int(11) NOT NULL,
KEY `productnr` (`productnr`),
KEY `ordernr` (`ordernr`),
CONSTRAINT `Bestellingproduct_ibfk_1` FOREIGN KEY (`productnr`) REFERENCES `Producten` (`productnr`),
CONSTRAINT `Bestellingproduct_ibfk_2` FOREIGN KEY (`ordernr`) REFERENCES `Bestellingdetails` (`ordernr`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1


En tot slot de query in php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$voornaam = $_POST["voornaam"];
$achternaam = $_POST["achternaam"];
$email = $_POST["email"];
$telnr = $_POST["telnr"];
$straatnaam = $_POST["straatnaam"];
$huisnummer = $_POST["huisnummer"];
$postcode = $_POST["postcode"];
$plaats = $_POST["plaats"];
  if(isset($_POST['submit'])){
     $sql="INSERT INTO Bestellingdetails (voornaam,achternaam,email,telnr,straatnaam,huisnummer,postcode,plaats,status) VALUES ('$voornaam','$achternaam','$email','$telnr','$straatnaam','$huisnummer','$postcode','$plaats','Bestelling ontvangen')";
    if (mysqli_query($connectie, $sql)) {
  echo "New record created successfully";
} else {
  echo "Error: " . $sql . "<br>" . mysqli_error($connectie);
}

foreach ($_SESSION["cart_item"] as $item){
  $hoeveelheid=$item['quantity'];
  $productnr=$item["productnr"];
  $query="INSERT INTO Bestellingproduct (productnr,hoeveelheid) VALUES ('$productnr','$hoeveelheid')";
if (mysqli_query($connectie, $query)) {
  echo "New record created successfully";
} else {
  echo "Error: " . $query . "<br>" . mysqli_error($connectie);
}

  
}
}

Hopelijk kan een van jullie het probleem vinden.
Dank alvast
 
PHP hulp

PHP hulp

13/05/2021 01:31:35
 
Ivo P

Ivo P

10/04/2021 19:31:54
Quote Anchor link
je vergeet bij de insert-into-bestellingproduct query om ordernr op te geven.

Middels https://www.php.net/manual/en/mysqli.insert-id.php kun je het id dat je op regel 11 verkreeg ophalen.
Dat gebruik je vervolgens bij de query van regel 20
 
- Ariën -
Beheerder

- Ariën -

10/04/2021 20:06:10
Quote Anchor link
Let op SQL-injectie!

Ook Jacques 'd Ancona kan zich niet aanmelden.
Gewijzigd op 10/04/2021 20:08:37 door - Ariën -
 
Gijs Marien

Gijs Marien

11/04/2021 18:52:50
Quote Anchor link
Ivo P op 10/04/2021 19:31:54:
je vergeet bij de insert-into-bestellingproduct query om ordernr op te geven.

Middels https://www.php.net/manual/en/mysqli.insert-id.php kun je het id dat je op regel 11 verkreeg ophalen.
Dat gebruik je vervolgens bij de query van regel 20


Dankjewel, het is deels gelukt. Ik noem de variabel die uit insert_id komt $id. Het ding dat zich nu afspeelt is dat wanneer de for each loop opent, $id zijn waarde verliest, hoe kan ik dit fixen?
 
Ad Fundum

Ad Fundum

11/04/2021 19:43:23
Quote Anchor link
Is er ook code van hoe die $id uit insert_id komt in de foreach lus?
 
Ivo P

Ivo P

11/04/2021 20:43:16
Quote Anchor link
$id moet maar 1x zijn waarde krijgen, en wel vóór je de foreach lus in gaat.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.