Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/05/2011, 23h03   #1
Invité de passage
 
Inscription : février 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 5
Points : 0
Points : 0
Par défaut Problème de boucle (je pense)

Bonsoir à tous, je suis actuellement en bts informatique de gestion et pour mes épreuves de fin d'année je dois présenter 5 applications, je suis actuellement en train d'en finir une cependant je me retrouve confronter à un problème dans une de mes fonctions php :

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
 
	function ajoutArticlePanierVirtuel($l,$q,$p,$s,$v,$i)
		{					
		//Si le panier n'existe pas, on le cr�e et on ajoute l'article dedans
			if(!isset($_SESSION['PanierVirtuel'])){
				$_SESSION['PanierVirtuel'][$i]['quantite'] = $q;
				$_SESSION['PanierVirtuel'][$i]['libelle'] = $l;
				$_SESSION['PanierVirtuel'][$i]['support'] = $s;
				$_SESSION['PanierVirtuel'][$i]['version'] = $v;
				$_SESSION['PanierVirtuel'][$i]['prix'] = $p;
			}
			else{
				foreach($_SESSION['PanierVirtuel'] as $key=>$value){
					if($i==$key){
					echo "trouve";
						echo $_SESSION['PanierVirtuel'][$i]['quantite'] += $q;	
						//$_SESSION['PanierVirtuel'][$i]['quantite'] += $q;	
					}
					else{
						$_SESSION['PanierVirtuel'][$i]['quantite'] = $q;
						$_SESSION['PanierVirtuel'][$i]['libelle'] = $l;
						$_SESSION['PanierVirtuel'][$i]['support'] = $s;
						$_SESSION['PanierVirtuel'][$i]['version'] = $v;
						$_SESSION['PanierVirtuel'][$i]['prix'] = $p;
					}
				}
			}
 
		}
En faite mon problème vient du faite que lorsque je veut ajouter un article dans mon panier virtuel y'a pas de problème, alors que si l'article est déja présent dans la session, au lieu d'incrémenter la quantité avec la quantité en paramètre , la quantité en paramètre est carrément remplacer par la nouvelle quantité.

Pour être plus clair, si j'ai une 10 télé en session, si j'en veut en rajouter 5 au lieu d'en avoir 15 en session et bien j'en ai 5.

Si quelqu'un aurais une idée(sa doit venir de ma boucle je pense), cela me retirerais une épine du pied

Merci d'avance
harkness est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2011, 02h25   #2
Membre éclairé
 
Inscription : mai 2008
Messages : 359
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 359
Points : 397
Points : 397
C'est parce que ta nouvelle valeur écrase l'ancienne.
Code :
1
2
3
4
 
if($i==$key){
 echo "trouve";
 echo $_SESSION['PanierVirtuel'][$i]['quantite'] += $q;
$i est bien mis à jour. Tout est correct. Sauf que ta clause else se lance lorsque $i != $key, et c'est le cas si tu as d'autres paniers virtuels dans la session. Dans ce cas, la clause else s'exécute à chaque fois qu'il y a un panier différent, et
Code :
$_SESSION['PanierVirtuel'][$i]['quantite'] = $q; etc...
est exécuté. Par conséquent, la valeur mise à jour dans if est écrasée et $i est insérée comme un nouveau panier..

Tu peux résoudre ce problème en faisant unset sur $_SESSION['PanierVirtuel'] au début si tu n'as besoin que d'un panier par utilisateur.
Sinon, utilise un break à la fin de la clause if (solution inélégante), ou utilise un switch et un break si $i == $key afin que les autres cas ne puissent plus s'exécuter, si tu as besoin d'avoir plusieurs paniers en session.
Tsilefy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2011, 18h12   #3
Invité de passage
 
Inscription : février 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 5
Points : 0
Points : 0
Merci Tsilefy pour ta réponse, j'ai compris ce que tu as expliqué , par contre un switch case ça ne s'utilise pas normalement pour remplacer une boucle if avec plusieurs elseif ?
Etant donné que je n'ai jamais utiliser cette structure, pourrais tu me dire si la boucle est bien contruite?

Merci d'avance

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
 
function ajoutArticlePanierVirtuel($l,$q,$p,$s,$v,$i)
		{					
		//Si le panier n'existe pas, on le cr�e et on ajoute l'article dedans
			if(!isset($_SESSION['PanierVirtuel'])){
				$_SESSION['PanierVirtuel'][$i]['quantite'] = $q;
				$_SESSION['PanierVirtuel'][$i]['libelle'] = $l;
				$_SESSION['PanierVirtuel'][$i]['support'] = $s;
				$_SESSION['PanierVirtuel'][$i]['version'] = $v;
				$_SESSION['PanierVirtuel'][$i]['prix'] = $p;
			}
			else{
				foreach($_SESSION['PanierVirtuel'] as $key=>$value){
 
                                          switch($i){
						case $key:
							$_SESSION['PanierVirtuel'][$i]['quantite'] += $q;
							break;
						default:
							$_SESSION['PanierVirtuel'][$i]['quantite'] = $q;
							$_SESSION['PanierVirtuel'][$i]['libelle'] = $l;
							$_SESSION['PanierVirtuel'][$i]['support'] = $s;
							$_SESSION['PanierVirtuel'][$i]['version'] = $v;
							$_SESSION['PanierVirtuel'][$i]['prix'] = $p;
							break;
					}
 
 
 
 
				}
			}
 
		}
harkness est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2011, 14h45   #4
Membre éclairé
 
Inscription : mai 2008
Messages : 359
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 359
Points : 397
Points : 397
Oui, c'est bon.
Break empêche la boucle de s'exécuter au cas où il y a 2 conditions exactes. Seule la 1ère est exécutée.
Tsilefy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 14h53   #5
Invité de passage
 
Inscription : février 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 5
Points : 0
Points : 0
Merci pour tes indications Tsilefy, pour le moment cela ne fonctionne toujours pas, lorsque je n'ai qu'un seul article dans mon panier, si je rajoute le même, la quantité est bien modifiée, mais quand j'en ai plusieurs dans mon panier, la quantité est remplacée, je vais continuer à creuser.
harkness est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 15h44   #6
Membre éclairé
 
Inscription : mai 2008
Messages : 359
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 359
Points : 397
Points : 397
Je n'ai pas le moyen de faire des tests pour l'instant, mais au lieu de tester l'existence de $_SESSION['PanierVirtuel'] au début, il faudrait directement tester l'existence de $_SESSION['PanierVirtuel'][$i]. S'il n'existe pas, créer l'article, s'il existe il faut le modifier.
Tsilefy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 16h25   #7
Invité de passage
 
Inscription : février 2011
Messages : 5
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 5
Points : 0
Points : 0
J'ai suivi ton conseil Tsilefy, au début de mon script au lieu de tester l'existence de mon panier, j'ai tester l'existence de mon article, si il est présent, je modifie la quantité sinon je l'ajoute au panier, de cette manière ma fonction marche merci encore Tsilefy d'avoir prit le temps de plancher sur mon problème.
harkness est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h28.


 
 
 
 
Partenaires

Hébergement Web