Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1581 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

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

n°334779
chrono
Ne m'appelez plus Dieu...
Posté le 16-03-2003 à 23:49:35  profilanswer
 

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
mood
Publicité
Posté le 16-03-2003 à 23:49:35  profilanswer
 

n°334798
mrbebert
Posté le 17-03-2003 à 00:33:43  profilanswer
 

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

n°334806
chrono
Ne m'appelez plus Dieu...
Posté le 17-03-2003 à 00:40:42  profilanswer
 

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
n°334811
mrbebert
Posté le 17-03-2003 à 00:57:59  profilanswer
 

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.

n°334814
chrono
Ne m'appelez plus Dieu...
Posté le 17-03-2003 à 01:05:34  profilanswer
 

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)
 

n°334819
mrbebert
Posté le 17-03-2003 à 01:26:19  profilanswer
 

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.

n°334821
chrono
Ne m'appelez plus Dieu...
Posté le 17-03-2003 à 01:37:58  profilanswer
 

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();

n°334822
mrbebert
Posté le 17-03-2003 à 01:53:44  profilanswer
 

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().

n°334823
chrono
Ne m'appelez plus Dieu...
Posté le 17-03-2003 à 02:00:19  profilanswer
 

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:

n°334824
chrono
Ne m'appelez plus Dieu...
Posté le 17-03-2003 à 02:01:10  profilanswer
 

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

mood
Publicité
Posté le 17-03-2003 à 02:01:10  profilanswer
 

n°334825
mrbebert
Posté le 17-03-2003 à 02:02:57  profilanswer
 

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

n°334826
chrono
Ne m'appelez plus Dieu...
Posté le 17-03-2003 à 02:09:23  profilanswer
 

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.?;:,/..? :??:

n°334923
ethernal
Chercheur de vérité...
Posté le 17-03-2003 à 10:47:44  profilanswer
 

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...
n°335210
chrono
Ne m'appelez plus Dieu...
Posté le 17-03-2003 à 13:30:47  profilanswer
 

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

n°335733
mrbebert
Posté le 17-03-2003 à 19:28:47  profilanswer
 

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 :)

n°335995
chrono
Ne m'appelez plus Dieu...
Posté le 18-03-2003 à 01:02:22  profilanswer
 

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...

n°336193
ethernal
Chercheur de vérité...
Posté le 18-03-2003 à 11:37:32  profilanswer
 

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...
n°339423
chrono
Ne m'appelez plus Dieu...
Posté le 21-03-2003 à 09:55:22  profilanswer
 

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
n°339621
chrono
Ne m'appelez plus Dieu...
Posté le 21-03-2003 à 14:05:59  profilanswer
 

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...

n°339623
chrono
Ne m'appelez plus Dieu...
Posté le 21-03-2003 à 14:08:45  profilanswer
 

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...

n°339680
chrono
Ne m'appelez plus Dieu...
Posté le 21-03-2003 à 15:28:53  profilanswer
 

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?

n°339870
chrono
Ne m'appelez plus Dieu...
Posté le 21-03-2003 à 18:17:42  profilanswer
 

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:

n°339923
mrbebert
Posté le 21-03-2003 à 19:18:16  profilanswer
 

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 :??:

n°339982
chrono
Ne m'appelez plus Dieu...
Posté le 21-03-2003 à 20:21:16  profilanswer
 

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
n°340006
mrbebert
Posté le 21-03-2003 à 21:04:33  profilanswer
 

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.

n°340016
chrono
Ne m'appelez plus Dieu...
Posté le 21-03-2003 à 21:23:06  profilanswer
 

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
n°340025
mrbebert
Posté le 21-03-2003 à 21:40:33  profilanswer
 

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.

n°340098
chrono
Ne m'appelez plus Dieu...
Posté le 21-03-2003 à 22:31:22  profilanswer
 

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)

n°340109
mrbebert
Posté le 21-03-2003 à 22:36:48  profilanswer
 

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

n°340122
chrono
Ne m'appelez plus Dieu...
Posté le 21-03-2003 à 22:49:17  profilanswer
 

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
n°340135
mrbebert
Posté le 21-03-2003 à 22:54:43  profilanswer
 

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
n°340187
chrono
Ne m'appelez plus Dieu...
Posté le 21-03-2003 à 23:20:12  profilanswer
 

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>" );
}

n°340204
chrono
Ne m'appelez plus Dieu...
Posté le 21-03-2003 à 23:38:20  profilanswer
 

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..

n°340206
mrbebert
Posté le 21-03-2003 à 23:38:57  profilanswer
 

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
n°340216
chrono
Ne m'appelez plus Dieu...
Posté le 21-03-2003 à 23:52:53  profilanswer
 

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...

n°340226
mrbebert
Posté le 21-03-2003 à 23:59:32  profilanswer
 

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
n°340233
chrono
Ne m'appelez plus Dieu...
Posté le 22-03-2003 à 00:03:52  profilanswer
 

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
n°340237
mrbebert
Posté le 22-03-2003 à 00:06:38  profilanswer
 

"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.

n°340239
chrono
Ne m'appelez plus Dieu...
Posté le 22-03-2003 à 00:10:36  profilanswer
 

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:

n°340243
mrbebert
Posté le 22-03-2003 à 00:16:11  profilanswer
 

:hello:

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
[PHP] mysql / php -> formats de dates[PHP] S.O.S. probleme d'ecriture sur une page
Déterminer l'existence d'un IP en PHP[PHP] rand() ok mais srand() ca sert a quoi ??
Récupérer l'adresse HTTP complète avec une variable serveur ?Problème PHP sur mon site
Recupérer les Cookies actifs ?[PHP] utiliser le mod SSL
[Apache & PHP] Probleme de 'casse' avec mod_rewriterécuperer l'authentification Microsoft Nt en php
Plus de sujets relatifs à : PHP orienté objet. Class Caddie, comment récupérer "tous" les articles


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR