Avatar billede kla Nybegynder
25. juli 2004 - 18:55 Der er 3 kommentarer og
1 løsning

Problemer med at genskabe objekter.

Hej

Jeg har været ved at lave en lille indkøbskurv med obj. i PHP, men når jeg gemmer min kurv som en session variabel kan jeg ikke få fat i den igen :-(

ved kald nr. 2 får jeg bare denne besked!

session : basket
Fatal error: Call to a member function on a non-object

Håber nogle har haft et ligende problem og kan fortælle mig hva' jeg gør forkert !

/skylark

<?PHP
  session_start();

  class Basket
  {
    var $basket;
    var $link;

    function Basket()
    {   
    }

    function setLink($link)
    {
      $this->link = $link;
    }

    function getLink()
    {
      return $this->link;
    }
   
    function addItem($id,$number)
    {
      $teaItem = mysql_query("SELECT * FROM tea_club_sorts WHERE id = $id", $this->link);       
      $query_data = fetch_row($teaItem);
     
      $this->basket[] = new Item($query_data[0],$query_data[4],$query_data[1],$number);
           
    }
   
    function removeItem($arrayID)
    {
      unset($this->basket[$arrayID]);    
    }
   
    function getTotalBasketPrice()
    {  $totalPrice = 0;
      for ($i = 0; $i < count($this->basket); $i++)
      {
        $totalPrice += $this->basket[$i]->getTotalPrice();
      }     
     
      return $totalPrice;
    } 
   
     
   
  }
 
  class Item
  {
    var $id,$price,$headLine,$number;
   
    function Item($id,$price,$headLine,$number)
    {
        $this->id = $id;
        $this->price = $price;
        $this->headLine = $headLine;
        $this->number = $number;       
    }   
   
    function getId()
    {
        return $this->id;
    }
   
    function getTotalPrice()
    {
      return ($this->price * $this->number);
    }
   
    function getTitle()
    {
      return $this->headLine;   
    }
   
    function getPrice()
    {
      return $this->price;
    }
  }

  include("mysql_db.php");
 
  $link_id = db_connect();
 
  if (!isset($_SESSION['basket']))
  { $basket = new Basket();
    $_SESSION['basket'] = 'basket';
    echo "ny session : $basket";
  }
  else
  {
    $basket = $_SESSION['basket'];   
    echo "session : $basket";
  }
 
  echo "BasketLink : ". $basket->getLink();
  echo "Ny linkid : $link_id";
 
  $basket->setLink($link_id);
 
  $basket->addItem(2,20);
 
  echo $basket->getTotalBasketPrice();
 
?>
Avatar billede coderdk Praktikant
25. juli 2004 - 21:50 #1
Prøv at smide dine to klasser, Basket og Item ud i f.eks. basket.php og så gør sådan:

<?php

  require_once( "basket.php" );

  session_start();

  include("mysql_db.php");

  $link_id = db_connect();

  if (!isset($_SESSION['basket']))
  { $basket = new Basket();
    $_SESSION['basket'] = &$basket;
    echo "ny session : $basket";
  }
  else
  {
    $basket = &$_SESSION['basket']; 
    echo "session : $basket";
  }

  echo "BasketLink : ". $basket->getLink();
  echo "Ny linkid : $link_id";

  $basket->setLink($link_id);

  $basket->addItem(2,20);

  echo $basket->getTotalBasketPrice();

?>
Avatar billede kla Nybegynder
27. juli 2004 - 10:06 #2
Super ... det eneste jeg skulle gøre var &$basket istedet for 'basket' da jeg satte session variablen og ligeledes da jeg tog den ud af session :-) så hvis du opretter et svar så du kan få dine velfortjente point :-)
/Kenneth
Avatar billede kla Nybegynder
27. juli 2004 - 10:07 #3
Ved du hva' & gør ???
Avatar billede coderdk Praktikant
27. juli 2004 - 11:44 #4
Jeps, & laver en reference til det oprindelige objekt og ikke en kopi som normalt :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester