Problemer med session
Jeg er ved at gå ud af mit gode skind!!!Jeg har brugt en del timer på at gemme et objekt i session, og nu har jeg givet op, og lavet det som et array istedet for, men der går et eller andet galt. Jeg har tre filer:
top.php - Definerer toppen af siden og henter objektet fra session og konverterer det til et objekt.
kurv.php definerer klassen kurv og klassen varelinie.
kurvTest.php som tester funktionaliteten af kurv.
Her er de vigtigste kodestumper:
top.php
-------
include_once "kurv.php";
session_start();
$kurv = loadKurv();
kurv.php
--------
include_once("vare.php");
class Varelinie {
var $vareid;
var $antal;
function Varelinie($vareid, $antal) {
$this->vareid = $vareid;
$this->antal = $antal;
}
function getVareTekst() {
$vare = getVareFromDB($this->vareid);
return $vare->varenavn_1;
}
function getPris() {
$vare = getVareFromDB($this->vareid);
return $vare->salgspris;
}
function getVareid() { return $this->vareid; }
function setVareid($vareid) { $this->vareid = $vareid; }
function getAntal() { return $this->antal; }
function setAntal($antal) { $this->antal = $antal; }
} // class Varelinie
class Kurv {
var $varelinier;
var $samletPris;
var $antalVarer;
function Kurv() {
$this->varelinier = array();
$this->samletPris = 0;
$this->antalVarer = 0;
}
function getVarelinier() {
return $this->varelinier;
} // function getVarelinier
function setVarelinier($varelinier) {
$this->varelinier = $varelinier;
} // function getVarelinier
// Finder varelinie med $vareid. Hvis varelinien ikke findes returneres 0
function getVarelinie($vareid) {
$varelinier = $this->getVarelinier();
echo("getVarelinie----Der er følgende varelinier: ".print_r($varelinier)."<br>");
for($i=0;$i<count($varelinier);$i++) {
$varelinie = $varelinier[$i];
if($varelinie->getVareid() == $vareid) return $varelinie;
}
return 0;
} // function getVarelinie
// Tilføjer $antal varer med $vareid. Hvis varen er i kurven i forvejen, så øges antallet med $antal ellers oprettes varelinien.
function addVarelinie($vareid, $antal) {
$varelinier = $this->getVarelinier();
if(array_key_exists($vareid,$varelinier)) {
$varelinie = $varelinier[$vareid];
$nuAntal = $varelinie->getAntal();
$varelinie->setAntal($nuAntal + $antal);
$varelinier[$vareid] = $varelinie;
} else {
echo("Jeg opretter ny varelinie.......vareid: ".$vareid."....antal: ".$antal."<br>");
$varelinie = new Varelinie($vareid, $antal);
$varelinier[$vareid] = $varelinie;
}
$this->antalVarer = $this->calculateAntal();
$this->samletPris = $this->calculatePris();
echo(print_r($varelinier)."----addVarelinie slut<br>");
echo("Samlet pris: ".$this->getSamletPris()."<br>");
echo("Antal varer: ".$this->getAntalVarer()."<br>");
} // function addVarelinie
// Fjerner $antal varer med $vareid. Hvis varen ikke findes gøres ingenting. Hvis antallet af varer < 0, så fjernes varen fra kurven.
function removeVarelinie($vareid, $antal) {
$varelinier = $this->getVarelinier();
if(array_key_exists($vareid,$varelinier)) {
$varelinie = $varelinier[$vareid];
$restAntal = $varelinie->getAntal() - $antal;
if($restAntal > 0) {
$varelinie->setAntal($restAntal);
$varelinier[$vareid] = $varelinie;
} else {
unset($varelinier[$vareid]);
}
}
$this->antalVarer = $this->calculateAntal();
$this->samletPris = $this->calculatePris();
} // function removeVarelinie
// Funktion der sammentæller antallet af varer i kurven
function calculateAntal() {
$antal = 0;
$varelinier = $this->getVarelinier();
while(list($vareid,$varelinie) = each($varelinier)) {
$antal += $varelinie->getAntal();
}
return $antal;
} // function calculateAntal
// Funktion der udregner den samlede pris på varerne i kurven
function calculatePris() {
$pris = 0;
$varelinier = $this->getVarelinier();
while(list($vareid,$varelinie) = each($varelinier)) {
$pris += $varelinie->getPris() * $varelinie->getAntal();
}
} // function calculatePris
// Funktion der henter kurv fra session. Hvis kurven ikke findes oprettes en ny kurv
function loadKurv() {
if(!isset($_SESSION['sessionBasket'])) {
$kurv = new Kurv();
} else {
$basket = $_SESSION['sessionBasket'];
$kurv = new Kurv();
$kurv->setSamletPris($basket['samletPris']);
$kurv->setAntalVarer($basket['antalVarer']);
while(list($nogle,$vardi) = each($basket)) {
if($nogle <> "samletPris" && $nogle <> "antalVarer") {
$kurv->addVarelinie($nogle,$vardi);
}
}
}
return $kurv;
} // function loadKurv
// Funktion der gemmer kurv i session. Kurven laves om til array, da der er problemer
// med at gemme komplekse objekter i session
function saveKurv($kurv) {
$sessionArray['samletPris'] = $kurv->getSamletPris();
$sessionArray['antalVarer'] = $kurv->getAntalVarer();
$varelinier = $kurv->getVarelinier();
echo(print_r($varelinier)."---Varelinier før SAVE!<br>");
for($i=0;$i<count($varelinier);$i++) {
$varelinie = $varelinier[$i];
$sessionArray[$varelinie->getVareid()] = $varelinie->getAntal();
echo("Jeg har nu gemt ".$varelinie->getVareid()." med antal: ".$varelinie->getAntal()."<br>");
}
$_SESSION['sessionBasket'] = $sessionArray;
} // function saveKurv
kurvTest.php
------------
<?php
include_once("top.php");
?>
Dette tester om kurven virker!<br>
<br>
<?php
$varelinier = $kurv->getVarelinier();
for($i=0;$i<count($varelinier);$i++) {
$varelinie = $varelinier[$i];
echo("Der findes en vare med vareid: ".$varelinie->getVareid()."....Antal: ".$varelinie->getAntal()."<br>");
}
$kurv->addVarelinie(186,2);
$kurv->addVarelinie(187,3);
echo("Antal varer: ".$kurv->getAntalVarer()."<br>");
echo("Samlet pris: ".$kurv->getSamletPris()."<br>");
saveKurv($kurv);
$varelinier = $kurv->getVarelinier();
for($i=0;$i<count($varelinier);$i++) {
$varelinie = $varelinier[$i];
echo("Der findes en vare med vareid: ".$varelinie->getVareid()."....Antal: ".$varelinie->getAntal()."<br>");
}
?>
Mit problem er at mine varelinier ikke bliver gemt, de forsvinder allerede imellem de to $kurv->addVarelinie?!?!
Output fra skærm:
-----------------
Dette tester om kurven virker!
Jeg opretter ny varelinie.......vareid: 186....antal: 2
Array ( [186] => varelinie Object ( [vareid] => 186 [antal] => 2 ) ) 1----addVarelinie slut
Samlet pris:
Antal varer: 0
Jeg opretter ny varelinie.......vareid: 187....antal: 3
Array ( [187] => varelinie Object ( [vareid] => 187 [antal] => 3 ) ) 1----addVarelinie slut
Samlet pris:
Antal varer: 0
Antal varer: 0
Samlet pris:
Array ( ) 1---Varelinier før SAVE!
Jeg håber en eller anden kan hjælpe mig...
