Niet alle artikelen worden in de database gezet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Wessel Jansen

Wessel Jansen

23/09/2011 20:06:43
Quote Anchor link
Hallo allemaal,

Momenteel ben ik bezig om een webshop te bouwen. Ik heb in mijn database 3 tabellen gemaakt. Klant, order en orderregel. Hij doet het goed, op één ding na. Als ik meerdere artikelen bestel, wordt alleen het 1e artikel in de tabel orderregel gezet en de rest niet. Heeft iemand enig idee wat hier fout gaat, want ik loop al een tijd te zoeken, maar kom er niet uit.

Na in de winkelwagen op bestelling uitvoeren te hebben geklikt, komt hij bij het bestand bestelling.php en hier zou het mis moeten gaan.
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
if( isset( $_SESSION['winkelwagen'] ) and count( $_SESSION['winkelwagen'] ) > 0 )
{
    $totaal = $_GET['total'];
    $query = "INSERT INTO
                `order`
                (
                  klant_id, totaal
                )
                
                VALUES
                (
                  '" . mysql_real_escape_string( $_SESSION['uid'] ) . "',
                  '" . mysql_real_escape_string($totaal) . "'
                )";
    $result = mysql_query( $query );
    if ( false === $result )
    {
        echo 'Er is een fout opgetreden';
    }
    else
    {
        $orderId = mysql_insert_id();
        foreach ( $_SESSION['winkelwagen'] as $key => $val )
        {
            $query = "INSERT INTO
                        orderregel
                        (
                          order_nr,
                          artikel_nr,
                          aantal
                        )
                        VALUES
                        (
                          '" . mysql_real_escape_string( $orderId ) . "',
                          '" . mysql_real_escape_string( $key ) . "',
                          '" . mysql_real_escape_string( $val ) . "'
                        )";
            $result = mysql_query( $query );
            if ( false === $result )
            {
                echo 'Er is een fout opgetreden';
            }
        }
        echo '<p style="text-align: center;">Uw bestelling is geplaatst!<br />
               Klik <a href="logout.php">hier</a> om uit te loggen</p>';
                unset( $_SESSION['winkelwagen'] );
    }
}
?>


Weet iemand wat hier fout gaat?
Gewijzigd op 23/09/2011 20:07:22 door Wessel Jansen
 
PHP hulp

PHP hulp

27/05/2026 09:55:37
 
- SanThe -

- SanThe -

23/09/2011 20:52:22
Quote Anchor link
Hoe ziet de session er uit?

echo '<pre>'.print_r($_SESSION,true).'</pre>';
 
Wessel Jansen

Wessel Jansen

23/09/2011 21:08:18
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
Array
(
    [uid] => 1
    [winkelwagen] => Array
        (
            [2] => 1
            [5] => 1
        )

)

Er komt trouwens ook te staan "er is een fout opgetreden" maar hij zet 'm wel in de database, maar alleen het 1e artikel.
 
- SanThe -

- SanThe -

23/09/2011 21:22:39
Quote Anchor link
Wat zie je als je er tijdelijk dit van maakt?

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
<?php
       $orderId
= mysql_insert_id();
        foreach ( $_SESSION['winkelwagen'] as $key => $val )
        {

            $query = "INSERT INTO
                        orderregel
                        (
                          order_nr,
                          artikel_nr,
                          aantal
                        )
                        VALUES
                        (
                          '"
. mysql_real_escape_string( $orderId ) . "',
                          '"
. mysql_real_escape_string( $key ) . "',
                          '"
. mysql_real_escape_string( $val ) . "'
                        )"
;
    echo $query . '<br />';
            $result = mysql_query( $query );
            if ( false === $result )
            {

        echo mysql_error() . '<br />';
                echo 'Er is een fout opgetreden bij $key=' . $key . ' en $val=' . $val;
            }
        }

 ?>
Gewijzigd op 23/09/2011 21:23:59 door - SanThe -
 
Wessel Jansen

Wessel Jansen

