Ik heb een vraagje over de volgende code.
<?php
for($i = 1; $i <= $product_aantal; $i++) {
connect();
$product_nr = "product_nummer$i";
$product_txt = "product_tekst$i";
$product_pr = "product_prijs$i";
$product_st = "product_status$i";
$inventaris_insert = "INSERT INTO inventaris (artikelnr,naam_id,tekst,prijs,status) VALUES ('" . $$product_nr ."','$naam_id','" . $$product_txt ."','" . $$product_pr ."','" . $$product_st ."');";
echo $inventaris_insert . '<br>';
$inserted = "inserted$i";
$$inserted = mysql_query($inventaris_insert);
mysql_close();
}
?>

Deze code heb ik zelf gemaakt maar nu is er een probleem bij het invoeren. Er wordt maar 1 rij in de db toegevoegd terwijl ik er wel meerdere opgeef. Om te controleren wat er gebeurd heb ik echo toegevoegd en die geeft wel alle inserts weer, zoals hieronder te zien.

INSERT INTO inventaris (artikelnr,naam_id,tekst,prijs,status) VALUES ('20829182645','5','tekst a','999.95','1');
INSERT INTO inventaris (artikelnr,naam_id,tekst,prijs,status) VALUES ('20829182646','5','tekst b','999.99','2');
INSERT INTO inventaris (artikelnr,naam_id,tekst,prijs,status) VALUES ('20829182647','5','tekst c','1000.00','3');

Hierbij is artikelnr een unieke waarde en wordt er automatisch een id aan de rij toegevoegd.
Wat heb ik fout gedaan?
Waarom heb je voor je variabelen regelmatig een dubbele $? Dat is toch helemaal niet nodig en zorgt misschien zelfs voor foutmeldingen.

ten tweede, zorg voor foutafhandeling d.m.v. or die (mysql_error())

en waarom geef je op regel 10 $inserted een waarde om hem daarna op regel 11 een andere waarde toe te kennen?

maar als ik je loop zo zie, en jij zegt dat hij wel meerdere inserts echoët, dan zou hij het ook meerdere keren moeten inserten volgens mij.
Bedankt voor je reactie.

De dubbele $ zijn variabele variabelen.

Voorbeeld als $i 1 is:

$inserted = "inserted$i";
// $inserted is dus inserted1
$$inserted // deze variabele heet dus eigenlijk $inserted1

Ik zal het eens proberen met een mysql_error. Stom ook eigenlijk dat ik dat niet meteen heb gedaan.

Ik krijg de foutmelding: Duplicate entry '2147483647' for key 2

key 2 is dat artikelnr uniek moet zijn. Bij de eerste INSERT worden alle gegevens goed ingevuld behalve het artikelnr. Hier wordt het laatste artikelnr gebruikt: 2147483647. Ik snap niet hoe dit kan aangezien de rest van de gegevens wel goed ingevuld worden.

Ook als ik de loop maar 1 keer laat lopen wordt er 2147483647 ingevuld maar bij de test echo staat wel 2147483645.
Artikelnr is vast van het type "integer", deze loopt maar tot max. 2147483647. Het fijne (NOT) van MySQL is dat hij daar schijt aan heeft en gewoon jouw waarde aanpast en hij 'm wel op kan slaan.

Oplossing? Je zou er een unsigned integer van kunnen maken, je kunt dan geen negatieve getallen invoeren en het bereik van je int ligt dat op iets meer dan 4 miljard.

Ook zou je ervoor kunnen kiezen om er een varchar met een bepaalde lengte van te maken.
Bedankt heb er een bigint van gemaakt en nu werkt het wel.

Reageren