IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Problème de boucle (je pense)


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 5
    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 : 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
     
    	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

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    C'est parce que ta nouvelle valeur écrase l'ancienne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $_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.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 5
    Par défaut
    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 : 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
     
    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;
    					}
     
     
     
     
    				}
    			}
     
    		}

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    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.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 5
    Par défaut
    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.

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    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.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 5
    Par défaut
    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.

Discussions similaires

  1. Problème de boucles imbriquées
    Par Gnux dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 09/12/2005, 20h26
  2. [Tableaux] Problème avec boucle
    Par MYster dans le forum Langage
    Réponses: 6
    Dernier message: 11/11/2005, 18h39
  3. Problème de boucle
    Par TheUltimaSephiroth dans le forum C
    Réponses: 8
    Dernier message: 10/10/2005, 13h58
  4. Problème de boucle
    Par Louis-Guillaume Morand dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/09/2005, 09h10
  5. Problème de boucle
    Par basclln dans le forum C++
    Réponses: 19
    Dernier message: 02/04/2005, 09h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo