id ophalen lukt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sam Schuddinck

Sam Schuddinck

20/11/2012 18:38:53
Quote Anchor link
Het probleem ligt hem bij het ophalen van het laatste klantnr in tblklant volgens mij
zie sql_querry_ophalen_klantnr...

Bij het uitvoeren blijft deze querry 0 teruggeven waarden ik volgende foutmelding krijg als ik meer dan
1x mijn formulier probeer in te dienen : Error: Duplicate entry '0' for key 'PRIMARY'
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?php
//Formulier Succes
                    
            $achternaam =  mysql_real_escape_string($aData['achternaam']);
            $voornaam =  mysql_real_escape_string($aData['voornaam']);
            $geboortedatum =  mysql_real_escape_string($aData['geboorte-datum']);
            $straatnaam =  mysql_real_escape_string($aData['straatnaam']);
            $gemeente =  mysql_real_escape_string($aData['gemeente']);
            $postcode =  mysql_real_escape_string($aData['postcode']);
            $email =  mysql_real_escape_string($aData['e-mail']);
            $wachtwoord =  mysql_real_escape_string($aData['wachtwoord']);
            
            
            
            $sql_insert_klant = "
                INSERT INTO tblklanten
                (
                    klantnr,
                    achternaam,
                    voornaam,
                    geboortedatum,
                    adres,
                    postcode,
                    gemeente
                    
                )
                VALUES
                (
                    '',
                    '"
.$achternaam."',
                    '"
.$voornaam."',
                    '"
.$geboortedatum."',
                    '"
.$straatnaam."',
                    '"
.$postcode."',
                    '"
.$gemeente."'
                )"
;
            $sql_insert_gebruiker = "
                INSERT INTO tblgebruikers
                (
                    email,
                    wachtwoord
                )
                VALUES
                (
                    '"
.$email."',
                    '"
.$wachtwoord."'
                )
            "
;
            
            $sql_ophalen_klantnr = "
                SELECT
                (
                    klantnr
                )
                FROM
                (
                    tblklanten
                )
                ORDER BY
                (
                    klantnr DESC
                )
                LIMIT 1
                
            "
;
            
            $sql_insert_klantnr_gebruiker = "
                INSERT INTO tblgebruikers
                (
                    klantnr
                )
                VALUES
                (
                    '"
.$klantnr."'
                )
            "
;
                #  Check of query invoegen klant is gelukt    
                if (($result_insert_klant = mysql_query($sql_insert_klant)) === false)
                {

                    # als de query fout is -> foutafhandeling
                    echo showSQLError($sql_insert_klant,mysql_error(),'Fout bij het invoegen van de gegevens van de klant.');
                }

                else
                {
                    # Toevoegen klantnr.
                    $id = mysql_insert_id();
                    
                    #  Check of query invoegen gebruiker is gelukt    
                    if (($result_insert_gebruiker = mysql_query($sql_insert_gebruiker)) === false)
                    {

                        # als de query fout is -> foutafhandeling
                        echo showSQLError($result_insert_gebruiker,mysql_error(),'Fout bij het invoegen van de gebruiker gegevens.');
                    }

                    elseif(($result_ophalen_klantnr = mysql_query($sql_ophalen_klantnr)) === false)
                    {

                        # als de query fout is -> foutafhandeling
                        echo showSQLError($result_ophalen_klantnr,mysql_error(),'Fout bij het ophalen van het laatste klantnr..');
                    }

                    else
                    {
                        
                        $klantnr = mysql_fetch_assoc($result_ophalen_klantnr);
                        
                        
                        if(($result_insert_klantnr_gebruiker = mysql_query($sql_insert_klantnr_gebruiker )) === false)
                        {

                            # als de query fout is -> foutafhandeling
                            echo showSQLError($result_insert_klantnr_gebruiker,mysql_error(),'Fout bij het invoegen van klantnr in tblgebruikers');
                        }

                        else
                        {
                            //Gebruiker toevoegen succesvol
                            $gelukt = '<p style="font-weight:bold;color:green">Gegevens succesvol ingediend !</p>';
                        }
                    }
                }
                
                
        }

