Jag håller på med att skapa en webbshop och vill kunna välja antal av en vara och skicka iväg detta med en submit-knapp..
Jag har ett fält som heter, antal och ett gömt fält som heter PID, alltså produktid. För att få just det antalet av just den produkten.
Detta ska sedan tillfälligt lagras i en session. Väljer jag att lägga till en ny vara ska denna vara samt antalet jag valt av varan också lagras i sessionen.
Jag har provat att lösa det med en vektor i en session men misslyckats.
Här är en klass som jag håller på och bygger för tillfället. Hoppas det hjälper.
<?php
/* Användning:
// tilldela ny instans av varukorgen till variabeln $shop
$shop = new cart();
// lägg till artiklar i varukorgen
$shop -> addItem('artikel_nr', 'artikel_pris', 'antal');
// ta bort artiklar ur varukorgen
$shop -> deleteItem('artikel_nr');
// uppdatera artiklar i varukorgen
$shop -> updateItems('artikel_nr', 'antal');
// visa artiklar i varukorgen
// kort visning:
// visar antal artiklar i varukorgen samt den totala priset
$shop -> showItems('short');
// lång visning
// listar alla artiklar i varukorgen
$shop -> showItems('long');
// visa den totala kostnaden inkl. moms
echo $shop -> showTotal(false);
// visa den totala kostnaden exkl. moms
echo $shop -> showTotal(true);
*/
class cart {
var $total = 0;
var $vat = 0.25;
function addItem($pid, $price, $quantity){
if (!isset($_SESSION['cart'][$pid])){
$_SESSION['cart'][$pid] = array('price' => $price, 'quantity' => $quantity);
$this -> total += ($price * $quantity);
} else {
$_SESSION['cart'][$pid]['quantity'] += $quantity;
$this -> total += ($_SESSION['cart'][$pid]['price'] * $quantity);
}
}
function deleteItem($pid){
$this -> total -= ($_SESSION['cart'][$pid]['price'] * $_SESSION['cart'][$pid]['quantity']);
unset($_SESSION['cart'][$pid]);
}
function updateItems($pid, $quantity){
$this -> total -= $_SESSION['cart'][$pid]['price'] * $_SESSION['cart'][$pid]['quantity'];
$_SESSION['cart'][$pid]['quantity'] = $quantity;
$this -> total += ($_SESSION['cart'][$pid]['price'] * $quantity);
}
function showItems($type){
if($type == 'short'){
echo "Du har <strong>".sizeof($_SESSION['cart'])."</strong> artiklar i varukorgen.<br />
Den totala kostnaden är <strong>".$this -> showTotal(true)."</strong> inklusive moms.";
} else {
foreach ($_SESSION['cart'] as $item => $p){
echo "<tr><td>".$item."</td>";
foreach ($p as $key => $i){
echo "<td>".$key.": ".$i."</td>";
}
echo "</tr>";
}
}
}
function showTotal($v){
if ($v){
return $this -> total * (1 + $this -> vat);
} else {
return $this -> total;
}
}
}
?>
// tilldela ny instans av varukorgen till variabeln $shop
$shop = new cart();
// lägg till artiklar i varukorgen
$shop -> addItem('artikel_nr', 'artikel_pris', 'antal');
EDIT: Alltså, du måste först tilldela variabeln $shop en ny instans av classen. Det gör du på första raden. Sedan för att anropa funktionen som finns i klassen så skriver du $shop->addItem('artikel_nr', 'artikel_pris', 'antal');
Det som står innan -> är med andra ord den klassen du vill anropa, det som står efter är den funktionen inom klassen $shop du vill använda dig av.
Ehrm.. Skulle nån kunna vara vänlig och berätta lite mer om hur man kan använda sig av de här funktionerna?
Jag har fått i uppdrag att skapa en kundkorg för ca 30 varor fördelade på fyra olika sidor. Jag kan ingenting om PHP, började titta lite på exempelkoder igår... :r
När jag lägger en vara i korgen skickas antal, produktID och pris med till en sida där kundkorgen finns och skrivs ut. På den sidan har jag lagt följande kod:
Varan läggs i kundkorgen som den ska och resultatet skrivs ut, helt i sin ordning, men hur får jag i fler varor? Om jag från sidan med varor klickar på en annan vara och lägger till så visas bara det senast ilagda.
Det beror väl på att jag anropar en ny instans av cart först, men om jag tar bort den så får jag givetvis ett felmeddelande som säger att jag inte har skapat någon cart.
Jag behöver någon som kan berätta för mig lite steg-för-steg hur jag ska gå till väga. Jag fattar det mesta som Darrens kod ovan gör. Men att få i flera varor i korgen är knivigast just nu...
Snälla, kan nån förklara för en stackars nolla (som gärna börjar i fel ände när hon ska lära sig något nytt)? :q
En webbshop är annars ett väldigt bra exempel på där man borde skriva sin egen sessionshanterare, då kan man även reservera varor i databasen till dess att sessionen går ut, då man kan sätta upp sin egen garbage collector funktion. http://se.php.net/session-set-save-handler
Gammal tråd men hur gör jag för att enbart plocka ut vissa värden i sessionsarrayen istället för att använda denna som finns i showItems:
foreach ($p as $key => $i){
echo "<td>".$key.": ".$i."</td>";
}
array[??][??]
Typ ??? Eller hur gör man? Vad är det man skall använda för värden? Anledningen till detta är att jag vill där man skriver
ut det skapa ett fält med summa för varor där man beställer fler än 1 st.
Alltså jag skriver ut det så här... har lagt till lite i addCart så det passar mig:
ID, Namn, Antal, á Pris, Pris
Nu skriver den bara ut ID, antal och á Pris
269 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9