Gewoon je vragen hier stellen. Mensen reageren best snel en goed.
Link gekopieerd
*?php
session_start();
header("Cache-control: private"); # -> voorkomt dat je javascript:history.go(-1) niet meer werkt in IE
ini_set('show_errors', 'on'); # -> melden dat we de errors willen zien
error_reporting(E_ALL); # -> melden dat we ALLE errors willen zien
#####################################################################################
# #
# Dit script vormt een bestelformulier met diverse checks. Het is mooi in haar #
# eenvoud. Ik was er zelf lang naar op zoek, en toen heb ik het zelf maar gemaakt. #
# #
# Hoewel het ->hele<- script op 1 pagina staat, bestaat het uit drie delen: #
# * 'pagina' 1: producten selecteren door m.b.v. een pull down gewenste #
# aantal(len) te kiezen. #
# * 'pagina' 2: bestelling controleren en bevestigen. #
# * 'pagina' 3: gegevens invullen en de bestelling versturen. #
# #
# Verder kan men bij het achterlaten van de NAW-gegevens ervoor kiezen om zich op #
# te geven voor een digitale nieuwsbrief. Aanmeldingen hiervoor worden in een #
# database opgeslagen. #
# #
# Ik heb o.a. gebruik gemaakt van Sessions, MySQL en Arrays, dus basiskennis op #
# dat gebied is wel vereist als de code wilt aanpassen naar eigen wensen. #
# #
# Gegevens voor het inloggen op de database heb ik zelf in een bestand #
# 'config.php' gezet. Dat moet er dan als volgt uitzien: #
# #
# -------------- begin [config.php] #
# <?php #
# $hostname = "********"; # -> zal in de meeste gevallen "localhost" zijn #
# $username = "********"; #
# $password = "********"; #
# $database = "********"; # -> naam van je database #
# ? > <- zonder die spatie dan tussen ? en >! #
# -------------- einde [config.php] #
# #
# In de database heb je in mijn voorbeeld twee tabellen nodig. In de eerste staan #
# de producten: #
# #
# | id | artikelnaam | bestelnummer | prijs | verzendkosten | #
# #
# -> De 'bestelkosten' zijn de bestelkosten per eenheid van het artikel (wordt #
# vermenigvuldigd met het aantal bestelde eenheden). #
# #
# Deze tabel maak je door de volgende query uit te voeren: #
# #
# CREATE TABLE producten ( #
# id int(11) NOT NULL auto_increment, #
# artikelnaam varchar(80) NOT NULL, #
# bestelnummer varchar(40) NOT NULL, #
# prijs float(10,2) DEFAULT '0.00' NOT NULL, #
# verzendkosten float(10,2) DEFAULT '0.00' NOT NULL, #
# PRIMARY KEY (id), #
# UNIQUE id_2 (id), #
# KEY id (id) #
# ); #
# #
# In de tweede tabel worden de aanmeldingen voor de nieuwsbrief opgeslagen: #
# #
# | id | datum | naam | email | ipadres | #
# #
# Deze tabel maak je door de volgende query uit te voeren: #
# #
# CREATE TABLE nieuwsbrief ( #
# id int(11) NOT NULL auto_increment, #
# datum DATE NOT NULL, #
# naam varchar(40) NOT NULL, #
# email varchar(40) NOT NULL, #
# ipadres varchar(40) NOT NULL, #
# PRIMARY KEY (id), #
# UNIQUE id_2 (id), #
# KEY id (id) #
# ); #
# #
# Productoverzicht en de bestelling worden gegenereerd a.d.h.v. de database. #
# De code is - mede hierdoor en door het gebruik van arrays - redelijk #
# efficiënt te noemen. En verder zit er in de 'shop' nog een aantal #
# aardigheidjes, zoals: #
# * checks op verplichte velden #
# * checks op format van de e-mail, telefoon- en faxnummers #
# * het disable-en van de submitknoppen zodra erop geklikt wordt. #
# Laatste voorkomt dat mensen per ongeluk twee keer op verzenden drukken. #
# #
# Ik hoop dat je er wat aan hebt. Mocht je vragen hebben, post ze hier (=op #
# de site van phpfreakz) -> e-mail lees ik weinig. #
# #
# Succes ermee! #
# #
#####################################################################################
include("config.php"); # -> aanmaken (zie boven)
mysql_connect($hostname,$username,$password) or die ("Kan geen verbinding maken met de database...");
mysql_select_db($database);
?>
<html>
<head>
<title>shop</title>
<script language="JavaScript" type="text/javascript">
<!--
function dis_sub(formnaam) {
document.forms[formnaam].subknop.disabled = true;
}
function decrease_value(nummer) {
veld_id = "product["+nummer+"]";
veld = document.getElementById(veld_id);
if (veld.value > 0) {
veld.value--;
veld.focus();
veld.select();
}
}
function increase_value(nummer) {
veld_id = "product["+nummer+"]";
veld = document.getElementById(veld_id);
if (veld.value < 99) {
veld.value++;
veld.focus();
veld.select();
}
}
function KeyCheck(myfield,e) {
var keycode;
if (window.event) {
keycode = window.event.keyCode;
} else if (e) {
keycode = e.which;
} else {
return true;
}
if (((keycode>47) && (keycode<58) ) || (keycode==8)) {
return true;
} else {
return false;
}
}
//-->
</script>
<style type="text/css">
<!--
/* maak er wat moois van */
//-->
</style>
</head>
<body>
<?php
if (!isset($_POST['action'])) { # -> voorkomen dat je een undefined index krijgt
$_POST['action'] = "";
}
if ($_POST['action'] == "verstuur") {
#---------- controleer op fouten
if (!isset($_POST['aanhef'])) { # -> voorkomen dat je een undefined index krijgt
$_POST['aanhef'] = "";
}
if (!isset($_POST['nieuwsbrief'])) { # -> voorkomen dat je een undefined index krijgt (checkbox)
$_POST['nieuwsbrief'] = "";
}
if (!isset($_POST['betaling'])) { # -> voorkomen dat je een undefined index krijgt (radiobutton)
$_POST['betaling'] = "";
}
$foutoverzicht = "<h1>Bestelling niet geplaatst!</h1>\nUw bestelling bevat de volgende fouten:\n<ul>\n";
if ($_POST['naam'] == "") {
$correct = "no";
$foutoverzicht .= "<li>U heeft geen naam ingevuld</li>\n";
}
if ($_POST['adres'] == "") {
$correct = "no";
$foutoverzicht .= "<li>U heeft geen adres ingevuld</li>\n";
}
if ($_POST['postcode'] == "") {
$correct = "no";
$foutoverzicht .= "<li>U heeft geen postcode ingevuld</li>\n";
}
if ($_POST['woonplaats'] == "") {
$correct = "no";
$foutoverzicht .= "<li>U heeft geen plaats ingevuld</li>\n";
}
if ($_POST['telefoon'] == "") {
$correct = "no";
$foutoverzicht .= "<li>U heeft geen telefoonnummer ingevuld</li>\n";
} elseif (!ereg("^[0-9 ()+-]+$", $_POST['telefoon'])) {
$correct = "no";
$foutoverzicht .= "<li>U heeft een incorrect telefoonnummer ingevuld</li>\n";
}
if (($_POST['telefax'] != "") && (!ereg("^[0-9 ()+-]+$", $_POST['telefax']))) {
$correct = "no";
$foutoverzicht .= "<li>U heeft een incorrect faxnummer ingevuld</li>\n";
}
if (($_POST['nieuwsbrief'] == "ja") && ($_POST['email'] == "")) {
$correct = "no";
$foutoverzicht .= "<li>In geval van aanmelding voor de digitale nieuwsbrief dient u een e-mail adres in te vullen</li>";
} elseif (($_POST['email'] != "") && (!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$", $_POST['email']))) {
$correct = "no";
$foutoverzicht .= "<li>U heeft een incorrect e-mail adres ingevuld</li>\n";
}
if ($_POST['betaling'] == "") {
$correct = "no";
$foutoverzicht .= "<li>U heeft niet aangegeven op welke wijze u wenst te betalen</li>\n";
}
$foutoverzicht .= "</ul>\n<a href=\"javascript:history.go(-1)\">Klik hier om terug te keren naar het bestelformulier</a>\n";
#----------
#---------- correct? -> mail versturen
if (!isset($correct)) { # -> voorkomen dat je een undefined variable krijgt
$correct = "";
}
if ($correct != "no") {
#---------- variabelen
$onze_naam = "**************"; # <- vul hier je eigen naam in
$onze_email = "**************"; # <- vul hier je emailadres in (daar wordt de bestelling naar verstuurd)
$onderwerp_naar_ons = "Een online bestelling van ".$_POST['aanhef']." ".$_POST['naam'];
$onderwerp_naar_besteller = "Uw bestelling op de website van ".$onze_naam;
$datum = date("d-m-Y H:i:s");
$datum_kort = date("d-m-Y");
if (gethostbyaddr($_SERVER['REMOTE_ADDR']) == "") {
$ipadres = "niet beschikbaar";
} else {
$ipadres = gethostbyaddr($_SERVER['REMOTE_ADDR']);
}
#-----------
#----------- gegevens van de besteller
$gegevens_besteller = "
<table cellpadding=\"0\" cellspacing=\"3\" border=\"0\">
<tr>
<td>Naam:</td>
<td>".$_POST['aanhef']." ".$_POST['naam']."</td>
</tr>
<tr>
<td>Adres:</td>
<td>".$_POST['adres']."<br>".$_POST['postcode']." ".$_POST['woonplaats']."</td>
</tr>
<tr>
<td>Telefoon:</td>
<td>".$_POST['telefoon']."</td>
</tr>
<tr>
<td>Telefax:</td>
<td>".$_POST['telefax']." </td>
</tr>
<tr>
<td>E-mail:</td>
<td><a href=\"mailto:".$_POST['email']."\">".$_POST['email']."</a> </td>
</tr>
<tr>
<td>Aanmelding nieuwsbrief:</td>
<td>".$_POST['nieuwsbrief']." </td>
</tr>
<tr>
<td>Bijzonderheden:</td>
<td>".$_POST['bijzonderheden']." </td>
</tr>
</table>";
#-----------
#----------- stylesheet van de e-mail -> zelf maken
$stylesheet_email = "<style type=\"text/css\">\n/* maak er wat moois van */\n</style>\n";
#-----------
#----------- header van de mail naar ons
if ($_POST['email'] != "") {
$adres_naar_ons = $_POST['email'];
} else {
$adres_naar_ons = $onze_email;
}
$header_naar_ons = "From: ".$_POST['naam']."<".$adres_naar_ons.">\n";
$header_naar_ons .= "Sender: ".$_POST['naam']."<".$adres_naar_ons.">\n";
$header_naar_ons .= "Reply-To: ".$_POST['naam']."<".$adres_naar_ons.">\n";
$header_naar_ons .= "MIME-Version: 1.0\n";
$header_naar_ons .= "Content-Type: text/html; charset=iso-8859-1\n";
$header_naar_ons .= "Return-Path: <".$adres_naar_ons.">";
#-----------
#----------- de mail naar ons
$mail_naar_ons = "
<html>
<head>
<META http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">
<META content=\"text/html; charset=iso-8859-1\" http-equiv=\"Content-Type\">
<title>".$onderwerp_naar_ons."</title>".$stylesheet_email."
</head>
<body>
<br>De volgende bestelling is op <strong>".$datum."</strong> binnengekomen via de website:
<br><br>".$_SESSION['bestelling']."Gegevens van de besteller:<br><br>".$gegevens_besteller."
Ip-adres: <strong>".$ipadres."</strong><br><br>
<strong>Het totaalbedrag van ".$_SESSION['totaal']." ".$_POST['betaling']."</strong>
</body>
</html>";
#----------
#----------- header van de mail naar de besteller
$header_naar_besteller = "From: ".$onze_naam."<".$onze_email.">\n";
$header_naar_besteller .= "Sender: ".$onze_naam."<".$onze_email.">\n";
$header_naar_besteller .= "Reply-To: ".$onze_naam."<".$onze_email.">\n";
$header_naar_besteller .= "MIME-Version: 1.0\n";
$header_naar_besteller .= "Content-Type: text/html; charset=iso-8859-1\n";
$header_naar_besteller .= "Return-Path: <".$onze_email.">";
#-----------
#----------- de mail naar de besteller
$mail_naar_besteller = "
<html>
<head>
<META http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">
<META content=\"text/html; charset=iso-8859-1\" http-equiv=\"Content-Type\">
<title>".$onderwerp_naar_besteller."</title>".$stylesheet_email."
</head>
<body>
<br>Geachte ".$_POST['aanhef']." ".$_POST['naam'].",<br><br>
Op ".$datum_kort." heeft u de volgende bestelling geplaatst op de website van ".$onze_naam.":
<br><br>".$_SESSION['bestelling']."Uw gegevens:<br><br>".$gegevens_besteller."
<strong>Het totaalbedrag van ".$_SESSION['totaal']." ".$_POST['betaling']."</strong><br><br>
Uw bestelling is in behandeling!<br><br>
Mochten er onjuiste gegevens in uw bestelling voorkomen, neem dan contact met ons op.<br><br>
Met vriendelijke groet,<br><br>".$onze_naam."
</body>
</html>";
#----------
#---------- aanmeldingen nieuwsbrief opslaan
if ($_POST['nieuwsbrief'] == "ja") {
$query_nb = "INSERT INTO nieuwsbrief (datum,naam,email,ipadres) VALUES (NOW(),'$naam','$email','$ipadres')";
mysql_query($query_nb) or die (mysql_error());
}
#----------
#---------- daadwerkelijk versturen
mail($onze_email,$onderwerp_naar_ons,$mail_naar_ons,$header_naar_ons);
if ($_POST['email'] != "") { # -> eventuele autoresponder
mail($_POST['email'],$onderwerp_naar_besteller,$mail_naar_besteller,$header_naar_besteller);
}
echo "<meta http-equiv=\"refresh\" content=\"5;URL=shop.php\">\n";
echo "<h1>Bestelling voltooid!</h1>\n";
echo "Bedankt voor uw bestelling ".$_POST['aanhef']." ".$_POST['naam'].", u ontvangt zo spoedig mogelijk bericht!<br><br>\n";
echo "U wordt nu teruggebracht naar de startpagina...";
session_destroy(); # -> sessie verwijderen
#----------
} else { # -> niet correct NAW ingevuld -> foutoverzicht
echo $foutoverzicht;
}
} elseif ($_POST['action'] == "bevestig") {
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" name="shop_c" onSubmit="javascript:dis_sub(shop_c);">
<input type="hidden" name="action" value="verstuur">
<h1>Stap 3 - Vul uw gegevens in</h1>
Let op: alle velden gemarkeerd met * zijn verplicht.<br><br>
<table cellspacing="3" cellpadding="0" border="0">
<tr>
<td>Aanhef:</td>
<td><input type="radio" name="aanhef" value="Meneer"> Dhr. <input type="radio" name="aanhef" value="Mevrouw"> Mevr.</td>
<td>Naam*:</td>
<td><input type="text" name="naam"></td>
</tr>
<tr>
<td>Adres*:</td>
<td><input type="text" name="adres"></td>
<td colspan="2"></td>
</tr>
<tr>
<td>Postcode*:</td>
<td><input type="text" name="postcode"></td>
<td>Woonplaats*:</td>
<td><input type="text" name="woonplaats"></td>
</tr>
<tr>
<td>Telefoon*:</td>
<td><input type="text" name="telefoon"></td>
<td rowspan="3" style="vertical-align:top;padding-top:4px;">Bijzonderheden:</td>
<td rowspan="3"><textarea rows="6" name="bijzonderheden" style="height:72px;"></textarea></td>
</tr>
<tr>
<td>Telefax:</td>
<td><input type="text" name="telefax"></td>
</tr>
<tr>
<td>E-mail adres:</td>
<td><input type="text" name="email"></td>
</tr>
<tr>
<td colspan="4"><strong>Het totaalbedrag van <?php echo $totaal; ?>:</strong><br>
<input type="radio" name="betaling" value="wordt overgemaakt op girorekening ****** t.n.v. ****** te ******."> Maak ik over op uw girorekening <strong>******</strong> t.n.v. ****** te ******.<br>
<input type="radio" name="betaling" value="wordt voldaan via een factuur. Let op: betaling dient te geschieden binnen 14 dagen na ontvangst."> Wil ik graag via een factuur voldoen. <strong>Let op: betaling dient te geschieden binnen ** dagen na ontvangst.</strong></td>
<!-- zo maar twee opties - hier kan je mee doen wat je zelf wilt ;-) //-->
</tr>
<tr>
<td colspan="4"><input type="checkbox" name="nieuwsbrief" value="ja"> Meld mij aan voor uw digitale nieuwsbrief</td>
</tr>
<tr>
<td colspan="4" align="center"><input type="reset" value="« Leeg de velden"> <input type="submit" value="Plaats bestelling »" name="subknop"></td>
</tr>
</table>
</form><br>
Wilt u uw bestelling wijzigen, <a href="javascript:history.go(-2)">klik dan hier</a>.
<?php
} elseif ($_POST['action'] == "selecteer") {
$i = 1;
$totaal_aantal_a = ""; # -> begin leeg op te voorkomen dat je een undefined variable krijgt
foreach ($_POST['product'] as $value) {
$totaal_aantal_a = $totaal_aantal_a+$value;
$i++;
}
if ($totaal_aantal_a != "0") { # -> akkoord: product(en) geselecteerd -> naam invullen
?>
<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="POST" name="shop_b" onSubmit="javascript:dis_sub(shop_b);">
<input type="hidden" name="action" value="bevestig">
<?php
#----------- de tabelheader
$_SESSION['bestelling'] = "<table cellspacing=\"3\" cellpadding=\"0\" border=\"0\">\n"; # -> bestelling sessievar maken om in volgende formulier te gebruiken
$_SESSION['bestelling'] .= "<tr>\n";
$_SESSION['bestelling'] .= "<td>Artikelnaam</td>\n";
$_SESSION['bestelling'] .= "<td>Prijs</td>\n";
$_SESSION['bestelling'] .= "<td>Aantal</td>\n";
$_SESSION['bestelling'] .= "<td>Verzendkosten</td>\n";
$_SESSION['bestelling'] .= "<td>Totaal</td>\n";
$_SESSION['bestelling'] .= "</tr>\n";
#-----------
#----------- de tabelrijen
$i = 1;
$totaal_aantal_b = ""; # -> begin leeg op te voorkomen dat je een undefined variable krijgt
$totaal_verzendkosten = "";
$totaal = "";
foreach ($_POST['product'] as $value) {
if ($value != "0") {
$query_bestelling = mysql_query ("SELECT * FROM producten WHERE id = $i");
while ($row = mysql_fetch_array ($query_bestelling)) {
#----------- subtotalen
$totaal_aantal_b = $totaal_aantal_b+$value;
$verzendkosten = $value*$row['verzendkosten'];
$subtotaal = ($value*$row['prijs'])+$verzendkosten;
$totaal_verzendkosten = $totaal_verzendkosten+$verzendkosten;
$totaal = $totaal+$subtotaal;
#-----------
#----------- notatie subtotalen
$row['prijs'] = "€".number_format($row['prijs'], 2, ',', ',');
$verzendkosten = "€".number_format($verzendkosten, 2, ',', ',');
$subtotaal = "€".number_format($subtotaal, 2, ',', ',');
#-----------
#----------- rijen genereren
$_SESSION['bestelling'] .= "<tr>\n<td>(".$row['bestelnummer'].") ".$row['artikelnaam']."</td>\n";
$_SESSION['bestelling'] .= "<td>".$row['prijs']."</td>\n";
$_SESSION['bestelling'] .= "<td>".$value."</td>\n";
$_SESSION['bestelling'] .= "<td>".$verzendkosten."</td>\n";
$_SESSION['bestelling'] .= "<td>".$subtotaal."</td>\n</tr>\n";
#-----------
}
}
$i++;
}
#-----------
#----------- totalen
$totaal_verzendkosten = "€".number_format($totaal_verzendkosten, 2, ',', ',');
$totaal = "€".number_format($totaal, 2, ',', ',');
$_SESSION['totaal'] = $totaal; # -> totaalbedrag sessievar maken om in volgende formulier te gebruiken
#-----------
#----------- tabeleinde schrijven
$_SESSION['bestelling'] .= "<tr>\n";
$_SESSION['bestelling'] .= "<td></td>\n";
$_SESSION['bestelling'] .= "<td></td>\n";
$_SESSION['bestelling'] .= "<td>".$totaal_aantal_b."</td>\n";
$_SESSION['bestelling'] .= "<td>".$totaal_verzendkosten."</td>\n";
$_SESSION['bestelling'] .= "<td>".$totaal."</td>\n";
$_SESSION['bestelling'] .= "</tr>\n";
$_SESSION['bestelling'] .= "</table>\n";
#-----------
?>
<h1>Stap 2 - Controleer uw bestelling</h1>
U heeft het/de volgende product(en) op uw bestellijst gezet:<br><br>
<?php
#----------- echo de hele tabel
echo $_SESSION['bestelling']."<br>";
#-----------
?>
Wilt u uw bestelling wijzigen, <a href="javascript:history.go(-1)">klik dan hier</a>.<br><br>
Is de bestellijst correct?
Ga dan door naar <a href="javascript:document.forms['shop_b'].submit();">stap drie</a>.
</form>
<?php
} else { # -> geen product(en) geselecteerd -> fout!
?>
<h1>U heeft geen product(en) geselecteerd!</h1>
<a href="javascript:history.go(-1)">Ga terug en maak uw selectie</a>
<?php
}
} else { # -> de eerste 'pagina'
?>
<h1>Stap 1 - Maak uw selectie</h1>
Maak uw keuze uit de producten door het aantal gewenste exemplaren te selecteren.
Wanneer u hiermee klaar bent klikt u op "Besteloverzicht" onder aan de pagina.<br><br>
<form action="<? echo $_SERVER['PHP_SELF'] ?>" method="POST" name="shop_a" onSubmit="javascript:dis_sub(shop_a);">
<input type="hidden" name="action" value="selecteer">
<h2>Onze collectie</h2>
<table cellspacing="3" cellpadding="0" border="0">
<tr>
<td>Artikelnaam</td>
<td>Prijs</td>
<td>Aantal</td>
</tr>
<?php
#---------- schrijf de rijen
$query_overzicht = mysql_query ("SELECT * FROM producten ORDER BY id ASC");
while ($row = mysql_fetch_array ($query_overzicht)) {
$row['prijs'] = "€".number_format($row['prijs'], 2, ',', ',');
echo "<tr>\n<td>(".$row['bestelnummer'].") ".$row['artikelnaam']."</td>\n";
echo "<td>".$row['prijs']."</td>\n";
echo "<td><input type=\"text\" name=\"product[".$row['id']."]\" id=\"product[".$row['id']."]\" value=\"0\" style=\"width:25px;text-align:right;\" maxlength=\"2\" onKeyPress=\"return KeyCheck(this,event);\">\n";
echo "<a href=\"javascript:increase_value(".$row['id'].");\" title=\"Voeg een eenheid toe\">[+]</a> <a href=\"javascript:decrease_value(".$row['id'].");\" title=\"Haal er een eenheid af\">[-]</a>\n</td>\n</tr>\n";
}
#----------
?>
<tr>
<td colspan="3" align="center"><input type="reset" value="« Leeg de velden"> <input type="submit" value="Besteloverzicht »" name="subknop"></td>
</tr>
</table>
<?php
}
?>
</body>
*/html>
Dit script is van phpfr****
Het is best een lastig script, vooral voor de beginnende. Er moet een quearie aangemaakt worden en ik heb geen idee hoe ik dat doe!
Link gekopieerd
Dit is natuurlijk niet duidelijk. Er moet ergens iets aan veranderd worden. En meestal wordt er een stukje code geplaatst waar het directe probleem inzit, en niet zoals jij doet een heel boek. De kans dat iemand dit allemaal gaat uitspitten is zo ongeveer nul.
Dus als ik jou was zou ik dit 'boek' weer verwijderen (met de editknop boven je post) en eerst een goede gerichte vraag stellen.
Link gekopieerd