?>
 
PHP hulp

PHP hulp

06/11/2024 04:11:12
 
Jasper DS

Jasper DS

20/11/2012 18:41:29
Quote Anchor link
Je snapt het fetchen nog niet zo goed Sam. Lees die tutorial over SQL nog een keertje. Daar zal je zien dat $klantnr nu een array is. Als je $klantnr['id'] doet heb je wel het id.

Verder loopt er nog wel wat meer mis in je logica. Je hebt eigenlijk maar 3 query's nodig.

- Klant toevoegen
- laatste id ophalen
- Gebruiker toevoegen met KlantID

Let ook op dat je niet altijd haakjes moet gebruiken bij de select query is dat niet nodig.

Logica zou ongeveer zo moeten zijn:

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?php
//Formulier Succes
                    
            $achternaam =  mysql_real_escape_string($aData['achternaam']);
            $voornaam =  mysql_real_escape_string($aData['voornaam']);
            $geboortedatum =  mysql_real_escape_string($aData['geboorte-datum']);
            $straatnaam =  mysql_real_escape_string($aData['straatnaam']);
            $gemeente =  mysql_real_escape_string($aData['gemeente']);
            $postcode =  mysql_real_escape_string($aData['postcode']);
            $email =  mysql_real_escape_string($aData['e-mail']);
            $wachtwoord =  mysql_real_escape_string($aData['wachtwoord']);
            
            
            
            $sql_insert_klant = "
                INSERT INTO tblklanten
                (
                    klantnr,
                    achternaam,
                    voornaam,
                    geboortedatum,
                    adres,
                    postcode,
                    gemeente
                    
                )
                VALUES
                (
                    '',
                    '"
.$achternaam."',
                    '"
.$voornaam."',
                    '"
.$geboortedatum."',
                    '"
.$straatnaam."',
                    '"
.$postcode."',
                    '"
.$gemeente."'
                )"
;


                #  Check of query invoegen klant is gelukt    
                if (($result_insert_klant = mysql_query($sql_insert_klant)) === false)
                {

                    # als de query fout is -> foutafhandeling
                    echo showSQLError($sql_insert_klant,mysql_error(),'Fout bij het invoegen van de gegevens van de klant.');
                }

                else
                {
                    $sql_ophalen_klantnr = "
                        SELECT
                        (
                            klantnr
                        )
                        FROM
                        (
                            tblklanten
                        )
                        ORDER BY
                        (
                            klantnr DESC
                        )
                        LIMIT 1
                        
                    "
;
                  
                    if(($result_ophalen_klantnr = mysql_query($sql_ophalen_klantnr)) === false)
                    {

                        # als de query fout is -> foutafhandeling
                        echo showSQLError($result_ophalen_klantnr,mysql_error(),'Fout bij het ophalen van het laatste klantnr..');
                    }

                    else
                    {
                        
                        $row = mysql_fetch_assoc($result_ophalen_klantnr);
                        
                        $klantnr = $row['klantnr'];


                        $sql_insert_gebruiker = "
                                INSERT INTO tblgebruikers
                                (
                                    klantnr,
                                    email,
                                    wachtwoord
                                )
                                VALUES
                                (
                                    '"
.$klantnr."'
                                    '"
.$email."',
                                    '"
.$wachtwoord."'
                                )
                            "
;
                        
                        if(($result_insert_gebruiker = mysql_query($sql_insert_gebruiker )) === false)
                        {

                            # als de query fout is -> foutafhandeling
                            echo showSQLError($result_insert_gebruiker,mysql_error(),'Fout bij het invoegen van klantnr in tblgebruikers');
                        }

                        else
                        {
                            //Gebruiker toevoegen succesvol
                            $gelukt = '<p style="font-weight:bold;color:green">Gegevens succesvol ingediend !</p>';
                        }
                    }
                }
                
                
        }

