Bestelling emailen
Voor een bedrijf ben ik een webshop aan het maken, maar nou loop ik tegen een probleem aan. Als de bestelling wordt verzonden naar de database wil ik ook graag een email naar het bedrijf sturen met daarin de bestelde gegevens.
De email wordt verzonden, maar hierin staat maar 1 artikel. Hoe krijg ik de gehele lijst gemaild? Dit is mijn script:
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
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
121
122
123
124
125
126
127
128
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
121
122
123
124
125
126
127
128
<?php
session_start();
include('config.php');
// checkout.php
// In het script doen we het ook maar even stap voor stap.
// Stap 1, zet de order in de order tabel
$sql = "INSERT INTO BESTELLING
(besteldatum)
VALUES
(".date(d-m-y).")"; // Verzin iets moois voor de date() functie
$query = mysql_query($sql) or die (mysql_error()."<br>in file ".__FILE__." on line ".__LINE__);
$ordernr = mysql_insert_id(); // Die hebben we later nodig, is dus ordernr (bestelnr)
// Stap 2, winkelwagen splitten en in de database zetten
$cart = explode("|",$_SESSION['cart']);
foreach($cart as $products) {
// Split
/*
$product[x] -->
x == 0 -> product id
x == 1 -> hoeveelheid
*/
$product = explode(",",$products);
$iSql = "INSERT INTO BESTELREGEL
(bestelnummer, productnummer, aantal_besteld)
VALUES
(".$ordernr.", ".$product[0].", ".$product[1].")";
$iQuery = mysql_query($iSql) or die (mysql_error()."<br>in file ".__FILE__." on line ".__LINE__);
}
// Totaal (komt later wel terug)
$total = 0;
// Show cart
foreach($cart as $products) {
// Split
/*
$product[x] -->
x == 0 -> product id
x == 1 -> hoeveelheid
*/
$product = explode(",",$products);
// Get product info
$sql = "SELECT productnaam, prijs
FROM PRODUCT
WHERE productnummer = $product[0]"; // Weet je nog, uit die sessie
$query = mysql_query($sql) or die (mysql_error()."<br>in file ".__FILE__." on line ".__LINE__);
$pro_cart = mysql_fetch_object($query);
$i++;
$bericht = "<tr>
<td>".$pro_cart->productnaam."</td>
<td><input type=\"hidden\" name=\"productnummer_".$i."\" value=\"".$product[0]."\" />
<input type=\"text\" name=\"hoeveelheid_".$i."\" value=\"".$product[1]."\" size=\"2\" maxlength=\"2\" /></td>
<td>".$pro_cart->prijs."</td>
<td>".$lineprice."</td>
<td><a href=\"javascript:removeItem(".$i.")\">X</td>
</tr>";
// Total
// Totaal updaten
$lineprice = $product[1] * $pro_cart->prijs; // regelprijs uitrekenen > hoeveelheid * prijs
$total = $total + $lineprice;
$count = count($cart);
}
$to = '[email protected];
// subject
$subject = 'Bevestiging van bestelling';
// message
$message = '
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
</head>
<body>
'.$count.'
<table>
<tr>
<td width="50%"><b>Productnaam</b></td>
<td width="20%"><b>Hoeveelheid</b></td>
<td width="15%"><b>Prijs p/s</b></td>
<td width="15%"><b>Totaal</b></td>
<td> </td>
</tr>
<tr>
<td>'.$pro_cart->productnaam.'</td>
<td>'.$product[1].'</td>
<td>'.$pro_cart->prijs.'</td>
<td>'.$lineprice.'</td>
</tr>
<tr>
<td colspan="3"><b>Totaal</b></td>
<td><b>'.$total.'</b></td>
<td> </td>
</tr>
</table>
</body>
</html>
';
$headers1 = "From: \"Bedrijfsnaam\" <".$email1.">\r\n";
$headers1 .= "Reply-To: \"".$naam."\" <".$email.">\n";
$headers1 .= "Return-Path: Mail-Error <".$email.">\n";
$headers1 .= "MIME-Version: 1.0\n";
$headers1 .= "Content-Transfer-Encoding: 8bit\n";
$headers1 .= "Content-type: text/html; charset=iso-8859-1\n";
$formsent = mail($to, $subject, $message, $headers1);
session_unset($_SESSION['cart']);
echo "<p>De bestelling is toegevoegd!</p>"
?>
session_start();
include('config.php');
// checkout.php
// In het script doen we het ook maar even stap voor stap.
// Stap 1, zet de order in de order tabel
$sql = "INSERT INTO BESTELLING
(besteldatum)
VALUES
(".date(d-m-y).")"; // Verzin iets moois voor de date() functie
$query = mysql_query($sql) or die (mysql_error()."<br>in file ".__FILE__." on line ".__LINE__);
$ordernr = mysql_insert_id(); // Die hebben we later nodig, is dus ordernr (bestelnr)
// Stap 2, winkelwagen splitten en in de database zetten
$cart = explode("|",$_SESSION['cart']);
foreach($cart as $products) {
// Split
/*
$product[x] -->
x == 0 -> product id
x == 1 -> hoeveelheid
*/
$product = explode(",",$products);
$iSql = "INSERT INTO BESTELREGEL
(bestelnummer, productnummer, aantal_besteld)
VALUES
(".$ordernr.", ".$product[0].", ".$product[1].")";
$iQuery = mysql_query($iSql) or die (mysql_error()."<br>in file ".__FILE__." on line ".__LINE__);
}
// Totaal (komt later wel terug)
$total = 0;
// Show cart
foreach($cart as $products) {
// Split
/*
$product[x] -->
x == 0 -> product id
x == 1 -> hoeveelheid
*/
$product = explode(",",$products);
// Get product info
$sql = "SELECT productnaam, prijs
FROM PRODUCT
WHERE productnummer = $product[0]"; // Weet je nog, uit die sessie
$query = mysql_query($sql) or die (mysql_error()."<br>in file ".__FILE__." on line ".__LINE__);
$pro_cart = mysql_fetch_object($query);
$i++;
$bericht = "<tr>
<td>".$pro_cart->productnaam."</td>
<td><input type=\"hidden\" name=\"productnummer_".$i."\" value=\"".$product[0]."\" />
<input type=\"text\" name=\"hoeveelheid_".$i."\" value=\"".$product[1]."\" size=\"2\" maxlength=\"2\" /></td>
<td>".$pro_cart->prijs."</td>
<td>".$lineprice."</td>
<td><a href=\"javascript:removeItem(".$i.")\">X</td>
</tr>";
// Total
// Totaal updaten
$lineprice = $product[1] * $pro_cart->prijs; // regelprijs uitrekenen > hoeveelheid * prijs
$total = $total + $lineprice;
$count = count($cart);
}
$to = '[email protected];
// subject
$subject = 'Bevestiging van bestelling';
// message
$message = '
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
</head>
<body>
'.$count.'
<table>
<tr>
<td width="50%"><b>Productnaam</b></td>
<td width="20%"><b>Hoeveelheid</b></td>
<td width="15%"><b>Prijs p/s</b></td>
<td width="15%"><b>Totaal</b></td>
<td> </td>
</tr>
<tr>
<td>'.$pro_cart->productnaam.'</td>
<td>'.$product[1].'</td>
<td>'.$pro_cart->prijs.'</td>
<td>'.$lineprice.'</td>
</tr>
<tr>
<td colspan="3"><b>Totaal</b></td>
<td><b>'.$total.'</b></td>
<td> </td>
</tr>
</table>
</body>
</html>
';
$headers1 = "From: \"Bedrijfsnaam\" <".$email1.">\r\n";
$headers1 .= "Reply-To: \"".$naam."\" <".$email.">\n";
$headers1 .= "Return-Path: Mail-Error <".$email.">\n";
$headers1 .= "MIME-Version: 1.0\n";
$headers1 .= "Content-Transfer-Encoding: 8bit\n";
$headers1 .= "Content-type: text/html; charset=iso-8859-1\n";
$formsent = mail($to, $subject, $message, $headers1);
session_unset($_SESSION['cart']);
echo "<p>De bestelling is toegevoegd!</p>"
?>
$product[1] veranderen in $product[$i] ?
Het probleem ligt eraan dat er geen loop over alle producten gaat voor het genereren van het e-mail bericht:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
<tr>
<td>'.$pro_cart->productnaam.'</td>
<td>'.$product[1].'</td>
<td>'.$pro_cart->prijs.'</td>
<td>'.$lineprice.'</td>
</tr>
?>
<tr>
<td>'.$pro_cart->productnaam.'</td>
<td>'.$product[1].'</td>
<td>'.$pro_cart->prijs.'</td>
<td>'.$lineprice.'</td>
</tr>
?>
zou iets moeten worden wat lijkt op het volgende
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
foreach($cart as $products)
{
$message .= ' //let op: er staat hier een concatenate punt
<tr>
<td>'.$products->productnaam.'</td>
<td>'.$products->hoeveelheid.'</td>
<td>'.$products->prijs.'</td>
<td>'.$lineprice.'</td>
</tr>';
}
?>
foreach($cart as $products)
{
$message .= ' //let op: er staat hier een concatenate punt
<tr>
<td>'.$products->productnaam.'</td>
<td>'.$products->hoeveelheid.'</td>
<td>'.$products->prijs.'</td>
<td>'.$lineprice.'</td>
</tr>';
}
?>
Natuurlijk bovenstaande variabelen even veranderen naar de juiste.
Gewijzigd op 16/07/2011 12:58:16 door Ivo Filot
Super, dank je wel! Helaas krijg ik nu in de email het bestelde 2 keer te zien, onder elkaar..
Als je er niet uitkomt, stuur dan even de code van je winkelwagentje- en product-objecten, want het is nu een beetje gissen wat de correcte variabelnamen zouden moeten zijn. (vergeet natuurlijk niet gevoelige code zoals wachtwoorden even te verwijderen)
Het is al gelukt, dank je wel voor je reacties!