Niet alle artikelen worden in de database gezet
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.
Weet iemand wat hier fout gaat?
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)
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
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'] );
}
}
?>
{
$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
Hoe ziet de session er uit?
echo '<pre>'.print_r($_SESSION,true).'</pre>';
echo '<pre>'.print_r($_SESSION,true).'</pre>';
Er komt trouwens ook te staan "er is een fout opgetreden" maar hij zet 'm wel in de database, maar alleen het 1e artikel.
Wat zie je als je er tijdelijk dit van maakt?
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
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;
}
}
?>
$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 -
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)
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
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;
}
}
?>
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
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.
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:
<!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>
<div class="midden">
<div class="tekstbestellen">
<br />
</div>
</div>
<div class="onderlinks">
</div>
<div class="onderrechts">
</div>
</div>
</body>
</html>
Dit is de hele code:
<!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>
<div class="midden">
<div class="tekstbestellen">
<br />
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
44
45
46
47
48
49
50
51
52
53
54
55
56
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;
}
}
?>
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
Kan je in de Apache logs kijken? Daar zal waarschijnlijk een error staan.
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
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
Dan zal er waarschijnlijk een } missen.
Klopt ja dat was 't ook...
Dit is de error: Duplicate entry '54' for key 1
Is order_nr UNIQUE ingesteld?
Hoe ziet die databasetabel er uit?
Is order_nr UNIQUE ingesteld?
Hoe ziet die databasetabel er uit?
Gewijzigd op 23/09/2011 22:55:38 door - SanThe -
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
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
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
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 -
Super!!!!! Hij doet het! Hartstikke bedankt!!