?>
Gewijzigd op 20/11/2012 18:48:22 door Jasper DS
 
Obelix Idefix

Obelix Idefix

20/11/2012 18:54:03
Quote Anchor link
Waar komen je $aData waarden vandaan? Uit een query? Dan is mysql_real_escape_string niet nodig; als het goed is zijn je gegevens bij het opslaan al beveiligd.
Sowieso is regel 4 t/m 11 niet nodig; het is kopieren van variabelen en mysql_real_escape_string gebruik je in een query.
 
Jasper DS

Jasper DS

20/11/2012 18:57:32
Quote Anchor link
Obelix, komt uit een formulier. Heb zijn code op school gezien. Hij heeft het in een array gestoken voor zijn foutafhandeling. Ik zal morgen eens met hem kijken of dat niet efficiënter kan.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

20/11/2012 18:59:50
Quote Anchor link
Je maakt hier gebruik van een onnodige 1-1 relatie (lijkt mij)
Daarnaast is de foutmelding duidelijk genoeg, want je doet 2 maal een insert.
Je kan natuurlijk redenen hebben om die 2 tabellen te hebben, maar dan is 2e insert heel eenvoudig op te lossen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$sql_insert_gebruiker
= "
    INSERT INTO tbl_gebruikers
        (klantnr, email, wachtwoord)
    VALUES
        (LAST_INSERT_ID(),'"
.$email."','".$wachtwoord."')";
?>
;
Haal wel de auto increment weg in de tbl_gebruikers
 
Jasper DS

Jasper DS

20/11/2012 19:05:19
Quote Anchor link
Ger, ik denk dat je dat verkeerd ziet? Het is geen 1-1 relatie maar een 1 op veel relatie tussen de klanten en gebruikers. Een klant kan meerdere gebruikers hebben. Dus het moet wel degelijk in twee tabellen.

Quote:
Haal wel de auto increment weg in de tbl_gebruikers


De gebruiker moet nog steeds een id hebben niet?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

20/11/2012 19:18:16
Quote Anchor link
Zo heb ik het inderdaad niet gelezen, niet zo verwonderlijk, want ik kan dat uit bovenstaande scripts niet opmaken.
In ieder geval blijft dan mijn eerdere query nog steeds valid.
 
Sam Schuddinck

Sam Schuddinck

20/11/2012 19:23:09
Quote Anchor link
Ger maar klopt dit dan nog wel ? Want het gaat hier om 2 tabellen .. tblklanten en gebruikers ..
Het doel is vn het laatste klantnr (id) uit tblklanten 'over te zetten' naar klantnr in tblgebruikers ..

Werkt de fucntie LAST_INSERT_ID dan ? Aangezien het om 2 verschillende tabellen gaat ?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

20/11/2012 19:28:50
Quote Anchor link
Ja Sam, dat werkt.
LAST_INSERT_ID() werkt per sessie(connectie).
In principe doet mysql_insert_id() gewoon mysql_query("SELECT LAST_INSERT_ID()")
 
Sam Schuddinck

Sam Schuddinck

20/11/2012 19:34:42
Quote Anchor link
Ok ik heb niets gezegd .. Blijkbaar werkt dit perfect ! Dank hiervoor

Zou je me wel even kunnen uitleggen wat deze functie LAST_INSERT_ID juist te werk gaat ..

Want ik snap niet hoe hij het klantnr ophaalt uit de andere tabel vandaar mijn verwarring in de reactie hierboven ...

Toevoeging op 20/11/2012 19:38:23:

Ja ok ik heb hem door :)

Bedankt nogmaals :)
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

20/11/2012 19:54:25
Quote Anchor link
Geen dank. Ter verduidelijking:
LAST_INSERT_ID() (en dus ook mysql_insert_id()) geeft het id van een laatste succesvolle insert in een tabel waarvan de primary key een auto_increment kolom is. Welke tabel het is maakt niet uit.
 



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.