PHP orienté objet. Class Caddie, comment récupérer "tous" les articles

PHP orienté objet. Class Caddie, comment récupérer "tous" les articles - PHP - Programmation

Marsh Posté le 16-03-2003 à 23:49:35    

PHP orienté objet.. j'utilise une Class Caddie, mais comment récupérer "tous" les caddies??
 
class Caddie
{ //====================================1
 
var $date_jour;
var $libelle_article;
var $quantite;
var $id_article;
var $article;
 
function Caddie()
{
$this->date_jour = date("d/m/Y" );
$this->libelle_article = $GLOBALS['libelle_article'];
$this->quantite = $GLOBALS['quantite'];
$this->id_article = $GLOBALS['id_article'];
}
 
function ajouter ($id_article, $quantite)
{
$this->article[$id_article] += $quantite;
} Ici j'utilise un tableau mais comment le recupérer? je ne dois pas recupérer un objet?
 
function supprimer ($id_article, $quantite)
{
     if ($this->article[$id_article] > $quantite)
     {
     $this->article[$id_article] -= $quantite;  
     return TRUE;
     }
     else
     {
     return FALSE;
     }
}
 
function afficher()
{
echo "<table width='100%' border='1' bgcolor='#FFEFD5' bordercolorlight='#CD5C5C' bordercolordark='#DC1436'>";
echo "<tr>";
echo "<td align='center' width='30%'><b><i>Date </b></i></td>";
echo "<td align='center' width='10%'><b><i>Quantité </b></i></td>";
echo "<td align='center' width='60%'><b><i>Libellé </b></i></td>";
echo "</tr><tr>";
 
echo "<td align='center' width='30%'><b><i>$this->date_jour</b></i></td>";
echo "<td align='center' width='10%'><b><i>$this->quantite</b></i></td>";
echo "<td align='center' width='60%'><b><i>$this->libelle_article</b></i></td>";
 
echo "</tr>";
echo "</table><br>";
}
 
Page ajouter article.
 
$Panier=new Caddie;
$Panier->ajouter("$id_article", $quantite);
 
/*
$Autre_Panier=new Panier;
$Autre_Panier->ajouter("$id_article", $quantite);

*/ C ou qu'il faut faire ca??
 
echo "<table width='100%' border='1' bgcolor='#FFEFD5' bordercolorlight='#CD5C5C' bordercolordark='#DC1436'><tr><td>";
foreach(get_object_vars($Panier) as $key=>$val)
{
print("<center>$key=$val<BR></center></td><td>" );
}
echo "</td></tr></table><br>";
 
$Panier_serialize=serialize($Panier);
session_register("Panier_serialize" );
 
 
 
Page voir caddie..
$Panier_unserialize=unserialize($Panier_serialize);
$Panier_unserialize->afficher();
 
 
Apparement C ici aussi que je ne comprend pas le mécanisme qu'il manque..


Message édité par chrono le 17-03-2003 à 00:58:38
Reply

Marsh Posté le 16-03-2003 à 23:49:35   

Reply

Marsh Posté le 17-03-2003 à 00:33:43    

Pourquoi "tous" les caddies ? A priori, il n'y en aura qu'un par connexion (par session) ?

Reply

Marsh Posté le 17-03-2003 à 00:40:42    

ben... oui.
mais je veux recupérer tous les articles du caddie et là.. je ne récupère que le dernier..
je ne comprend pas comment terminer le script.. je suis tout embrouillé..


Message édité par chrono le 17-03-2003 à 00:42:11
Reply

Marsh Posté le 17-03-2003 à 00:57:59    

Pour l'affichage, il faut que tu parcours tous le tableau "article".
C'est là que sont stockés les informations. article[n] contient la quantité de l'article n°n commandée.

Reply

Marsh Posté le 17-03-2003 à 01:05:34    

Oui mais la je lis un objet non?
 
Page voir caddie..
$Panier_unserialize=unserialize($Panier_serialize);
$Panier_unserialize->afficher();
 
 
//========================================================
 
 

Il faudrait que je parcour le tableau avant donc.. ici?

 
Page ajouter article.  
 
$Panier=new Caddie;  
$Panier->ajouter("$id_article", $quantite);  
 
echo "<table><tr><td>";  
foreach(get_object_vars($Panier) as $key=>$val)  
{  
print("<center>$key=$val<BR></center></td><td>" );  
}  
echo "</td></tr></table><br>";  
 
$Panier_serialize=serialize($Panier);  
session_register("Panier_serialize" );  
 
 
 
//==========================================================
 
 
je ne comprend pas ca:
 
$Autre_Panier=new Panier;  
$Autre_Panier->ajouter("$id_article", $quantite);  
 
ca ne peux marcher qu'avec deux articles! (je me doute ke non mais bon)
 

Reply

Marsh Posté le 17-03-2003 à 01:26:19    

A priori, unserialize, c'est pour reconstruire un objet sauvegardé (par la méthode serialize()).
Au début de ton script, tu relis l'objet sauvegardé, t'y apporte les modifications (ajout d'éléments, affichage du panier, suppression d'éléments...). Et tu le réenregistre à la fin du script pour ne pas perdre les modifications.
 
Tu ne fais le : $panier = new Panier; que pour créer le panier lorsqu'un client commence sa commande. Ensuite, il ne faut plus créer un panier, mais relire celui qui existe dans la session.

Reply

Marsh Posté le 17-03-2003 à 01:37:58    

mrBebert  
A priori, unserialize, c'est pour reconstruire un objet sauvegardé (par la méthode serialize()).  

 
je sais a quoi ca sert C pour transformer en chaine de caractère pour pouvoir transmettre par la session.
 
 
 
mrBebert  
Tu ne fais le : $panier = new Panier; que pour créer le panier lorsqu'un client commence sa commande. Ensuite, il ne faut plus créer un panier, mais relire celui qui existe dans la session.

ben oui ! :sarcastic: alors  
 
$Autre_Panier=new Panier;  
$Autre_Panier->ajouter("$id_article", $quantite);  
 
ca serai pour prendre la commande d'un autre client..  :sweat:  
 
 
 
Au début de ton script, tu relis l'objet sauvegardé, t'y apporte les modifications (ajout d'éléments, affichage du panier, suppression d'éléments...). Et tu le réenregistre à la fin du script pour ne pas perdre les modifications.  
 
et donc...
il faudrai modifier dans la page d'ajout d'article:
 
$Panier=new Caddie;  
$Panier->ajouter("$id_article", $quantite);  
 
ou dans la page de visualisation de tous le article avec une boucle? :
 
$Panier_unserialize=unserialize($Panier_serialize);  
$Panier_unserialize->afficher();

Reply

Marsh Posté le 17-03-2003 à 01:53:44    

Je vois pas où est le problème :??: Si tu as un autre client, il aura une autre session. Tu as toujours un seul panier par client [:proy]  
En particulier, dans la page d'ajout d'un article, il ne faut pas créer de nouvel objet panier, mais toujours utiliser celui qui est dans la session (donc, celui qui est rattaché au client).
Pour l'affichage, c'est dans la fonction Panier->afficher().

Reply

Marsh Posté le 17-03-2003 à 02:00:19    

C'est ce ke je me suis dit donc G fais un truc du style:
 
function afficher_caddie()
{
echo "$this->article";
}
 
et  
 
function afficher_caddie()
{
echo "$this->article[$id_article]";
}
 
mais dans les deux cas ca ne marchera pas même si je fais une boucle car C du n'importe quoi !! :fou:  :pt1cable:  :cry:  :lol:

Reply

Marsh Posté le 17-03-2003 à 02:01:10    

donc je V me coucher pour me lever tot... :sleep:

Reply

Marsh Posté le 17-03-2003 à 02:01:10   

Reply

Marsh Posté le 17-03-2003 à 02:02:57    

Ben si, avec une boucle (comme le foreach que t'as mis plus haut), ca devrait marcher :??:

Reply

Marsh Posté le 17-03-2003 à 02:09:23    

il fo ke je fasse une boucle sur :
$this->date_jour
$this->quantite
$this->libelle_article
non?
 
 
ca:
echo "$this->article[$id_article]";  
Ca ca va pas me rammener mes données.?;:,/..? :??:

Reply

Marsh Posté le 17-03-2003 à 10:47:44    

Code :
  1. class panier{
  2.   var $date_jour;
  3.   var $article= array();
  4.   //contructeur
  5.   function panier(){
  6.     $this->date_jour= date("d/m/Y" );
  7.   }
  8.  
  9.   function ajouter($id_art, $qt){
  10.     $this->article["$id_art"] += $qt;
  11.   }
  12. ...
  13. }
  14. //récupération du panier
  15. $panier= $HTTP_SESSION_VARS['panier'];
  16. if (!is_object($panier)){
  17.   //création d'un nouveau panier
  18.   $panier= new Panier();
  19. }
  20. $panier->afficher();
  21. $panier->ajouter(1,10);
  22. $panier->afficher();
  23. //sauvegarde du panier
  24. $HTTP_SESSION_VARS['panier']= $panier;


 
normalment, tu n'as plus besoin du serialize/unserialize.


---------------
...oups kernel error...
Reply

Marsh Posté le 17-03-2003 à 13:30:47    

vu com tu l'as écrit, ça me parait un peu + clair.. :heink:  
 
merci je V essayer ce soir  :p

Reply

Marsh Posté le 17-03-2003 à 19:28:47    

Chrono a écrit :

il fo ke je fasse une boucle sur :
$this->date_jour
$this->quantite
$this->libelle_article
non?
 
 
ca:
echo "$this->article[$id_article]";  
Ca ca va pas me rammener mes données.?;:,/..? :??:


D'après ce que j'ai compris, si :)  
$this->article[$id_article] contient le nombre d'exemplaires demandés pour l'article $id_article.
$id_article n'est pas qu'un numéro de case du tableau, mais aussi l'identifiant d'un article.
Par exemple, si le client veut 2 exemplaires de l'article 12 et 7 de l'article 23, ton tableau aura 2 cases :
- $this->article[12] qui contient 2
- $this->article[23] qui contient 7
En PHP, on peut avoir 2 cases, numérotées 12 et 23, sans les valeurs intermédiaires :)

