Winkelwagen (Update van de Tutorial)
Hey, Omdat ik nu voor de 2e keer op het forum dingen zag voor bij komen over een webwinkel, en dat ze de tutorial hier steeds proberen en het steeds weer niet lukt.. Dacht ik nou ik verbeter naar mijn inzicht alle punten waarop ik het script kon afkraken en zet die hier online zodat jullie er ook wat aan hebben. De eigenlijke bron: http://phphulp.nl/php/tutorials/8/252/ Zo heb ik de volgende punten aangepast: - Foutmeldingen er in gebouwd. - MySql injection beveiligd. - CSSje gekoppeld aan t script (LET OP: Momenteel alleen FF vriendelijk...). - Alles in div's etc gezet, tabel vond ik niet mooi :P.. - Javascript van de php code gescheiden. Uitleg Ga naar install.php om je db te installeren & voer de config.php juist in dan zou alles in 1 keer moeten werken :O Gr, PS: hoop dat jullie er iets mee kunnen Ben je het er niet mee eens? Opbouwende kritiek altijd welkom! Gr, Milo
// Install.php
[code]
<?php
include('Config.php');
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$produ = mysql_query("CREATE TABLE `producten` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`voorraad` INT NOT NULL ,
`titel` VARCHAR( 50 ) NOT NULL ,
`afbeelding` VARCHAR( 25 ) NOT NULL ,
`omschrijving` TEXT NOT NULL,
`prijs` VARCHAR( 15 ) NOT NULL
) ENGINE = MYISAM ;");
$bestl = mysql_query("CREATE TABLE `bestelling` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`klant_id` INT NOT NULL ,
`datum` DATETIME NOT NULL
) ENGINE = MYISAM ;");
$bestr = mysql_query("CREATE TABLE `bestelregel` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`bestel_id` INT NOT NULL ,
`product_id` INT NOT NULL ,
`aantal` INT NOT NULL
) ENGINE = MYISAM ;");
if(!$produ && !$bestl && !$bestr)
{
echo 'Fout bij installeren query´s: <br />';
echo mysql_error();
exit();
}
else
{
echo 'Alles succesvol geïnstalleerd';
}
}
else
{
echo '<form action="" method="post">';
echo '<input type="submit" value="Installer de DataBase" />';
echo '</form>';
}
?>
[/code]
// index.php
[code]
<?php
// Database connectie maken
include('Config.php');
// Style pagina invoegen
echo '<link rel="stylesheet" type="text/css" href="CSS/Winkelwagen.css" />';
// Alle items uit de db halen
$sql = mysql_query("SELECT * FROM producten ORDER BY titel ASC");
// Als query is gelukt
if($sql)
{
// Als er items zijn
if(mysql_num_rows($sql) > 0)
{
echo '<div class="wrapper">';
// Alles loopen
while($rec = mysql_fetch_assoc($sql))
{
echo '<div class="artikel_e">';
// Product id
echo '<input type="hidden" name="product_id" value="'.$rec['id'].'" />';
// De titel
echo '<b>'.$rec['titel'].'</b><br />';
// De afbeelding
echo '<img alt="" src="CSS/IMAGES/PRODUCTEN/'.$rec['afbeelding'].'" /><br />';
// Prijs
echo 'Prijs: €'.$rec['prijs'].'<br />';
echo '<a href="Product.php?Pid='.$rec['id'].'">Meer details</a>';
echo '</div>';
}
echo '</div>';
}
// Anders
else
{
// Geen producten
echo 'Er zijn nog geen producten in de etalage.';
}
}
// Anders
else
{
// Mysql error opvangen
echo 'Er is een fout opgetreden bij de query. <br />';
echo mysql_error();
}
?>
[/code]
// Config.php
[code]
<?php
// Mysql host
$host = '';
// Mysql gebruikersnaam
$user = '';
// Mysql wachtwoord
$pass = '';
// Mysql database naam
$datb = '';
mysql_connect($host, $user, $pass) or die (mysql_error());
mysql_select_db($datb);
?>
[/code]
// Product.php
[code]
<?php
// Database connectie maken
include('Config.php');
// Style pagina invoegen
echo '<link rel="stylesheet" type="text/css" href="CSS/Winkelwagen.css" />';
// Alle items uit de db halen
$sql = mysql_query("SELECT * FROM producten WHERE id = '".intval($_GET['Pid'])."'");
// Als query is gelukt
if($sql)
{
// Als er items zijn
if(mysql_num_rows($sql) > 0)
{
echo '<div class="wrapper">';
// Alles loopen
$rec = mysql_fetch_assoc($sql);
echo '<div class="artikel_p">';
echo '<form action="Add.php" method="post">';
// Product id
echo '<input type="hidden" name="product_id" value="'.$rec['id'].'" />';
// De afbeelding
echo '<img alt="" src="CSS/IMAGES/PRODUCTEN/'.$rec['afbeelding'].'" />';
// Informatie rechterzijde
echo '<div class="info">';
// De titel
echo '<b>'.$rec['titel'].'</b><br />';
// Prijs
echo '<b>Prijs:</b> €'.$rec['prijs'].'<br />';
// Aantal
echo '<b>Aantal:</b> <input class="aantal_p" type="text" name="aantal" size="2" maxlength="2" value="1" /><br />';
// Omschrijving
echo '<b>Omschrijving:</b><br />';
echo nl2br($rec['omschrijving']);
echo '</div>';
// Add knop
echo '<input class="submit_p" type="submit" value="Toevoegen" />';
echo '</form>';
echo '</div>';
echo '</div>';
}
// Anders
else
{
// Geen producten
echo '<p class="error">Er zijn nog geen producten in de etalage.</p>';
}
}
// Anders
else
{
// Mysql error opvangen
echo 'Er is een fout opgetreden bij de query. <br />';
echo mysql_error();
}
?>
[/code]
// Add.php
[code]
<?php
// Sessie starten
session_start();
// Kijken of product_id geset is en een nummer is
if(!isset($_POST['product_id']) || !is_numeric($_POST['product_id']))
{
exit('Er is geen product id meegezonden');
}
else
{
$product_id = $_POST['product_id'];
}
// Kijken of aantal geset is en een nummer is
if(!isset($_POST['aantal']) || !is_numeric($_POST['aantal']))
{
exit('Er is geen product id meegezonden');
}
else
{
$aantal = $_POST['aantal'];
}
// Als er niks in de winkelwagen staat
if(empty($_SESSION['winkelwagen']))
{
// Nieuwe aanmaken
$_SESSION['winkelwagen'] = $product_id.','.$aantal;
}
// Anders
else
{
// Winkelwagen opsplitsen op de pipe
$cart = explode('|', $_SESSION['winkelwagen']);
// Winkelwagen inhoud tellen
$count = count($cart);
// Var om te check voor het toevoegen
$add = TRUE;
foreach($cart as $products)
{
// Exploden
/*
$product[x] -->
x == 0 -> productnummer
x == 1 -> hoeveelheid
*/
$product = explode(',', $products);
// Als product al in de winkelwagen is
if($product[0] == $product_id)
{
$product[1] = $product[1] + $aantal;
$add = FALSE; // Dus niet toevoegen
}
// En weer in de sessie zetten
$i++;
if($i == 1)
{
// In de sessie gooien
$_SESSION['winkelwagen'] = $product[0].','.$product[1];
}
// Anders
else
{
// Bij de oude sessie plaatsen
$_SESSION['winkelwagen'] = $_SESSION['winkelwagen'].'|'.$product[0].','.$product[1];
}
}
// Als er toegevoegd meot worden
if($add)
{
$_SESSION['winkelwagen'] = $_SESSION['winkelwagen'].'|'.$product_id.','.$aantal;
}
}
// Doorsturen
header('Location: Winkelwagen.php');
?>
[/code]
// Winkelwagen.php
[code]
<?php
// Sessie starten
session_start();
// Database connectie maken
include('Config.php');
// Style pagina invoegen
echo '<link rel="stylesheet" type="text/css" href="CSS/Winkelwagen.css" />';
// Javascript voor updaten en deleten winkelwagen invoegen
echo '<script type="text/javascript" src="Winkelwagen.js"></script>';
// Kijk of er iets in de winkelwagen zit
if(empty($_SESSION['winkelwagen']))
{
echo '<p class="error">Uw winkelwagen is momenteel leeg.</p>';
}
// Anders
else
{
echo '<div class="wrapper">';
echo '<div class="row">';
echo '<p class="small"><b>Aantal:</b></p>';
echo '<p class="small"><b>Art. nr.:</b></p>';
echo '<p class="big"><b>Product:</b></p>';
echo '<p class="small"><b>Actie:</b></p>';
echo '<p class="small"><b>Prijs:</b></p>';
echo '</div>';
// Exploden
$cart = explode('|', $_SESSION['winkelwagen']);
// Begin formulier
echo '<form action="Upd_winkelwagen.php" method="post">';
// Show winkelwagen
$i = 0;
foreach($cart as $products)
{
// Split
/*
$product[x] -->
x == 0 -> product id
x == 1 -> hoeveelheid
*/
$product = explode(',', $products);
// Get product info
$sql = mysql_query("SELECT * FROM producten WHERE id = '".intval($product[0])."'");
// Als query gelukt is
if($sql)
{
// Als er items zijn
if(mysql_num_rows($sql) > 0)
{
// Alle items echoën
$rec = mysql_fetch_assoc($sql);
$i++;
// Verborgen vars
echo '<input type="hidden" name="productnummer_'.$i.'" value="'.$product[0].'" />';
echo '<div class="row">';
// Aantal
echo '<p class="small">';
echo '<input type="text" class="aantal_w" name="hoeveelheid_'.$i.'" value="'.$product[1].'" size="2" maxlength="2" onKeyPress="return submitenter(this,event)" />';
echo '</p>';
// Artikel nummer
echo '<p class="small">';
if($rec['voorraad'] < $product[1])
{
echo '<font style="color: #FF0000;">'.$product[0].'</font>';
$error = TRUE;
}
else
{
echo $product[0];
}
echo '</p>';
// titel
echo '<p class="big">';
echo $rec['titel'];
echo '</p>';
// Acties
echo '<p class="small">';
echo '<a href="javascript:removeItem('.$i.')">Del</a>';
echo '</p>';
// Prijs
echo '<p class="small">';
echo '€ '.($rec['prijs'] * $product[1]);
echo '</p>';
echo '</div>';
}
// Anders
else
{
// Fout weergeven
echo '<p class="error">Dit product is er niet meer.</p>';
}
}
// Anders
else
{
// Mysql error opvangen
echo 'Er is een fout opgetreden in de query. <br />';
echo mysql_error();
}
}
echo '</form>';
if($error == TRUE)
{
echo '<p class="error">';
echo 'Van artikelen waarvan het artikelnummer rood is gekleurd hebben we niet voldoende op voorraad om je bestelling direct uit te kunnen leveren.';
echo '</p>';
}
echo '</div>';
// Winkelwagen leeghalen & Afrekenen
echo '<a href="javascript:removeCart()">Winkelwagen leeghalen</a><br />';
echo '<a href="Afrekenen.php">Afrekenen</a></p>';
}
?>
[/code]
// Afrekenen.php
[code]
<?php
// Sessie starten
session_start();
// Database connectie maken
include('Config.php');
$_SESSION['user_id'] = '1';
// Order invoegen
$sql1 = mysql_query("INSERT INTO
bestelling
(
klant_id,
datum
)
VALUES
(
'".intval($_SESSION['user_id'])."',
NOW()
)
");
// Als query gelukt is
if($sql1)
{
// Winkelwagen openen
$cart = explode('|', $_SESSION['winkelwagen']);
// $bestel id aanmaken
$bestel_id = mysql_insert_id();
// Voor elk product
$i = 1;
foreach($cart as $products)
{
// Split
/*
$product[x] -->
x == 0 -> product id
x == 1 -> hoeveelheid
*/
// Product eigenschappen splitsen
$product = explode(',', $products);
// Bestelde producten in db zetten
$sql2 = mysql_query("INSERT INTO
bestelregel
(
bestel_id,
product_id,
aantal
)
VALUES
(
'".intval($bestel_id)."',
'".$product[0]."',
'".$product[1]."'
)
");
// Als de query gelukt is
if($sql2)
{
if($i == 1)
{
echo 'Uw bestelling is geplaatst.';
}
}
// Anders
else
{
// Mysql error opvangen
echo 'Er is een fout opgetreden in query nr: 2 <br />';
echo mysql_error();
}
$i++;
}
}
// Anders
else
{
// Mysql error opvangen
echo 'Er is een fout opgetreden in query nr: 1 <br />';
echo mysql_error();
}
?>
[/code]
// Del_all.php
[code]
<?php
// delete_cart.php
session_start();
// Als er iets in de winkelwagen zit
if(empty($_SESSION['winkelwagen']))
{
// Terug sturen
header('Location: Winkelwagen.php');
}
// Anders
else
{
// Leeg de winkwelwagen
session_unset($_SESSION['winkelwagen']);
// Terug sturen
header('Location: Winkelwagen.php');
}
?>
[/code]
// Del_item.php
[code]
<?php
// Sessie starten
session_start();
// Als item nummeriek is
if(is_numeric($_GET['item']))
{
$item = $_GET['item'];
}
// Anders
else
{
// Error weergeven
exit ('U wilt een item verwijderen dat niet bestaad.');
}
// Kijk of er iets in de winkelwagen zit
if(empty($_SESSION['winkelwagen']))
{
echo 'Uw winkelwagen is momenteel leeg.';
}
// Anders
else
{
// Winkelwagen uit elkaar plukken
$cart = explode('|', $_SESSION['winkelwagen']);
// Kijken of het in de winkelwagen staat
foreach($cart as $products)
{
// Split
/*
$product[x] -->
x == 0 -> productnummer
x == 1 -> hoeveelheid
*/
$product = explode(',', $products);
$i++;
// Als item niet toegevoegd moet worden.
if($i != $item)
{
// Var toevoegen aan nieuwe winkelwagen
$inNewCart = $product[0].','.$product[1];
$newCart = $newCart.'|'.$inNewCart;
}
}
// Luiheid, blijheid... er staat nog een | vooraan, even weghalen.
$newCart = substr($newCart, 1);
}
// Verwijder winkelwagen
session_unset($_SESSION['winkelwagen']);
// Maak nieuwe winkelwagen
$_SESSION['winkelwagen'] = $newCart;
// En terugsturen
header('Location: winkelwagen.php');
?>
[/code]
// Upd_winkelwagen.php
[code]
<?php
// update_cart.php
session_start();
// Kijk of er iets in de winkelwagen zit
if(empty($_SESSION['winkelwagen']))
{
echo 'Uw winkelwagen is momenteel leeg.';
}
// Anders
else
{
// Exploden
$cart = explode('|', $_SESSION['winkelwagen']);
// Tellen
$count = count($cart);
// Alle producten langslopen
foreach($cart as $products)
{
// Split
/*
$product[x] -->
x == 0 -> product id
x == 1 -> hoeveelheid
*/
$product = explode(',', $products);
$i++;
$postedProduct = 'productnummer_'.$i; // Deze twee om later de geposte waarde te 'spoofen'
$postedQuantity = 'hoeveelheid_'.$i;
// Post waarden spoofen
if($product[0] == $_POST[$postedProduct] && $_POST[$postedQuantity] > 0)
{
// Update pro
$inNewCart = $product[0].','.$_POST[$postedQuantity];
$newCart = $newCart.'|'.$inNewCart;
}
}
// En weer die luiheid, dus die eerste | eraf...
$newCart = substr($newCart, 1);
// Oude winkelwagen weg, nieuwe terug
session_unset($_SESSION['winkelwagen']);
$_SESSION['winkelwagen'] = $newCart;
// En weer terugsturen
header('Location: Winkelwagen.php');
}
?>
[/code]
// Winkelwagen.js
[code]
// JavaScript Document
<!--
// Delete item
function removeItem(item)
{
var answer = confirm ('Weet u zeker dat u dit product wilt verwijderen?')
if (answer)
window.location='Del_item.php?item=' + item;
}
// Delete all products
function removeCart()
{
var answer = confirm ('Weet u zeker dat u de winkelwagen wilt leeghalen?')
if (answer)
window.location='Del_all.php';
}
// Submit form bij enter
// BRON: (http://www.htmlcodetutorial.com/forms/index_famsupp_157.html)
function submitenter(myfield,e)
{
var keycode;
if (window.event) keycode = window.event.keyCode;
else if (e) keycode = e.which;
else return true;
if (keycode == 13)
{
myfield.form.submit();
return false;
}
else
return true;
}
//-->
[/code]
// Winkelwagen.css
[code]
/* Standaard */
body {
font-family: Verdana;
font-size: 11px;
color: #808080;
}
div.wrapper {
width: 500px;
min-height: 5px;
padding-bottom: 5px;
overflow: hidden;
}
a {
color: #808080;
text-decoration: none;
}
a:hover {
color: #808080;
text-decoration: underline;
}
p.error {
width: 500px;
text-align: center;
line-height: 15px;
margin: 0px;
padding: 0px;
display: block;
float: left;
background-color: #EEDDDD;
}
/* Formulier elementen */
/* Etalage */
div.artikel_e {
width: 130px;
height: 180px;
float: left;
margin-left: 1px;
padding-left: 10px;
padding-right: 10px;
border: 1px solid #808080;
background-color: #F2F2F2;
}
img {
width: 130px;
height: 130px;
margin: 0px;
padding: 0px;
display: block;
float: left;
border: 1px solid #808080;
}
/* Etalage */
div.artikel_p {
width: 400px;
height: 157px;
float: left;
margin-left: 1px;
padding: 10px;
border: 1px solid #808080;
background-color: #F2F2F2;
}
div.info {
width: 250px;
height: 130px;
margin: 0px;
padding: 0px;
float: right;
border: 1px solid #808080;
}
input.aantal_p {
width: 40px;
height: 20px;
border: none;
background-color: transparent;
}
input.submit_p {
width: 400px;
height: 20px;
margin-top: 1px;
border: 1px solid #808080;
background-color: #D8D8D8;
}
/* Winkelwagen */
div.row {
width: 500px;
height: 20px;
float: left;
line-height: 20px;
border-bottom: 1px solid #D8D8D8;
}
p.small {
width: 75px;
height: 20px;
float: left;
margin: 0px;
padding: 0px;
display: block;
}
p.big {
width: 200px;
height: 20px;
float: left;
margin: 0px;
padding: 0px;
display: block;
}
input.aantal_w {
width: 40px;
height: 20px;
border: none;
background-color: transparent;
}
[/code]
Reacties
0