mysql insert id werkt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Paul prive

paul prive

16/06/2007 23:15:00
Quote Anchor link
beste
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,
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( "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?
 
PHP hulp

PHP hulp

05/01/2025 02:27:31
 
PHP erik

PHP erik

16/06/2007 23:18:00
Quote Anchor link
mysql_query( "SELECT LAST_INSERT_ID()" );
$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?
 
Joren de Wit

Joren de Wit

16/06/2007 23:21:00
Quote Anchor link
Dat is inderdaad wel het probleem, want mysql_insert_id() kijkt alleen naar de laatst uitgevoerde insert query. En als er in die laatste query geen auto_increment id aangemaakt wordt, geeft die functie 0 terug.

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
 
Paul prive

paul prive

16/06/2007 23:21:00
Quote Anchor link
ok
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
 
Paul prive

paul prive

16/06/2007 23:23:00
Quote Anchor link
blanche de auto increment functie staat goed op al mijn tabellen maar de klantenid blijft de waarde 0 houden
 
Joren de Wit

Joren de Wit

16/06/2007 23:23:00
Quote Anchor link
De oplossing is dus het ook daadwerkelijk uitvoeren van $query1 en $query2, dat doe je nu niet...
 
PHP erik

PHP erik

16/06/2007 23:24:00
Quote Anchor link
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
<?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;
?>


Edit:
Precies zoals Blanche zegt dus
Gewijzigd op 01/01/1970 01:00:00 door PHP erik
 
Paul prive

paul prive

16/06/2007 23:32:00
Quote Anchor link
ik doe het nu zo
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?
 
Joren de Wit

Joren de Wit

16/06/2007 23:49:00
Quote Anchor link
Nee, zo ziet het er volgens mij wel goed uit. Het komt er dus gewoon op neer dat je mysql_insert_id() direct na een query gebruikt voordat je weer een andere (insert) query uitvoert.

Maar dit stukje:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
mysql_query( "SELECT LAST_INSERT_ID()" );
?>

kun je wel uit je code laten, aangezien dat dubbel is. De functie mysql_insert_id() doet dit al voor je...
 
Paul prive

paul prive

16/06/2007 23:56:00
Quote Anchor link
blanche
ik heb het op deze manier geprobeerd maar ik krijg het klantenid niet in mijn tabel orders :-(
 
M Ypma

M Ypma

17/06/2007 01:39:00
Quote Anchor link
en stop eens met je integers te quoten in je query, dat is nergens voor nodig en zal ook problemen opleveren.

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
 
Paul prive

paul prive

17/06/2007 09:44:00
Quote Anchor link
Michel

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
 
Joren de Wit

Joren de Wit

17/06/2007 11:28:00
Quote Anchor link
Een voorbeeldje:
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
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.
    }
}

?>

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.
 
Paul prive

paul prive

17/06/2007 18:02:00
Quote Anchor link
blanche

heel erg bedankt voor je hulp
dank zij jou werkt het script zoals het moet

thanks mate :-))
 



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.