23/09/2011 21:27:27
Quote Anchor link
Dan krijg ik zo'n 500 foutmelding en laat hij een witte pagina zien met interne serverfout. Dan heb ik het nu zo staan:
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
<?php
if( isset( $_SESSION['winkelwagen'] ) and count( $_SESSION['winkelwagen'] ) > 0 )
{

    $totaal = $_GET['total'];
    $query = "INSERT INTO
                `order`
                (
                  klant_id, totaal
                )
                
                VALUES
                (
                  '"
. mysql_real_escape_string( $_SESSION['uid'] ) . "',
                  '"
. mysql_real_escape_string($totaal) . "'
                )"
;
    $result = mysql_query( $query );
    if ( false === $result )
    {

        echo 'Er is een fout opgetreden';
    }

       $orderId = mysql_insert_id();
        foreach ( $_SESSION['winkelwagen'] as $key => $val )
        {

            $query = "INSERT INTO
                        orderregel
                        (
                          order_nr,
                          artikel_nr,
                          aantal
                        )
                        VALUES
                        (
                          '"
. mysql_real_escape_string( $orderId ) . "',
                          '"
. mysql_real_escape_string( $key ) . "',
                          '"
. mysql_real_escape_string( $val ) . "'
                        )"
;
    echo $query . '<br />';
            $result = mysql_query( $query );
            if ( false === $result )
            {

        echo mysql_error() . '<br />';
                echo 'Er is een fout opgetreden bij $key=' . $key . ' en $val=' . $val;
            }
        }

 ?>
Gewijzigd op 23/09/2011 21:43:21 door Wessel Jansen
 
- SanThe -

- SanThe -

23/09/2011 21:54:57
Quote Anchor link
Wessel Jansen op 23/09/2011 21:27:27:
Dan krijg ik zo'n 500 foutmelding en laat hij een witte pagina zien met interne serverfout.


Hoe kan dat nou? Ik heb er alleen twee regeltjes tussen gezet en één regel ietsje langer gemaakt.
 
Wessel Jansen

Wessel Jansen

23/09/2011 21:56:58
Quote Anchor link
Ik heb geen flauw idee:S Ook als ik hem terug zet binnen de else{} constructie pakt hij hem niet:S Heb ook al geprobeerd om die echo mysql error en die echo er is een fout opgetreden weg te halen, maar dan doet hij het ook nog steeds:s
Dit is de hele code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php require ('isingelogged.php'); ?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
echo '<pre>'.print_r($_SESSION,true).'</pre>';
$page = "bestellen";
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" lang="nl">

<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <link rel="stylesheet" href="bestellen.css" type="text/css" />
<script type="text/javascript" src="lightbox.js"></script>
<script type="text/javascript" src="font.js"></script>
<link rel="shortcut icon" type="image/x-icon" href="history.ico" />
<title></title>
</head>

<body>
<div id="pagewidth">

<div class="bovenlinks">

</div>
<div class="bovenrechts">
<br />

</div>
<div class="plaatje">
<img src="griekenland4.jpg" alt="" width="850" height="150" />
</div>
<div class="titel">
<img src="titelbestellen.jpg" alt="" width="50" height="792" />
</div>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php include('menu.inc.php'); ?>

<div class="midden">
<div class="tekstbestellen">
<br />
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
<?php
                if ( !mysql_connect( 'localhost', 'root', 'usbw') )
                {

                    print "<p>Er is een probleem</p>";
                    die();
                }

                if ( !mysql_select_db( 'kleinegriek' ) )
                {

                    print "<p>Database niet gevonden</p>";
                    die();
                }


if( isset( $_SESSION['winkelwagen'] ) and count( $_SESSION['winkelwagen'] ) > 0 )
{

    $totaal = $_GET['total'];
    $query = "INSERT INTO
                `order`
                (
                  klant_id, totaal
                )
                
                VALUES
                (
                  '"
. mysql_real_escape_string( $_SESSION['uid'] ) . "',
                  '"
. mysql_real_escape_string($totaal) . "'
                )"
;
    $result = mysql_query( $query );
    if ( false === $result )
    {

        echo 'Er is een fout opgetreden';
    }

           $orderId = mysql_insert_id();
        foreach ( $_SESSION['winkelwagen'] as $key => $val )
        {

            $query = "INSERT INTO
                        orderregel
                        (
                          order_nr,
                          artikel_nr,
                          aantal
                        )
                        VALUES
                        (
                          '"
. mysql_real_escape_string( $orderId ) . "',
                          '"
. mysql_real_escape_string( $key ) . "',
                          '"
. mysql_real_escape_string( $val ) . "'
                        )"
;
    echo $query . '<br />';
            $result = mysql_query( $query );
            if ( false === $result )
            {

       echo mysql_error() . '<br />';
               echo 'Er is een fout opgetreden bij $key=' . $key . ' en $val=' . $val;
            }
        }

 ?>

</div>
</div>
<div class="onderlinks">
</div>
<div class="onderrechts">
</div>
</div>
</body>
</html>
Gewijzigd op 23/09/2011 22:00:41 door Wessel Jansen
 
- SanThe -

- SanThe -

23/09/2011 22:19:00
Quote Anchor link
Kan je in de Apache logs kijken? Daar zal waarschijnlijk een error staan.
 
Wessel Jansen

Wessel Jansen

23/09/2011 22:21:13
Quote Anchor link
Gefixt!
Array
(
[uid] => 1
[winkelwagen] => Array
(
[7] => 1
[3] => 1
)

)

INSERT INTO orderregel ( order_nr, artikel_nr, aantal ) VALUES ( '54', '7', '1' )
INSERT INTO orderregel ( order_nr, artikel_nr, aantal ) VALUES ( '54', '3', '1' )
Duplicate entry '54' for key 1
Er is een fout opgetreden bij $key=3 en $val=1

Geeft hij nu aan
Gewijzigd op 23/09/2011 22:22:35 door Wessel Jansen
 
- SanThe -

- SanThe -

23/09/2011 22:23:25
Quote Anchor link
Dan zal er waarschijnlijk een } missen.
 
Wessel Jansen

Wessel Jansen

23/09/2011 22:24:31
Quote Anchor link
Klopt ja dat was 't ook...
 
- SanThe -

- SanThe -

23/09/2011 22:25:39
Quote Anchor link
Dit is de error: Duplicate entry '54' for key 1
Is order_nr UNIQUE ingesteld?

Hoe ziet die databasetabel er uit?
Gewijzigd op 23/09/2011 22:55:38 door - SanThe -
 
Wessel Jansen

Wessel Jansen

23/09/2011 22:28:14
Quote Anchor link
De tabel order bevat 4 velden order_nr is een INT 11 characters NIET nul en auto_increment en tevens de sleutel.
klant_id is een varchar 10 characters
datum is een timestamp
totaal is een decimaal 6,2 allemaal staan ze op NIET nul

De tabel orderregel is als volgt:
order_nr precies hetzelfde als de tabel order
artikel_nr int 6 characters
aantal int 4 characters
datum timestamp verder ook allemaal NIEt nul

Toevoeging op 23/09/2011 22:42:13:

Ik ben al wat verder, hij voegt nu wel alle artikelen in, alleen nu hebben ze geen ordernummer... Heb het veld order_nr ff opnieuw aangemaakt en deze een index gegeven, maar als ik dan uniek aanklik, dan geeft hij een foutmelding
SQL-query:

ALTERTABLE`order`ADDUNIQUE (

`order_nr`
)

MySQL retourneerde:
#1062 - Duplicate entry '0' for key 1
Gewijzigd op 23/09/2011 22:29:25 door Wessel Jansen
 
- SanThe -

- SanThe -

23/09/2011 22:53:30
Quote Anchor link
Wessel Jansen op 23/09/2011 22:28:14:
De tabel orderregel is als volgt:
order_nr precies hetzelfde als de tabel order
artikel_nr int 6 characters
aantal int 4 characters
datum timestamp verder ook allemaal NIEt nul


Je moet een apart id hebben met auto_increment. (de sleutel)
En order_nr mag NIET unique zijn omdat je er meerdere records in wil hebben met hetzelfde ordernummer.
Gewijzigd op 23/09/2011 22:56:42 door - SanThe -
 
Wessel Jansen

Wessel Jansen

24/09/2011 10:34:34
Quote Anchor link
Super!!!!! Hij doet het! Hartstikke bedankt!!
 



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.