mysql insert id werkt niet
als ik de volgende query uitvoer werkt de mysql_insert_id wel
$query = "INSERT INTO test (test) VALUES ('test')";
mysql_query( $query );
mysql_query( "SELECT LAST_INSERT_ID()" );
$id = mysql_insert_id();
echo $id;
als ik hm echter in dit script gebruik lukt het niet
$query1 ="INSERT INTO klanten (
Naam,
Achternaam,
Adres,
Postcode,
Plaats,
)
VALUES(
'".mysql_real_escape_string($_POST['Naam'])."',
'".mysql_real_escape_string($_POST['Achternaam'])."',
'".mysql_real_escape_string($_POST['Adres'])."',
'".mysql_real_escape_string($_POST['Postcode'])."',
'".mysql_real_escape_string($_POST['Plaats'])."',
'".mysql_real_escape_string($_POST['email'])."'
)";
mysql_query( "SELECT LAST_INSERT_ID()" );
$klid= mysql_insert_id();
$query2 = "INSERT INTO orders
(
Klantenid,
totaal,
paymethod,
Currency,
Shasign
)
values(
'".$klid."',
'".mysql_real_escape_string($_POST['totaal'])."',
'".mysql_real_escape_string($_POST['Paymethod'])."',
'".mysql_real_escape_string($_POST['Currency'])."',
'".mysql_real_escape_string($_POST['Shasign'])."'
)";
wat doe ik hier verkeerd en hoe kan ik dit oplossen?
$klid= mysql_insert_id();
Dit is dubbel op. Je moet er slechts één van de twee gebruiken. Ik weet echter niet of dit de oorzaak van het probleem is, lijkt me wel raar.
Bij die eerste moet je sowieso dan nog wel je resultaat fetchen.
Anders misschien fout in je query?
Jij voert echter $query1 en $query2 helemaal nergens uit, dat is dus je probleem...
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
wat moet ik doen om de functie mysql insert id correct te gebruiken?
ik heb de bovenvermelde queries en ik moet op de een of andere manier de klantenid in de tabel orders krijgen? hoe doe ik dit ?
alvast bedankt voor jullie reactie
blanche de auto increment functie staat goed op al mijn tabellen maar de klantenid blijft de waarde 0 houden
De oplossing is dus het ook daadwerkelijk uitvoeren van $query1 en $query2, dat doe je nu niet...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$query1 ="INSERT INTO klanten (
Naam,
Achternaam,
Adres,
Postcode,
Plaats,
email
)
VALUES(
'".mysql_real_escape_string($_POST['Naam'])."',
'".mysql_real_escape_string($_POST['Achternaam'])."',
'".mysql_real_escape_string($_POST['Adres'])."',
'".mysql_real_escape_string($_POST['Postcode'])."',
'".mysql_real_escape_string($_POST['Plaats'])."',
'".mysql_real_escape_string($_POST['email'])."'
)";
mysql_query( $query1 );
$klid= mysql_insert_id();
echo $klid;
?>
$query1 ="INSERT INTO klanten (
Naam,
Achternaam,
Adres,
Postcode,
Plaats,
)
VALUES(
'".mysql_real_escape_string($_POST['Naam'])."',
'".mysql_real_escape_string($_POST['Achternaam'])."',
'".mysql_real_escape_string($_POST['Adres'])."',
'".mysql_real_escape_string($_POST['Postcode'])."',
'".mysql_real_escape_string($_POST['Plaats'])."',
'".mysql_real_escape_string($_POST['email'])."'
)";
mysql_query( $query1 );
$klid= mysql_insert_id();
echo $klid;
?>
Edit:
Precies zoals Blanche zegt dus
Gewijzigd op 01/01/1970 01:00:00 door PHP erik
zal ook de rest van de code erbij zetten zodat de uitvoer queries ook meegegeven worden
mysql_query( "SELECT LAST_INSERT_ID()" );
$klid= mysql_insert_id();
$query2 = "INSERT INTO orders
(
Klantenid,
totaal,
paymethod,
Currency,
Shasign
)
values(
'".$klid."',
'".mysql_real_escape_string($_POST['totaal'])."',
'".mysql_real_escape_string($_POST['Paymethod'])."',
'".mysql_real_escape_string($_POST['Currency'])."',
'".mysql_real_escape_string($_POST['Shasign'])."'
)";
// $ORID = mysql_insert_id();
// $query3=" INSERT INTO bestelde_artikelen (Orderid,aantal) VALUES ('".$ORID."','".$aantal."')";
include_once("mysql_connect.inc.php");
$verbinding = mysql_connect(MYSQL_SERVER, MYSQL_GEBRUIKERSNAAM, MYSQL_WACHTWOORD) or die (mysql_error());
mysql_select_db("foto_galerij")or die (mysql_error());
//uitvoeren
mysql_query($query1) or die ("insert sql error: ".mysql_error());
$klid= mysql_insert_id();
mysql_query($query2) or die ("insert sql error: ".mysql_error());
zit ik dan op deze manier goed of moet ik die dan nog ergens anders neerzetten?
Maar dit stukje:
kun je wel uit je code laten, aangezien dat dubbel is. De functie mysql_insert_id() doet dit al voor je...
ik heb het op deze manier geprobeerd maar ik krijg het klantenid niet in mijn tabel orders :-(
ook doe je het volgende verkeerd:
je bouwt je query 1
je vraagt last insert id op
bouwt query 2
en nu ga je pas een connectie maken met de database???
Kijk nog eens goed naar je code...je kan veel leren van je eigen fouten... je script is op dit moment erg onlogisch en werkt daarom ook niet
zoals eerder gezegd ik ben nog maar een beginneling
als ik een fout maak of het op een andere manier beter kan doen zie ik graag een voorbeeld van hoe het wel zou moeten.
het script als zodanig werkt wel en heb ondertussen met een inlog systeem en de ingelogde gebruiker deze gebruiker toegevoegd aan de tabel orderid.
kan jij me dan laten zien hoe ik dan volgens jou tewerk had moeten gaan?
alvast bedankt
Paul
Code (php)
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
$insert_klant = "
INSERT INTO klanten (
Naam,
Achternaam,
etc... )
VALUES (
'".mysql_real_escape_string($_POST['Naam'])."',
'".mysql_real_escape_string($_POST['Achternaam'])."',
etc... )
";
if(!$res = mysql_query($insert_klant))
{
echo '<pre>';
echo mysql_error();
echo '</pre>';
}
else
{
$klant_id = mysql_insert_id();
$insert_order = "
INSERT INTO orders (
Klantenid,
totaal,
etc... )
VALUES (
".$klant_id.",
'".mysql_real_escape_string($_POST['totaal'])."',
etc... )
";
if(!$res = mysql_query($insert_order))
{
// foutafhandeling
}
else
{
// verder met je script.
}
}
?>
$insert_klant = "
INSERT INTO klanten (
Naam,
Achternaam,
etc... )
VALUES (
'".mysql_real_escape_string($_POST['Naam'])."',
'".mysql_real_escape_string($_POST['Achternaam'])."',
etc... )
";
if(!$res = mysql_query($insert_klant))
{
echo '<pre>';
echo mysql_error();
echo '</pre>';
}
else
{
$klant_id = mysql_insert_id();
$insert_order = "
INSERT INTO orders (
Klantenid,
totaal,
etc... )
VALUES (
".$klant_id.",
'".mysql_real_escape_string($_POST['totaal'])."',
etc... )
";
if(!$res = mysql_query($insert_order))
{
// foutafhandeling
}
else
{
// verder met je script.
}
}
?>
Verder zou ik ook nog even kijken naar de normalisatie van je datamodel. Voor de kolommen 'Currency' en 'Paymethod' heb je waarschijnlijk aparte tabellen nodig. Dit omdat meerdere orders dezelde valuta en/of dezelfde betalingswijze kunnen hebben. En dan vereist normalisatie dat je daar een aparte tabel voor gebruikt.
heel erg bedankt voor je hulp
dank zij jou werkt het script zoals het moet
thanks mate :-))