Précédent   Forum du club des développeurs et IT Pro > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 09/01/2013, 21h49   #1
over-
Invité de passage
 
Assuka
Inscription : janvier 2010
Messages : 9
Détails du profil
Informations personnelles :
Nom : Assuka

Informations forums :
Inscription : janvier 2010
Messages : 9
Points : 1
Points : 1
Par défaut panier php jcrozier propriété

Bonjour, j'ai pris le panier réalisé et expliqué pour l'intégrer au site de mon travail (un petit projet avecmon patron :p). Tout marche bien, j'ai stylisé le panier etc.. etc... Mais hier, en voulant ajouter une propriété de plus, impossible de l'afficher dans la boucle, elle est vide, pourtant je pense bien avoir fait les choses.

Donc en gros j'ai essayé de rajouter une propriété référence, en copiant/collant/remplaçant tout simplement les lignes qu'il faut. Pourriez-vous m'aider ? Je vous donnerai les lignes de codes selon vos instructions. Cordialement.
over- est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 22h27   #2
DezMax
Membre du Club
 
Avatar de DezMax
 
Homme
Première STI2D SIN(Système d'Information et Numérique)
Inscription : décembre 2012
Messages : 77
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 18
Localisation : France

Informations professionnelles :
Activité : Première STI2D SIN(Système d'Information et Numérique)

Informations forums :
Inscription : décembre 2012
Messages : 77
Points : 59
Points : 59
Je veux tenter de t'aider mais il me faut le code de la page en question
DezMax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 23h01   #3
over-
Invité de passage
 
Assuka
Inscription : janvier 2010
Messages : 9
Détails du profil
Informations personnelles :
Nom : Assuka

Informations forums :
Inscription : janvier 2010
Messages : 9
Points : 1
Points : 1
Par défaut panier php

Salut dezmax et merci pour ta réponse. http://jcrozier.developpez.com/articles/web/panier/. Les codes terminés se trouvent tout en bas de page. Comme les lignes sont assez longue je préfère renvoyer vers la page source ^^. Si tu préfères que je mette les miens ici, pas de sushi ^^.
over- est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 10h40   #4
Celira
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 4 268
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 28
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java
Secteur : Industrie

Informations forums :
Inscription : avril 2007
Messages : 4 268
Points : 8 381
Points : 8 381
Tu veux ajouter une propriété aux articles (en plus de quantité, libellé et prix) c'est bien ça ?
Citation:
Envoyé par over- Voir le message
Si tu préfères que je mette les miens ici, pas de sushi ^^.
ça serait une bonne idée, parce que on peut espérer que le code du tuto fonctionne...
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [CODEINLINE=php][/CODEINLINE]
Celira est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 16h50   #5
over-
Invité de passage
 
Assuka
Inscription : janvier 2010
Messages : 9
Détails du profil
Informations personnelles :
Nom : Assuka

Informations forums :
Inscription : janvier 2010
Messages : 9
Points : 1
Points : 1
Ok, voilà le code du panier :

Code :
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
<form method="post" action="">
<table style="width: 700px">
<div id="div_titre_panier">
</div>
<tr>
<td class="titre_td">Image</td>
<td class="titre_td">Libellé</td>
<td class="titre_td">Quantité</td>
<td class="titre_td">Prix Unitaire</td>
<td class="titre_td">Réferences</td>
<td class="titre_td">Action</td>
</tr>
<?php
if (creationPanier())
	{
	   $nbArticles=count($_SESSION['panier']['libelleProduit']);
	   if ($nbArticles <= 0)
	   echo "<tr><td style=\"border:none;\">Votre panier est vide </ td></tr>";
	   else
	   {
	      for ($i=0 ;$i < $nbArticles ; $i++)
	      {	 
			 echo "<tr style=\"height: 10px;\">";
			 echo "</tr>";
	         echo "<tr style=\"padding-top: 20px;\">";
			 echo "<td style=\"border: none\">".($_SESSION['panier']['imageProduit'][$i])."</td>";
	         echo "<td style=\"border: none\">".htmlspecialchars($_SESSION['panier']['libelleProduit'][$i])."</td>";
?> <td style="border: none; text-align: center;">
<div><a onClick="substract('quantite');"><img src="/images/moins.png" width="25" height="25"></a></div> 
<div><input type="text" name="q[]" value="<?php echo ($_SESSION['panier']['qteProduit'][$i]) ?>" id="quantite" size="2" maxlength="4" onkeypress="return isNumberKey(event);"></div> 
<div><a onClick="add('quantite');" ><img src="/images/plus.png" width="25" height="25"></a></div>  
 
</td> <?php 
	         echo "<td style=\"border: none; text-align: center\">".htmlspecialchars($_SESSION['panier']['prixProduit'][$i])." €</td>";
			  echo "<td style=\"border: none; text-align: center\">".htmlspecialchars($_SESSION['panier']['referencesProduit'][$i])." €</td>";
	         echo "<td style=\"border: none; text-align: center\"><a href=\"".htmlspecialchars("panier?action=suppression&l=".rawurlencode($_SESSION['panier']['libelleProduit'][$i]))."\"><img src=\"/images/corbeille.png\" width=\"20\" height=\"20\"></a></td>";
			 echo "</tr>";
			echo "<tr style=\"border: none; margin-bottom: 20px;\"><td style=\"border: none;\" colspan=\"1\"> </td>";
	      echo "<td colspan=\"4\">";
	      echo "Extension";
	      echo "</td></tr>";
		   echo "<tr style=\"height: 50px;\">";
			 echo "</tr>";
	      }
 
	      echo "<tr><td colspan=\"2\"> </td>";
	      echo "<td colspan=\"3\">";
	      echo "<span style=\"color:#a63232;\">Total de mes articles : ".MontantGlobal();
	      echo " €</span></td></tr>";
	   }
	}
?>
</table>
<div style="margin-top: 20px; position: relative;">
<input type="image" src="/images/refresh.png" value="Rafraichir"/>
<input type="hidden" name="action" value="refresh"/>
 
<a>
<div id="valider_achat">
</div>
</a>
<a>
<div id="continuer_achat">
</div>
</a>
</div>
<div style="height: 40px;">
</div>
</form>
</div>
<?php get_footer(); ?>
 
 
<?php
$erreur = false;
$action = (isset($_POST['action'])? $_POST['action']: (isset($_GET['action'])? $_GET['action']:null
)) ;
if($action !== null)
{
if(!in_array($action,array('ajout', 'suppression', 'refresh')))
$erreur=true;
//récuperation des variables en POST ou GET
$s = $_SESSION['$image_article2'];
$l = (isset($_POST['l'])? $_POST['l']: (isset($_GET['l'])? $_GET['l']:null )) ;
$p = (isset($_POST['pr'])? $_POST['pr']: (isset($_GET['pr'])? $_GET['pr']:null )) ;
$q = (isset($_POST['q'])? $_POST['q']: (isset($_GET['q'])? $_GET['q']:null )) ;
$n = (isset($_POST['n'])? $_POST['n']: (isset($_GET['n'])? $_GET['n']:null )) ;
$ref = (isset($_POST['ref'])? $_POST['ref']: (isset($_GET['ref'])? $_GET['ref']:null )) ;
//Suppression des espaces verticaux
$l = preg_replace('#\v#', '',$l);
//On verifie que $p soit un float
$p = floatval($p);
$n = floatval($n);
//On traite $q qui peut etre un entier simple ou un tableau d'entier
if (is_array($q)){
$QteArticle = array();
$i=0;
foreach ($q as $contenu){
$QteArticle[$i++] = intval($contenu);
}
}
else
$q = intval($q);
}
if (!$erreur){
switch($action){
Case "ajout":
ajouterArticle($s,$l,$q,$p,$n,$ref);
break;
Case "suppression":
supprimerArticle($l);
break;
Case "refresh" :
for ($i = 0 ; $i < count($QteArticle) ; $i++)
{
modifierQTeArticle($_SESSION['panier']['libelleProduit'][$i],round($QteArticle[$i]));
}
header("Location: Panier");
break;
Default:
break;
}
}
 
?>
Et là le code des fonctions du panier :

Code :
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
<?php
//-----------------------------------Création de panier
 
function creationPanier(){
   if (!isset($_SESSION['panier'])){
      $_SESSION['panier'] = array();
	  $_SESSION['panier']['imageProduit'] = array();
      $_SESSION['panier']['libelleProduit'] = array();
      $_SESSION['panier']['qteProduit'] = array();
      $_SESSION['panier']['prixProduit'] = array();
	  $_SESSION['panier']['referencesProduit'] = array();
      $_SESSION['panier']['verrou'] = false;
   }
   return true;
}
 
//----------------------------------- Ajout Article dans le panier
 
function ajouterArticle($imageProduit,$libelleProduit,$qteProduit,$prixProduit,$referencesProduit){
 
   //Si le panier existe
   if (creationPanier() && !isVerrouille())
   {
      //Si le produit existe déjà on ajoute seulement la quantité
      $positionProduit = array_search($libelleProduit,  $_SESSION['panier']['libelleProduit']);
 
      if ($positionProduit !== false)
      {
         $_SESSION['panier']['qteProduit'][$positionProduit] += $qteProduit ;
      }
      else
      {
         //Sinon on ajoute le produit
		 array_push( $_SESSION['panier']['imageProduit'],$imageProduit);
         array_push( $_SESSION['panier']['libelleProduit'],$libelleProduit);
         array_push( $_SESSION['panier']['qteProduit'],$qteProduit);
         array_push( $_SESSION['panier']['prixProduit'],$prixProduit);
		 array_push( $_SESSION['panier']['referencesProduit'],$referencesProduit);
      }
	header("Location: panier");	  
   }
   else
   echo "Un problème est survenu veuillez contacter l'administrateur du site.";
}
 
//----------------------------------- Suppression Article
 
function supprimerArticle($libelleProduit){
   //Si le panier existe
   if (creationPanier() && !isVerrouille())
   {
      //Nous allons passer par un panier temporaire
      $tmp=array();
	  $tmp['imageProduit'] = array();
      $tmp['libelleProduit'] = array();
      $tmp['qteProduit'] = array();
      $tmp['prixProduit'] = array();
	  $tmp['referencesProduit'] = array();
      $tmp['verrou'] = $_SESSION['panier']['verrou'];
 
      for($i = 0; $i < count($_SESSION['panier']['libelleProduit']); $i++)
      {
         if ($_SESSION['panier']['libelleProduit'][$i] !== $libelleProduit)
         {
			array_push( $tmp['imageProduit'],$_SESSION['panier']['imageProduit'][$i]);
            array_push( $tmp['libelleProduit'],$_SESSION['panier']['libelleProduit'][$i]);
            array_push( $tmp['qteProduit'],$_SESSION['panier']['qteProduit'][$i]);
            array_push( $tmp['prixProduit'],$_SESSION['panier']['prixProduit'][$i]);
			array_push( $tmp['referencesProduit'],$_SESSION['panier']['referencesProduit'][$i]);
         }
 
      }
      //On remplace le panier en session par notre panier temporaire à jour
      $_SESSION['panier'] =  $tmp;
      //On efface notre panier temporaire
      unset($tmp);
	  header("Location: Panier");
   }
   else
   echo "Un problème est survenu veuillez contacter l'administrateur du site.";
}
 
//-----------------------------------  Modifier Article
 
function modifierQTeArticle($libelleProduit,$qteProduit){
   //Si le panier éxiste
   if (creationPanier() && !isVerrouille())
   {
      //Si la quantité est positive on modifie sinon on supprime l'article
      if ($qteProduit > 0)
      {
         //Recharche du produit dans le panier
         $positionProduit = array_search($libelleProduit,  $_SESSION['panier']['libelleProduit']);
 
         if ($positionProduit !== false)
         {
            $_SESSION['panier']['qteProduit'][$positionProduit] = $qteProduit ;
         }
      }
      else
      supprimerArticle($libelleProduit);
   }
   else
   echo "Un problème est survenu veuillez contacter l'administrateur du site.";
}
 
//-----------------------------------  Mantant du Panier
 
function MontantGlobal(){
   $total=0;
   for($i = 0; $i < count($_SESSION['panier']['libelleProduit']); $i++)
   {
      $total += $_SESSION['panier']['qteProduit'][$i] * $_SESSION['panier']['prixProduit'][$i];
   }
   return $total;
}
 
//-----------------------------------  Fonctions Utiles
 
function isVerrouille(){
   if (isset($_SESSION['panier']) && $_SESSION['panier']['verrou'])
   return true;
   else
   return false;
}
 
function compterArticles()
{
   if (isset($_SESSION['panier']))
   return count($_SESSION['panier']['libelleProduit']);
   else
   return 0;
 
}
 
function supprimePanier(){
   unset($_SESSION['panier']);
}
?>
Voilà, donc en gros la références n'est pas retourné, mais tout le reste marche, comme si htmlspecialchars($_SESSION['panier']['referencesProduit'][$i]) ne valait rien :/.
over- est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 17h11   #6
Celira
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 4 268
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 28
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java
Secteur : Industrie

Informations forums :
Inscription : avril 2007
Messages : 4 268
Points : 8 381
Points : 8 381
Le code a l'air bien.
Est-ce que tu as bien ajouté ta nouvelle propriété aux liens du catalogue ?
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [CODEINLINE=php][/CODEINLINE]
Celira est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 17h18   #7
over-
Invité de passage
 
Assuka
Inscription : janvier 2010
Messages : 9
Détails du profil
Informations personnelles :
Nom : Assuka

Informations forums :
Inscription : janvier 2010
Messages : 9
Points : 1
Points : 1
Par défaut panier php

Oui, j'ai bien rajouté la variable dans le lien d'ajout du panier, ça me parait complètement fou cette histoire, je sais vraiment pas d'où ça peut venir ^^. J'avais réussi à ajouter une propriété pour l'image, mais là.. nada :/.
over- est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2013, 22h46   #8
Le Néophyte
Nouveau Membre du Club
 
Avatar de Le Néophyte
 
Homme
Développeur débutant...
Inscription : mars 2013
Messages : 31
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France, Morbihan (Bretagne)

Informations professionnelles :
Activité : Développeur débutant...

Informations forums :
Inscription : mars 2013
Messages : 31
Points : 38
Points : 38
Salut, j'ai déjà utilisé ce code...

J'ai essayé de trouvé ta faille mais sans succès...

Le code pour les articles resemble à ceci ?
(J'ai pris un exemple de mon code perso)

Code html :
1
2
<strong>- Veau marengo</strong> <span class="prix">4.50€</span>*<a href="panier.php?action=ajout&amp;l=Veau marengo&amp;q=1&amp;p=4.5" class="ajouter" onclick="window.open(this.href, '', 
'toolbar=no, location=no, directories=no, status=yes, scrollbars=yes, resizable=yes, copyhistory=no, fullscreen,scrollbars'); return false;"><img src="/images/caddie2.png" width="15" height="17" border="0" align="absmiddle" /></a>

C'est peut-être de la que viens le problème ?!
Aussi des fois je devais effacer mes cookies dans le navigateur pour mes test...
Le Néophyte est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2013, 00h11   #9
TERRA126
Membre actif
 
Homme Rémi
Ingénieur développement logiciels
Inscription : juin 2004
Messages : 108
Détails du profil
Informations personnelles :
Nom : Homme Rémi
Localisation : France, Loiret (Centre)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Communication - Médias

Informations forums :
Inscription : juin 2004
Messages : 108
Points : 175
Points : 175
Bonjour,

J'ai regardé un peu le code et le seul truc qui me chiffonne c'est justement le lien d'ajout. On ne voit nul par la référence :/.
panier.php?action=ajout&amp;l=Veau marengo&amp;q=1&amp;p=4.5On a bien le libellé (l), la quantité (q) et le prix (p) mais il n'y a rien qui ressemble à une référence (ref).

De plus tu appelle la méthode de cette façon :
Code php :
1
2
 
ajouterArticle($s,$l,$q,$p,$n,$ref);

Mais ta fonction demande seulement 4 paramètres et la référence est le 4ème. Le paramètre "n" est en trop selon la définition actuelle de la fonction (et n'est d'ailleurs pas non plus présent dans le lien d'ajout )
TERRA126 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2013, 00h30   #10
Le Néophyte
Nouveau Membre du Club
 
Avatar de Le Néophyte
 
Homme
Développeur débutant...
Inscription : mars 2013
Messages : 31
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France, Morbihan (Bretagne)

Informations professionnelles :
Activité : Développeur débutant...

Informations forums :
Inscription : mars 2013
Messages : 31
Points : 38
Points : 38
En fait moi je ne suis pas le demandeur, j'essaie de venir en aide à @over, le code que j'ai mis n'a rien à voir à celui utilisé par @over mais je voudrais justement voir le sien, celui la viens d'un de mes sites !!
Bonne nuit à tous !!
Le Néophyte est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2013, 08h33   #11
TERRA126
Membre actif
 
Homme Rémi
Ingénieur développement logiciels
Inscription : juin 2004
Messages : 108
Détails du profil
Informations personnelles :
Nom : Homme Rémi
Localisation : France, Loiret (Centre)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Communication - Médias

Informations forums :
Inscription : juin 2004
Messages : 108
Points : 175
Points : 175
Oups la boulette , désolé il était tard et je n'avais pas fait le lien entre les pseudos.

Donc si je ne prend que le code de "over" il y a toujours ce problème de nombre de paramètre . L'appel prend 6 paramètre dont "ref" en dernier et la définition de la variables en prend 5 (et non pas 4 comme je l'ai dit précédemment ). La référence ce trouve en 5ème position dans la définition.
TERRA126 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h16.


 
 
 
 
Partenaires

Hébergement Web