Ne znam, ovo što si ubacio u code tag je katastrofalno, do neke mere, bar meni.
Tako da teško mogu da ti dam odgovor.
Međutim, nešto sam dobre volje ovih dana, pa ako studente, ovo ne može da ti pomogne, ništa neće.
I ne samo za tebe, ovo može da posluži svima koji čupaju kosu, a treba im,
al' ne umeju neko elegantno i efikasno rešenje da sklepaju. :) :D
U pitanju je Session/Object varijanta korpice za porudžbinu koja ne mora a može da radi bez sql-a.
To zavisi od tebe i odakle vučeš informacije o proizvodima.
Primer ispod, vuče sve iz jednog niza koji se nalazi na samom početku html/php skripte.
U zipovanom prilogu se nalaze 2 fajla (to je ustvari sve ovo u code tagu). Jedan je sama php/html skripta i drugi je klasa, to jest 'korpica' - object.
Raspakuj kod sebe u lokalu u nekom folderu pa vidi šta ti kaže nakon 'Dodaj u korpu' kada udariš refreš dugme. Da li se povećava Quantity ili ne.
Odgovor je - naravno da ne.
Ako ti se svidi i budeš želeo da pribegneš ovakvom rešenju (ne gine ti izrada css za sve ovo, jer je u primeru css minimalan) obrati pažnju na blok komentara koji stoji pri dnu same php skripte gde se izvršava sve.
To ne bilo loše da pridodaš onoj stranici koja je zadužena za - checkout.
Stranicu za checkout, nadam se imaš. Ako nemaš, napravićeš. Sve što ti treba, jednostavno izvučeš iz sesije i to je to. :)
_class_cart.php
Code (php):
<?php
/* Session/Object CLASS - "Korpica" */
class korpica
{
var $total = 0;
var $itemcount = 0;
var $items = array();
var $itemprices = array();
var $itemqtys = array();
var $iteminfo = array();
function cart
() {}
function get_contents
(){
$items = array();
foreach($this->items as $tmp_item){
$item = FALSE;
$item['id'] = $tmp_item;
$item['qty'] = $this->itemqtys[$tmp_item];
$item['price'] = $this->itemprices[$tmp_item];
$item['info'] = $this->iteminfo[$tmp_item];
$item['subtotal'] = $item['qty'] * $item['price'];
$items[] = $item;
} return $items;
}
function add_item
($itemid,$qty=1,$price = FALSE, $info = FALSE){
if(!isset($price)){
$price = _get_price
($itemid,$qty);
}
if(!isset($info)){
$info = _get_info
($itemid);
}
if(!empty($this->itemqtys[$itemid])&&
$this->itemqtys[$itemid] > 0 ){
$this->itemqtys[$itemid] = $qty + $this->itemqtys[$itemid];
$this->_update_total
();
}
else {
$this->items[]=$itemid;
$this->itemqtys[$itemid] = $qty;
$this->itemprices[$itemid] = $price;
$this->iteminfo[$itemid] = $info;
}
$this->_update_total
();
}
function edit_item
($itemid,$qty){
if($qty < 1) {
$this->del_item($itemid);
}
else {
$this->itemqtys[$itemid] = $qty;
$this->itemprices[$itemid] = _get_price
($itemid,$qty);
}
$this->_update_total
();
}
function del_item
($itemid){
$ti = array();
$this->itemqtys[$itemid] = 0;
foreach($this->items as $item){
if($item != $itemid){
$ti[] = $item;
}
}
$this->items = $ti;
$this->_update_total
();
}
function empty_cart
(){
$this->total = 0;
$this->itemcount = 0;
$this->items = array();
$this->itemprices = array();
$this->itemqtys = array();
$this->iteminfo = array();
}
function _update_total
(){
$this->itemcount = 0;
$this->total = 0;
if(sizeof($this->items > 0)){
foreach($this->items as $item) {
$this->total = $this->total + ($this->itemprices[$item] * $this->itemqtys[$item]);
$this->itemcount++;
}
}
}
}
?>
add_to_cart.php
Code (php):
<?php
require_once '_class_cart.php';
if(!isset($_SESSION)){ session_start(); }
$products=array(
0=>array( "id"=>0, "info"=>'Proizvod 0', "price"=>1000),
1=>array( "id"=>1, "info"=>'Proizvod 1', "price"=>1100),
2=>array ("id"=>2, "info"=>'Proizvod 2', "price"=>1200),
3=>array( "id"=>3, "info"=>'Proizvod 3', "price"=>1300),
4=>array( "id"=>4, "info"=>'Proizvod 4', "price"=>1400)
);
$cart=0;
$itemsIn=null;
$uri=$_SERVER['REQUEST_URI'];
define("currency", 'RSD');
if(isset($_SESSION)){
$cart=&$_SESSION['cartItems'];
if(!is_object($cart)) $cart = new korpica
();
# Vreme koliko će dugo korpica
# držati proizvode
# Sada kako je, 1800 sekundi.
if(!isset($_SESSION['cTDstr'])) {
if($cart->itemcount != 0)
$_SESSION['cTDstr'] = time();
}
elseif(time() - $_SESSION['cTDstr'] > 1800){
if($cart->itemcount > 0){
$cart->empty_cart();
usleep(654321);
}
$_SESSION['cTDstr'] = time();
}
}
if(isset($_POST['add'])){
$product = $products[$_POST['id']];
$cart->add_item($product['id'],$_POST['qty'],$product['price'],$product['info']);
header('Location:'.$uri);
}
if(isset($_POST['remove'])){
$rid = intval($_POST['id']);
$cart->del_item($rid);
usleep(000333);
header('Location:'.$uri);
}
if($cart->itemcount > 0){
foreach($cart->get_contents() as $item){
$itemInfo=$item['info'];
$itemQty=$item['qty'];
$itemPrice=$item['price'];
$itemSubtotal=$item['subtotal'];
$itemTotal = $cart->total;
$itemsIn.='<div class="_cart_details">'."\n";
$itemsIn.='<form method="post" action="#">'."\n".
'<input type="hidden" name="id" value="'.$item['id'].'">'."\n".
'<button type="submit" value="remove" name="remove" title="Ukloni">x</button>'."\n".'</form>'."\n\n";
$itemsIn.='<p class="_info">'.$itemInfo.'</p>'."\n";
$itemsIn.='<p class="_price"> Cena <b>'.number_format($itemPrice,2,'.',',').'</b> '. currency
.'</p>'."\n";
$itemsIn.='<p class="_qty"> Komada <b class="Blue">'.$itemQty.'</b></p>'."\n";
$itemsIn.='<p class="_subtotal"> Ukupno <b>'.number_format($itemSubtotal,2,'.',',').'</b> '. currency
.'</p></div>'."\n";
}
$itemsIn.='<div class="clear"></div><hr /><div class="total_complete_order">'."\n";
$itemsIn.='<p> Ukupna cena <b title="ukupna cena">
'.number_format($itemTotal,2,'.',',').'</b> '. currency
.'</p>'."\n";
$itemsIn.='<form method="post" action="#">'."\n".
'<button name="doCartOrder" value="doCartOrder" type="submit" title="Obavi porudžbinu">
Obavi Porudžbinu</button>'."\n".
'</form></div>'."\n";
} else{ $itemsIn=''; }
$productPerSe='<div class="cartbox">'."\n";
foreach($products as $k=>$d){
$productPerSe.='<div class="buttonTop">'."\n".
'<form method="post" action="#">'."\n".
'<input type="hidden" name="id" value="'.$products[$k]['id'].'"/>'."\n".
'<input type="hidden" name="qty" value="1">'."\n".
'<button value="add" name="add" type="submit">Dodaj u korpu</button>'."\n".
'</form>'."\n".
'<p> Naziv: '.$products[$k]['info'].'</p>'."\n".
'<p> Cena: '.number_format($products[$k]['price'],2,'.',',').' '.currency
.'</p>'."\n".
'</div>'."\n";
}
$productPerSe.='</div>'."\n";
$clear='<div class="clear"></div><hr />';
?>
<!DOCTYPE html>
<html lang="en">
<head><meta charset=utf-8>
<title>Korpica - Demo</title>
<style type="text/css">
div.clear {float:none;clear:both;}
div.buttonTop, div._cart_details {display:inline;width:180px;float:left;}
div.total_complete_order {display:inline;float:left;}</style>
</head>
<body>
<?php echo $productPerSe.$clear.$itemsIn; ?>
</body>
</html>
<?php
/*
# Ubij sesiju i korpu nakon uspešno obavljene porudžbine
if($cart->itemcount > 0){
$cart->empty_cart();
$_SESSION['cartItems']=array(null);
unset($_SESSION['cartItems']);
session_unset();
session_destroy();
session_write_close();
} header('Location:'.$_SERVER['REQUEST_URI']);
*/ ?>
about:networking