Voila, j'ai ce message d'erreur dans ma classe Panier et j'aimerai corrigé ce bug : Fatal error: Call to a member function on a non-object in /mnt/am2/07/812/00000020/htdocs/test/panier/panier.class.php on line 162

La ligne concernée est en jaune.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
<?php
// *******************************************************
// Classe de panier basique utilisant les sessions
// Elle nécessite la classe Produit pour etre utilisée
// *******************************************************

// le constructeur : créé une session panier
// si elle n'existe pas encore
// le contenu pointe sur le tableau de la session
class Auto_Panier extends Panier {
  function Auto_Panier() {
    @session_start();
    if (!isset($_SESSION['Panier']))
      $_SESSION['Panier']=array();
      $this->contenu = $_SESSION['Panier'];
  }
}

// des constantes pour les messages d'erreur
define("ERR1","Le produit n'a pas été trouvé dans le panier.");
define("ERR2","Méthode de recherche inconnue");

class Panier {

	// les propriétés du produit
	// accessibles uniquement dans la classe
	var $contenu;
	var $total;
	var $quantite;
	var $poidstotal;

	// ajoute un produit dans le panier
	// ou juste une unité s'il existe déjà
	function ajoute($produit) {
          $pos = $this->getPosById($produit->getId());
          if ($pos >= 0)
            $this->contenu[$pos]->ajouteunite();

          else
            $this->contenu[] = $produit;

          $this->actualise();
	}

	// supprime un produit du panier
	function supprime($id) {
          $pos = $this->getPosById($id);
          if ($pos == -1)
            echo ERR1;

          array_splice($this->contenu,$pos,1);
          $this->actualise();
	}
 
	// ajoute une unité d'un produit connaissant son id
 	function ajouteunite($idproduit) {
          $pos = $this->getPosById($idproduit);
          if ($pos == -1)
            echo ERR1;

          $this->contenu[$pos]->ajouteunite();
          $this->actualise();
	}
	
	// supprime une unité d'un produit avec son id
	function supprimeunite($idproduit) {
          $pos = $this->getPosById($idproduit);
          if ($pos == -1)
            echo ERR1;
            
          // s'il n'y a plus d'unité, on efface le produit
          if (!$this->contenu[$pos]->supprimeunite())
            $this->supprime($idproduit);
            
          else $this->actualise();
	}
	

	// permet de rentrer le nombre d'unité(s) souhaitée(s) 
	function recalculer($nb) {
          foreach ($nb as $idproduit => $unites) {
            if (is_numeric($unites)) {
              $pos = $this->getPosById($idproduit);
              if ($pos == -1)
                echo ERR1;

              if ($unites == '0')
                $this->supprime($idproduit);
                
              else
                $this->contenu[$pos]->majunite($unites);

            }
          }
          $this->actualise();
	}

	// vide complètement le panier
	function vide() {
          $this->contenu = array();
          $this->actualise();
	}
	
	// renvoie le contenu du panier à la position $pos
	function getContenu($pos) {
          return $this->contenu[$pos];
	}
	
	// renvoie le total HT du panier
	function getTotal() {
          return round($this->total,2);
	}
	
	// renvoie le total TTC du panier
	function getTotalTTC() {
          return round($this->total * 1.196,2);
	}
	
	// renvoie le poids total (2 chiffres après la virgule)
	function getPoidsTotal() {
          return round($this->poidstotal,2);
	}
	
	// renvoie la quantité de produits différents
	// dans le panier
	function getquantite() {
          return $this->quantite;
	}
 
	// renvoie la position du produit avec son id
	function getPosById($id) {
          return $this->getPos('Id',$id);
	}
	
	// renvoie la position du produit avec son nom
	function getPosByNom($nom) {
          return $this->getPos('Nom',$nom);
	}
	
	// renvoie un produit avec un son id
	function getproduitById($id) {
          $pos = $this->getPos('Id',$id);
          return $this->contenu[$pos]['produit'];
	}
	
	// renvoie un produit d'apres son nom
	function getproduitByNom($nom) {
          $pos = $this->getPos('Nom',$nom);
          return $this->contenu[$pos]['produit'];
	}
	
	// appelle la méthode de la classe produit
	// getId ou getNom pour parcourir le tableau
	// contenu et renvoyer la position de ce produit
	function getPos($by,$value) {
          if (!in_array($by,array('Id','Nom')))
            echo ERR2;

          $pos = -1;
          foreach ($this->contenu as $key => $produit)
            if ($produit->{'get'.$by}() == $value)
              $pos = $key;

          return $pos;
	}
	
	// actualise le panier
	function actualise() {
          $this->total = 0;
          $this->poidstotal = 0;
          $this->quantite = 0;
          foreach ($this->contenu as $produit) {
            $qte = $produit->getquantite();
            $this->total += $produit->getprixHT() * $qte;
            $this->poidstotal += $produit->getPoids() * $qte;
            $this->quantite += 1;
          }
	}
}
?>
Je fonctionne en PHP 4 car mon hébergeur n'a pas l'air d'accepté le php 5