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

Langage PHP Discussion :

Mise à jour d'un champ dans une session


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 100
    Points : 48
    Points
    48
    Par défaut Mise à jour d'un champ dans une session
    salut tout le monde
    je suis entrain de développer un site web marchand, mais je me bloque dans la partie de mise à jour du champs quantité de ma session, et ceci lorsque j'ajoute une quantité d'un produit qui existe déjà dans ma session.
    voici la fonction d'ajout de mon panier:
    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
    35
    36
     
    function add($ref,$qte)
    {
    //ref et qte sont la référence et la quantité du produit que je désire ajouter à mon panier
    $count = count($_SESSION['commande']);
    $i=0;
         //si la session panier est encore vide
         if($count ==0)
            {
              $_SESSION['commande'][] = array (); 
              $_SESSION['commande'][] = array ("ref" => $ref,"qte" => $qte); 
            }
         else
            {
                        //si le produit existe déjà dans le panier
    		    while ($_SESSION['commande'][$i]['ref'])
    		    {
    		    if ($_SESSION['commande'][$i]['ref']==$ref) 
    		        {
    			    $q1=$_SESSION['commande'][$i]['qte'];
    				$q=intval($q1);
    			    $_SESSION['commande'][$i]['qte']=$q + $qte;
    			    break;
    			    }
    		    else $i=$i++;		
    		    }
     
                     //si le produit n'existe pas dans le panier		
                      $s=$i;
    		  $i=$i--;
     
    		   if ($_SESSION['commande'][$i]['ref']!=$ref) 
    		   $_SESSION['commande'][$s] = array ("ref" => $ref,"qte" => $qte);  
     
    	   }		
    }
    le problème c'est que même si j'ajoute le même produit à mon panier, il n'incrémente pas la valeur quantité du produit déjà existant, mais il le met de nouveau dans le panier! et là j'obtient deux lignes d'un même produit dans le panier.

    est ce que vous pouvez m'aider à résoudre ce problème?? j'espere que j'étais claire
    merci d'avance

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 121
    Points : 136
    Points
    136
    Par défaut
    En fait ta référence, elle sert pas à rien.
    Si tu utilises un identifiant pour identifier un objet c'est justement dans ce cas pour l'utiliser.

    je vais supposé que ref est l'identifiant en question:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if( empty($_SESSION['commande'][$ref]) ) {
    $_SESSION['commande'][$ref] = array ("qte" => $qte);
    } else {
    $_SESSION['commande'][$ref]["qte"] += $qte;
    }

  3. #3
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 100
    Points : 48
    Points
    48
    Par défaut
    merci IGstaff, j'ai essayé ton code mais ça ne marche pas
    j'ai essayé de modifier mon code mais il y a encore des problemes que j'ai pas compris la raison:
    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
     
    function add($ref,$qte)
    {
    $i=0;
         if(empty($_SESSION['commande']))
            {
            $_SESSION['commande'][] = array ("ref" => $ref,"qte" => $qte); 
            }
         else
            {
    	 while ($_SESSION['commande'][$i]['ref']) //line 12
            {
    	if ($_SESSION['commande'][$i]['ref']==$ref) 
    	  {
    	  $_SESSION['commande'][$i]['qte']=$_SESSION['commande'][$i]['qte']+ $qte;
    	  break;
    	  }
    	else 
             {
    	 $i=$i++;
    	 }		
    }
    	if (empty($_SESSION['commande'][$i]['ref']))
    	{
    	$_SESSION['commande'][$i] = array ("ref" => $ref,"qte" => $qte); 
    	}	   
    	}	
    }
    lorsque j'ajoute une seule catégorie de produit, ça marche trés bien, mais si j'ajoute une nouvelle catégorie, il se plante et il m'affiche l'erreur suivante:
    Fatal error: Maximum execution time of 30 seconds exceeded on line 12!!!

  4. #4
    Membre averti Avatar de beejeridou
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2007
    Messages : 280
    Points : 342
    Points
    342
    Par défaut
    Tu dois avoir une boucle infinie^^, ton while

  5. #5
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 100
    Points : 48
    Points
    48
    Par défaut
    oui et comment la corriger?

  6. #6
    Membre averti Avatar de beejeridou
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2007
    Messages : 280
    Points : 342
    Points
    342
    Par défaut
    En faisant en sorte que if $_SESSION['commande'][$i]['ref']==$ref au moins une fois. Pour que tu puisses sortir de ta boucle (avec ton break).
    Dans ton cas, le $i est incrémenté eternellement.

  7. #7
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 100
    Points : 48
    Points
    48
    Par défaut
    j'ai réglé le problème: j'ai changé la boucle while par une boucle for!
    bon c pas un code optimal mais bon ça marche
    merci beaucoup

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 121
    Points : 136
    Points
    136
    Par défaut
    Simple et plus efficace, Voici la fonction que je fais de mon script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function add($ref,$qte) {
    	if( empty($_SESSION['commande'][$ref]) ) {
    		$_SESSION['commande'][$ref] = array("ref" => $ref,"qte" => $qte); 
    	} else {
    		$_SESSION['commande'][$ref]['qte'] += $qte; 
    	}
    }
    Elle fonctionne niquel !
    je l'ai testé et elle fait exactement ce que tu veux.
    Elle créé l'entrée de commande si elle n'existe pas sinon elle ajoute cette valeur.

    J'ai mis ci joint le fichier de test, la fonction y est légèrement différente car il n'y a aucune session d'ouverte donc j'envoie le tableau en paramètre.
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/02/2012, 09h01
  2. [WD14] Mise à jour d'un champ dans une table
    Par forgotten dans le forum WinDev
    Réponses: 2
    Dernier message: 16/03/2011, 10h34
  3. Mise a jour d'un champ dans une base access
    Par FabriceAmex dans le forum IHM
    Réponses: 9
    Dernier message: 10/06/2010, 09h48
  4. Réponses: 0
    Dernier message: 27/01/2010, 18h04

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