Scripts

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

winkelwagen-update-van-de-tutorial
// 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: &euro;'.$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> &euro;'.$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 '&euro; '.($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
Nog geen reacties.