Reply

Marsh Posté le 18-03-2003 à 01:02:22    

et je fais ma boucle comment alors? :??:  
 
combien d'occurences??? :pt1cable:
 
je taf sur 2 choses en même temps et l'objet commence sérieusement à me  :pt1cable:  .....
 
Je comprend pas comment faire ma boucle pour récupérer tous les articles...

Reply

Marsh Posté le 18-03-2003 à 11:37:32    

Chrono a écrit :

vu com tu l'as écrit, ça me parait un peu + clair.. :heink:  
 
merci je V essayer ce soir  :p  


ce que j'essayais de te faire comprendre, c'est que tes attributs sont dans des tableaux, or toi tu essaye de les afficher comme s'ils étaient des simples variables.
tu as au minimum besoin d'un  

Code :
  1. foreach($this->article as $key=>$val){
  2.   echo "$key $val<br>";
  3. }


 ou d'un  

Code :
  1. while(list($key, $val)= each($this->article)){
  2.   echo "$key $val<br>";
  3. }


---------------
...oups kernel error...
Reply

Marsh Posté le 21-03-2003 à 09:55:22    

Fatal error: Unknown(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition caddie of the object you are trying to operate on was loaded _before_ the session was started in /home/www/bonvivre/caddie/voir_caddie.php on line 33
 
 
Apparement G besoin de sérializer...


Message édité par chrono le 21-03-2003 à 09:55:45
Reply

Marsh Posté le 21-03-2003 à 14:05:59    

Je vais pleurer, je n'arrive pas à afficher tous les articles du panier, je ne récupère que le dernier inséré..
 
 
 
MA PAGE PANIER.PHP CONTENANT LA CLASS CADDIE
 
<?
//==============================================================
require("conf.php" );
 
$reqnom=mysql_db_query(genobacces,"SELECT Libelle_Article FROM Articles WHERE Id_Article='$id_article'",$db_link);
$resnom=mysql_fetch_array($reqnom);
$libelle_article=$resnom['Libelle_Article'];
//==============================================================
 
 
class Caddie
{ //====================================1
 
var $date_jour;
var $libelle_article;
var $quantite;
var $id_article;
var $article;
 
function Caddie()
{
$this->date_jour = date("d/m/Y" );
$this->libelle_article = $GLOBALS['libelle_article'];
$this->quantite = $GLOBALS['quantite'];
$this->id_article = $GLOBALS['id_article'];
}
 
function ajouter ($id_article, $quantite)
{
$this->article[$id_article] += $quantite;
}
 
function supprimer ($id_article, $quantite)
{
     if ($this->article[$id_article] > $quantite)
     {
     $this->article[$id_article] -= $quantite;  
     return TRUE;
     }
     else
     {
     return FALSE;
     }
}
 
function afficher_caddie()
{
 
foreach($this->article as $key=>$val)
{
echo "$key $val<br>";
 
echo "<table width='100%' border='1' bgcolor='#FFEFD5' bordercolorlight='#CD5C5C' bordercolordark='#DC1436'>";
echo "<tr>";
echo "<td align='center' width='30%'><b><i>Date </b></i></td>";
echo "<td align='center' width='10%'><b><i>Quantité </b></i></td>";
echo "<td align='center' width='60%'><b><i>Libellé </b></i></td>";
echo "</tr><tr>";
 
echo "<td align='center' width='30%'><b><i>$this->date_jour</b></i></td>";
echo "<td align='center' width='10%'><b><i>$this->quantite</b></i></td>";
echo "<td align='center' width='60%'><b><i>$this->libelle_article</b></i></td>";
 
echo "</tr>";
echo "</table><br>";
 
}
}
} //=====================================1
mysql_close($db_link);
?>
 

MA PAGE CADDIE.PHP QUI PERMET D'AJOUTER UN ARTICLE

 
<?
session_name('PHPSESSID';);
session_start();
 
$nameses=session_name();
$idses=session_id();
$ip=$REMOTE_ADDR;
 
session_register("nameses" );
session_register("idses" );
session_register("ip" );
 
//==============================================================
require("conf.php" );
 
$reqnom=mysql_db_query(genobacces,"SELECT Libelle_Article FROM Articles WHERE Id_Article='$id_article'",$db_link);
$resnom=mysql_fetch_array($reqnom);
$libelle_article=$resnom['Libelle_Article'];
 
//==============================================================
 
if(($id_article=="" ) || ($quantite=="" ))
{
echo"<center><h2>Veuillez saisir la quantité désirée svp. </h2><br>
<a href= 'offre.php'>Retour à la liste des produits. </a></center>";
exit();
}
else
{
require("panier.php" );  // Class Caddie
echo"<center><h4>Class Caddie disponible</h4></center><br><br>";
}
 
// session_register("Id_Utilisateur" );
 
//==========================================================
 
if (!is_object($Caddie))
{
$Panier=new Caddie;
 
$Panier->ajouter("$id_article", $quantite);
 
$Panier->afficher_caddie();
 
$Panier_serialize=serialize($Panier);
 
session_register("Panier_serialize" );
}
 
//==========================================================
 
// on ajoute sur le même objet ou on crée un new ??
 
//if (!is_object($Panier))
//{
//$Autre_Panier= new Panier();
 
 
if(session_is_registered("Panier_serialize" ))
{
echo"OK <br><br>";
 
$Autre_Panier= new Caddie();
 
$Autre_Panier->ajouter("$id_article", $quantite);
 
$Autre_Panier->afficher_caddie();
 
$Autre_Panier_serialize=serialize($Autre_Panier);
 
session_register("Autre_Panier_serialize" );
}
else
{
echo"PAS OK";
}
 
//}
 
//===========================================================
 
echo "<table width='100%' border='1' bgcolor='#FFEFD5' bordercolorlight='#CD5C5C' bordercolordark='#DC1436'><tr><td>";
 
foreach(get_object_vars($Panier) as $key=>$val)
{
print("<center>$key=$val<BR></center></td><td>" );
}
echo "</td></tr></table><br>";
 
//===========================================================
 
echo "<center><br><br><a href='offre.php'><i><b>Ajouter un article au caddie</a><br>
 
<br><a href='del_article.php'>Retirer un article du caddie</a><br>
 
<br><a href='voir_caddie.php'>Voir le contenu du caddie</b></i></a></center><br>";
 
?>
 
 
MA PAGE VOIR_CADDIE.PHP
 
<?
if($PHPSESSID)
{
session_start ($PHPSESSID);
echo"<center><h4>Session ouverte</h4></center><br>";
}
else
{
echo"<center>Pas de session ouverte<br><br>";
echo"<a href='offre.php'>Retour à la liste des articles</a></center>";
exit();
}
 
if ($ip==$REMOTE_ADDR)
{
require("panier.php" );  // Class Caddie
echo"<center><h4>Class Caddie disponible</h4></center><br><br>";
}
else
{
echo"<center><h4>Class Caddie indisponible</h4></center><br><br>";
}
 
//==============================================================
 
$Panier_unserialize=unserialize($Panier_serialize);
$Panier_unserialize->afficher_caddie();
 
 
$Autre_Panier_unserialize=unserialize($Autre_Panier_serialize);
$Autre_Panier_unserialize->afficher_caddie();
 
 
//==============================================================
echo"<center><br><a href='out.php'>Fermer la session</b></i></a></center><br>";
 
?>
 
 
Ce n'est pas de la mauvaise volonté mais je crack la...

Reply

Marsh Posté le 21-03-2003 à 14:08:45    

Chrono a écrit :

Je vais pleurer, je n'arrive pas à afficher tous les articles du panier, je ne récupère que le dernier inséré..
 
 
 
MA PAGE PANIER.PHP CONTENANT LA CLASS CADDIE
 
<?
//==============================================================
require("conf.php" );
 
$reqnom=mysql_db_query(genobacces,"SELECT Libelle_Article FROM Articles WHERE Id_Article='$id_article'",$db_link);
$resnom=mysql_fetch_array($reqnom);
$libelle_article=$resnom['Libelle_Article'];
//==============================================================
 
 
class Caddie
{ //====================================1
 
var $date_jour;
var $libelle_article;
var $quantite;
var $id_article;
var $article;
 
function Caddie()
{
$this->date_jour = date("d/m/Y" );
$this->libelle_article = $GLOBALS['libelle_article'];
$this->quantite = $GLOBALS['quantite'];
$this->id_article = $GLOBALS['id_article'];
}
 
function ajouter ($id_article, $quantite)
{
$this->article[$id_article] += $quantite;
}
 
function supprimer ($id_article, $quantite)
{
     if ($this->article[$id_article] > $quantite)
     {
     $this->article[$id_article] -= $quantite;  
     return TRUE;
     }
     else
     {
     return FALSE;
     }
}
 
function afficher_caddie()
{
 
foreach($this->article as $key=>$val)
{
echo "$key $val<br>";

echo "<table width='100%' border='1' bgcolor='#FFEFD5' bordercolorlight='#CD5C5C' bordercolordark='#DC1436'>";
echo "<tr>";
echo "<td align='center' width='30%'><b><i>Date </b></i></td>";
echo "<td align='center' width='10%'><b><i>Quantité </b></i></td>";
echo "<td align='center' width='60%'><b><i>Libellé </b></i></td>";
echo "</tr><tr>";
 
echo "<td align='center' width='30%'><b><i>$this->date_jour</b></i></td>";
echo "<td align='center' width='10%'><b><i>$this->quantite</b></i></td>";
echo "<td align='center' width='60%'><b><i>$this->libelle_article</b></i></td>";

echo "</tr>";
echo "</table><br>";
 
}
}
} //=====================================1
mysql_close($db_link);
?>
 

MA PAGE CADDIE.PHP QUI PERMET D'AJOUTER UN ARTICLE

 
<?
session_name('PHPSESSID';);
session_start();
 
$nameses=session_name();
$idses=session_id();
$ip=$REMOTE_ADDR;
 
session_register("nameses" );
session_register("idses" );
session_register("ip" );
 
//==============================================================
require("conf.php" );
 
$reqnom=mysql_db_query(genobacces,"SELECT Libelle_Article FROM Articles WHERE Id_Article='$id_article'",$db_link);
$resnom=mysql_fetch_array($reqnom);
$libelle_article=$resnom['Libelle_Article'];
 
//==============================================================
 
if(($id_article=="" ) || ($quantite=="" ))
{
echo"<center><h2>Veuillez saisir la quantité désirée svp. </h2><br>
<a href= 'offre.php'>Retour à la liste des produits. </a></center>";
exit();
}
else
{
require("panier.php" );  // Class Caddie
echo"<center><h4>Class Caddie disponible</h4></center><br><br>";
}
 
// session_register("Id_Utilisateur" );
 
//==========================================================
 
if (!is_object($Caddie))
{
$Panier=new Caddie;
 
$Panier->ajouter("$id_article", $quantite);
 
$Panier->afficher_caddie();
 
$Panier_serialize=serialize($Panier);
 
session_register("Panier_serialize" );
}

//==========================================================
 
// on ajoute sur le même objet ou on crée un new ??
 
//if (!is_object($Panier))
//{
//$Autre_Panier= new Panier();
 
 
if(session_is_registered("Panier_serialize" ))
{
echo"OK <br><br>";
 
$Autre_Panier= new Panier(); // ca marche pas !!
 
$Autre_Panier->ajouter("$id_article", $quantite);
 
$Autre_Panier->afficher_caddie();
 
$Autre_Panier_serialize=serialize($Autre_Panier);
 
session_register("Autre_Panier_serialize" );
}
else
{
echo"PAS OK";
}
 
//}
 
//===========================================================
 
echo "<table width='100%' border='1' bgcolor='#FFEFD5' bordercolorlight='#CD5C5C' bordercolordark='#DC1436'><tr><td>";
 
foreach(get_object_vars($Panier) as $key=>$val)
{
print("<center>$key=$val<BR></center></td><td>" );
}
echo "</td></tr></table><br>";
 
//===========================================================
 
echo "<center><br><br><a href='offre.php'><i><b>Ajouter un article au caddie</a><br>
 
<br><a href='del_article.php'>Retirer un article du caddie</a><br>
 
<br><a href='voir_caddie.php'>Voir le contenu du caddie</b></i></a></center><br>";
 
?>
 
 
MA PAGE VOIR_CADDIE.PHP
 
<?
if($PHPSESSID)
{
session_start ($PHPSESSID);
echo"<center><h4>Session ouverte</h4></center><br>";
}
else
{
echo"<center>Pas de session ouverte<br><br>";
echo"<a href='offre.php'>Retour à la liste des articles</a></center>";
exit();
}
 
if ($ip==$REMOTE_ADDR)
{
require("panier.php" );  // Class Caddie
echo"<center><h4>Class Caddie disponible</h4></center><br><br>";
}
else
{
echo"<center><h4>Class Caddie indisponible</h4></center><br><br>";
}
 
//==============================================================
 
$Panier_unserialize=unserialize($Panier_serialize);
$Panier_unserialize->afficher_caddie();
 
/*
$Autre_Panier_unserialize=unserialize($Autre_Panier_serialize);
$Autre_Panier_unserialize->afficher_caddie();
*/
 
//==============================================================
echo"<center><br><a href='out.php'>Fermer la session</b></i></a></center><br>";
 
?>
 
 
Ce n'est pas de la mauvaise volonté mais je crack la...

Reply

Marsh Posté le 21-03-2003 à 15:28:53    

Je met bien tous les articles d'un même client dans le même objet non?
 
Ou bien il faut que j'en crée un nouveau à chaque fois?

Reply

Marsh Posté le 21-03-2003 à 18:17:42    

J'ai retapé tout le code différement mais rien à faire, je n'affiche que le dernier article inséré au caddie..
 
J'ai essayé de voir les scripts existants mais ils sont énormements longs et je n'arrive pas à trouver ce ke je cherche.
 
Quelqu'un pourait il m'éclairer? :cry:

Reply

Marsh Posté le 21-03-2003 à 19:18:16    

J'ai l'impression que tu en recrée un nouveau à chaque fois que tu veux ajouter un article :??:  
 
Il faut que tu relises dans la session celui qui existe. Je vois pas où tu fais ca :??:

Reply

Marsh Posté le 21-03-2003 à 20:21:16    

dans ma dernière version, je n'utilise qu'un seul objet.
 
- j'ai une page "offre" : je click sur l'article choisi
- je saisi une qté et fais "Ok"
- j'arrive sur la page "Caddie" qui permet de créer l'objet s'il n'existe pas.. et d'ajouter l'article choisi..
 
Cette page appelle la class Caddie (fonction afficher article choisi et ajouter..)
Toujours sur cette page, G le choix d'ajouter un article ou bien visualiser le caddie.
Si j'ajoute, je retombe sur la page "offre"..
 
-Enfin, si je click sur visualiser le caddie, je ne vois que le dernier article inséré.
 
 
 
Ma page caddie..
if (!is_object($Caddie))
{
$Panier=new Caddie;
echo"<center><h4>Le Caddie est bien instancié</h4></center><br><br>";
}
 
$Panier->ajouter("$id_article", $quantite);
 
$Panier->afficher_caddie();
 
$Panier_serialize=serialize($Panier);
 
session_register("Panier_serialize" );
C pas bon ca??


Message édité par chrono le 21-03-2003 à 20:22:07
Reply

Marsh Posté le 21-03-2003 à 21:04:33    

Si tu fais :
$Panier_serialize=serialize($Panier);
session_register("Panier_serialize" );
 
je pense qu'il devrait y avoir quelque part un truc du genre :
$Panier = unserialise($Panier_serialize);
 
Pour en être sur, mets un :
echo "Creation d'un nouvel objet";
dans la partie :
if (!is_object($Caddie))  
{
...
}
pour voir ce que fais le script, s'il recrée un nouvel objet ou pas.

Reply

Marsh Posté le 21-03-2003 à 21:23:06    

La page qui permet la visualisation (voir_caddie.php)
 
 
session_start ($PHPSESSID);
require("panier.php" );  // Class Caddie
 
$Panier_unserialize=unserialize($Panier_serialize);
 
$Panier_unserialize->afficher_caddie();
 
 
La fonction afficher_caddie (panier.php : class caddie)
 
function afficher_caddie()
{
foreach($this->article as $key=>$val)
{
echo "$key $val<br>";
 
echo "$this->date_jour";
echo "$this->quantite";
echo "$this->libelle_article";
}
}
 
et ca marche pas... donc ca viens peut être de la fonction ajouter qui écraserai l'ancien article non?
 
Page Caddie.php
 
if (!is_object($Caddie))
{
$Panier=new Caddie;
}
 
$Panier->ajouter("$id_article", $quantite);
 
$Panier_serialize=serialize($Panier);
 
session_register("Panier_serialize" );
 
 
Page Panier.php : class Caddie..
 
function ajouter ($id_article, $quantite)
{
$this->article[$id_article] += $quantite;
}


Message édité par chrono le 21-03-2003 à 21:25:39
Reply

Marsh Posté le 21-03-2003 à 21:40:33    

Ce que je vois, c'est que dans la page Caddie.php, tu crées un nouvel objet [:proy]  
Mets des echo "" partout pour voir où il va et où il ne va pas.

Reply

Marsh Posté le 21-03-2003 à 22:31:22    

Bon G réussi en partie...
 
Je n'arrive qu'a voir $key et $val..
 
soit id_article et quantité avec dans la fonction visualiser_article:
 
foreach($this->article as $key=>$val)

Reply

Marsh Posté le 21-03-2003 à 22:36:48    

C'est bien ce que tu voulais, non :??:  
Tu arrives à avoir plusieurs articles ?

Reply

Marsh Posté le 21-03-2003 à 22:49:17    

oui mais comment avoir le detail...
cad..
 
function afficher_caddie()
{
 
//foreach(get_object_vars($this) as $key=>$val)Marche pas ca..
 
foreach($this->article as $key=>$val)
{
echo "$key $val<br>";
 
echo"$this->article[$key]"; // ok
echo"$this->article[$val]"; // ok
 
echo "<table width='100%' border='1' bgcolor='#FFEFD5' bordercolorlight='#CD5C5C' bordercolordark='#DC1436'>";
echo "<tr>";
echo "<td align='center' width='30%'><b><i>Date </b></i></td>";
echo "<td align='center' width='10%'><b><i>Quantité </b></i></td>";
echo "<td align='center' width='60%'><b><i>Libellé </b></i></td>";
echo "</tr><tr>";
 
echo "<td align='center' width='30%'><b><i>$this->date_jour</b></i></td>";
echo "<td align='center' width='10%'><b><i>$this->quantite</b></i></td>";
echo "<td align='center' width='60%'><b><i>$this->libelle_article</b></i></td>";

 
// ca ca marche pas...
 
echo "</tr>";
echo "</table><br>";
}
}


Message édité par chrono le 21-03-2003 à 22:50:08
Reply

Marsh Posté le 21-03-2003 à 22:54:43    

non, quand tu fais foreach($this->article as $key=>$val), ca suffit pour parcourir tout le tableau. $key, c'est l'indice du tableau (ici, le produit), $val le contenu (ici, le nombre de produits demandés)
 
Donc :
echo "pour le produit $key, il y a $val unités commandées<br>";
c'est pareil que :
echo "pour le produit $key, il y a $this->article[$key] unités commandées<br>";
(dans la boucle foreach())
 
Le foreach() parcourt tous les couples indice/valeur du tableau.


Message édité par mrbebert le 21-03-2003 à 23:00:18
Reply

Marsh Posté le 21-03-2003 à 23:20:12    

Pkoi avec ca je n'arrive pas à avoir ce ke je veux?
 
Ca m'affiche N fois le premier article ajouté au caddie..
 
foreach(get_object_vars($this) as $key=>$val)
{
print("<center>$key=$val<BR></center></td><td>" );
}

Reply

Marsh Posté le 21-03-2003 à 23:38:20    

Ma fonction "ajouter" est elle complète?
 
function ajouter ($id_article, $quantite)
{
$this->article[$id_article] += $quantite;
}
 
pour afficher :
 
function afficher_caddie()
{
 
foreach($this->article as $key=>$val)
{
echo "$key $val<br>";
}
 
echo "<table width='100%' border='1' bgcolor='#FFEFD5' bordercolorlight='#CD5C5C' bordercolordark='#DC1436'>";
echo "<tr>";
echo "<td align='center' width='30%'><b><i>Date </b></i></td>";
echo "<td align='center' width='10%'><b><i>Quantité </b></i></td>";
echo "<td align='center' width='60%'><b><i>Libellé </b></i></td>";
echo "</tr><tr>";
 
foreach($this->date_jour as $key3=>$val3)
{
echo "$key3 $val3<br>";
//echo "<td align='center' width='30%'><b><i>$this->date_jour</b></i></td>";
}
foreach($this->date_jour as $key4=>$val4)
{
echo "$key4 $val4<br>";
//echo "<td align='center' width='10%'><b><i>$this->quantite</b></i></td>";
}
foreach($this->date_jour as $key5=>$val5)
{
echo "$key5 $val5<br>";
//echo "<td align='center' width='60%'><b><i>$this->libelle_article</b></i></td>";
}
echo "</tr>";
echo "</table><br>";
 
}
 
qui ne marche pas d'ailleur..

Reply

Marsh Posté le 21-03-2003 à 23:38:57    

get_object_vars, ca mets toutes les variables de l'objet sous forme de tableau. C'est pas ce que tu veux :??:
 
Pour l'ajout, oui, ca devrait suffire.
 
C'est quoi ce tableau date_jour (que tu parcours 3 fois :pt1cable: ) ???
 
function afficher_caddie()  
{  
   foreach($this->article as $key=>$val)  
   {  
      echo "Le produit $key est commandé en $val exemplaires<br>";  
   }  
}
et puis c'est tout. Tu affineras quand ca marchera.


Message édité par mrbebert le 21-03-2003 à 23:41:38
Reply

Marsh Posté le 21-03-2003 à 23:52:53    

Mais ca marche ca...!!! :pt1cable:  
 
mais ma classe est comme ca:
 
class Caddie
{ //====================================1
 
var $date_jour;
var $libelle_article;
var $quantite;
var $id_article;
var $article;
 
function Caddie()
{
$this->date_jour = date("d/m/Y" );
$this->libelle_article = $GLOBALS['libelle_article'];
$this->quantite = $GLOBALS['quantite'];
$this->id_article = $GLOBALS['id_article'];
}
 
function ajouter ($id_article, $quantite)
{
$this->article[$id_article] += $quantite;
}
 
donc je veux la date et le libelle de l'article correspondant...

Reply

Marsh Posté le 21-03-2003 à 23:59:32    

Elle correspond à quoi cette date :??:  
 
Si tu veux garder la date à laquelle un élément à été ajouté, tu peux utiliser un autre tableau, de la même manière que "article".
Il suffirait de modifier la fonction "ajouter" :  
 
function ajouter ($id_article, $quantite)  
{  
   $this->date_jour[$id_article] = date("d/m/Y" );
   $this->article[$id_article] += $quantite;
}
 
Pour les libellés, tu peux construire le tableau complet dès la construction de l'objet.


Message édité par mrbebert le 22-03-2003 à 00:00:30
Reply

Marsh Posté le 22-03-2003 à 00:03:52    

Ce que tu cherches à me dire, C que dans un objet on ne pas mettre plus qu'un couple de valeurs?
 
je peux pas mettre la date, le libelle, l'id et la quantité???? :pt1cable:  :pt1cable:  
 
Ca fais une semaine que je me casse les couilles pour rien??? :ouch:
 
Bref en utilisant ta méthode, je dois faire 3 tableaux.. ca me convient et ca doit marcher mais je voyais pas cela comme ça...
C  ptêtre pour ça que je voyais rien du tout... :sarcastic:
 
je me doutais quand même qu'il manquait qqch dans la fonction ajouter..


Message édité par chrono le 22-03-2003 à 00:08:07
Reply

Marsh Posté le 22-03-2003 à 00:06:38    

"article", c'est un tableau, pas un objet :heink:  
Mais tu peux mettre plusieurs tableaux (ou autres variables) dans l'objet Caddie.
 
A la rigueur, tu peux faire un tableau d'objets, mais ca me parait plus simple d'utiliser plusieurs tableaux.

Reply

Marsh Posté le 22-03-2003 à 00:10:36    

oui je m'étais mal exprimmé.. je connais la différence entre tableau et objet qd même.. :lol:  
 
Et bien ta méthode est cool.. je te remerci grace à toi je V pouvoir commencer à taffer un peu.. :jap:

Reply

Marsh Posté le 22-03-2003 à 00:16:11    

:hello:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed