Gå til innhold

Databasebehandling & sessions - handlekurv


Anbefalte innlegg

Vet ikke helt hvor lett det blir å forklare problemet.. men uansett, dette er funksjonen som viser hvordan man legger til i handlekurven, og den som viser den:

 

 

Edit: Helvete, hvordan poster man php-kildekode her inne egentlig?

 

function leggTilKurv()
{
$handlekurv = $_SESSION['handlekurv'];
if (!$handlekurv) 
{
	return '<p>Du har ingen gjenstander i <a href="handlekurv.php"> handlekurven</a></p>';
} else {
	//Parser handlekurv session-variabelen
	$varer = explode(',',$handlekurv);
	$s = (count($varer) > 1) ? 's':'';
	return '<p>Du har <strong> '.count($varer). '</strong> ting i <a href="handlekurv.php">handlekurven</a></p>';
}
}

 

 

Og koden som viser handlekurven:

 


function visHandlekurv() 
{
global $db;
   $total = 0;
$handlekurv = $_SESSION['handlekurv'];
if ($handlekurv) {
	$varer = explode(',',$handlekurv);
	$innhold = array();
	foreach ($varer as $vare) {
		$innhold[$vare] = (isset($innhold[$vare])) ? $innhold[$vare] + 1 : 1;
	}
	$utskrift[] = '<form action="handlekurv.php?action=oppdater" method="post" id="handlekurv">';
	$utskrift[] = '<table>';
	$utskrift[] ='<tr><th></th><th>Tittel</th><th>Pris på vare</th><th>Antall</th><th>Totalpris</th>';
	foreach ($innhold as $id=>$qty) {
		$sql = 'SELECT * FROM handlekurv WHERE ID = '.$id;
		$result = $db->query($sql);
		$row = $result->fetch();
		extract($row);
		$utskrift[] = '<tr>';
		$utskrift[] = '<td><a href="handlekurv.php?action=slett&id='.$id.'" class="r">Fjern</a></td>';
		$utskrift[] = '<td><i>'.$Vare.' av '.$Fornavn.'</i></td>';
		$utskrift[] = '<td>'.$Pris.' kr</td>';
		$utskrift[] = '<td><input type="text" name="qty'.$id.'" value="'.$qty.'" size="1" maxlength="3" align=rigth/></td>';
		$utskrift[] = '<td> '.($Pris * $qty).' kr</td>';
		$total += $Pris * $qty;
		$utskrift[] = '</tr>';
	}
	$utskrift[] = '</table>';
	$utskrift[] = '<div><p>Totalpris: <strong>'.$total.'</strong> kr</p>';
	$utskrift[] = '<button type="submit">Oppdater vogn</button>';
	$utskrift[] = '</form></div>';
	$utskrift[] = '<form action="visvarer.php"?action=visvarer" method="post" id="handlekurv">';
	$utskrift[] = '<button type ="submit">Fullfør handel</button>';
} else {
	$utskrift[] = '<p>Handlekurven din er tom.</p>';
}
return join('',$utskrift);
}

 

 

Problemet mitt er da... jeg skal nå håndtere de verdiene som er lagt til i handlekurven for å så laste opp de verdiene i en egen tabell. Hva vil her være den smarteste måten å løse det på? Session-variabelen her er jo kun et ID-tall... har i databasetabellen registrert bøkene som ligger der med et ID-nummer, for å skille mellom de forskjellige. Så hvis jeg typ har lagt til 2 forskjellige bøker, blir da

 print_r($_SESSSION);

lik 1,2 hvis jeg hadde lagt til tre av samme bok, og en av en annen ville jeg da fått 1,1,1,2 f.eks.

 

Noen som har noen ideer til hvordan jeg kan gå fram her?

Endret av Acherontic
Lenke til kommentar
Videoannonse
Annonse

Her er en handelvogn klasse jeg har laget for en liten stund siden, den er ikke optimal og det er mye av løsningen osm ikke synes utifra å se på denne klassen, men du kan ihvertfall se en mulig løsning på hvordan man kan legge til en vare i en handelkurv og eventuelt oppdatere den (f.eks hvis noen allerede har 5 av vare x i handelvognen og kjøper 9 til)

 

<?php

class cart {

private $sql;
private $qc;
public $owner;

  public function __construct($mysqli_link = "", $query_counter = "") {
   	$this->sql = $mysqli_link;
   	$this->qc = $query_counter;
   	if(!is_array($_SESSION['cart_items'])) { $_SESSION['cart_items'] = array(); }
   }

public function addItem($item, $amount, $single_value, $single_weight){
	if($this->itemIsInCart($item)){
		$this->changeItemAmount($item,$amount,$single_value, $single_weight);
	} else {
		$temp = array("item_id" => $item, "item_amount" => $amount, "item_value" => $single_value, "item_weight" => $single_weight);
		$array = $_SESSION['cart_items'];
		$array[] = $temp;
		$_SESSION['cart_items'] = $array;
	}
}

public function removeItem($product, $amount = 0){
	$i = 0;
	foreach($_SESSION['cart_items'] as $item){
		if($item['item_id'] == $product){	
			if($product[1] == $amount){
				$part1 = array_slice($_SESSION['cart_items'],0,$i);
				$part2 = array_slice($_SESSION['cart_items'],$i+1,count($_SESSION['cart_items']));
				$combined = array_merge($part1, $part2);
				$_SESSION['cart_items'] = $combined;
			} else {
				if($this->itemIsInCart($product)){
					$this->changeItemAmount($product, ($amount-($amount*2)));							   
				}
			}
			return;
		}
		$i++;
	}
}

private function itemIsInCart($needle){
	foreach($_SESSION['cart_items'] as $item){
		if($item['item_id'] == $needle){
			return true;
		}
	}	
	return false;
}

private function changeItemAmount($product, $new_amount, $item_value, $item_weight){
	foreach($_SESSION['cart_items'] as $item){
		if($item['item_id'] == $product){
			$this->removeItem($product);
			$this->addItem($product, ($item['item_amount']+$new_amount), $item_value, $item_weight);
			return;
		}
	}	
}

public function getCartSize(){
	$items = 0;
	foreach($_SESSION['cart_items'] as $item){
		$items = $items + $item['item_amount'];
	}	
	return $items;
}

public function getCartValue(){
	$value = 0;
	foreach($_SESSION['cart_items'] as $item){
		$value = $value + ($item['item_amount'] * $item['item_value']);
	}	
	return $value;
}

public function getCartWeight(){
	$value = 0;
	foreach($_SESSION['cart_items'] as $item){
		$value = $value + ($item['item_amount'] * $item['item_weight']);
	}	
	return $value;
}

public function deleteCart(){
	unset($_SESSION['cart_items']);	
}

public function getCart(){
	return $_SESSION['cart_items'];
}

public function getCartOwner(){
	return $_SESSION['cart_owner'];
}

}
?>

 

for da å se alt som ligger i handlevogen

 

foreach($cartClass->getCart() as cartItems){

echo cartItem['item_id']

}

 

hvor item_id er den id'en som produktet er lagret med i databasen.

item_value er prisen på varen.

 

Og skal du slette alle av en vare på spesifikt ha det som parameter

Eksempel har vi 15x produkt 19912

vil $cartClass->removeItem(19919,14); redusere antall i handlekurv til 1

mens

$cartClass->removeItem(19919,15); slette produktet helt fra handlekurven.

Endret av Danjaco
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...