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 :

panier en session avec plusieurs option par article [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 60
    Points : 42
    Points
    42
    Par défaut panier en session avec plusieurs option par article
    Bonjour ... j'ai un petit soucis (je suis au bon endroit !!! )

    Voila voila j'avais un panier ou je pouvais avoir parmi les articles certains avec une option possible et je souhaite le faire évoluer afin que les articles puissent avoir plusieurs options (de 0 à xxx)
    Pour l'instant ça marche niquel pour l'affichage , mais ça pose des problèmes quand je veux faire des opérations dessus (augmenter,diminuer ou supprimer des articles )

    Je pense que cela vient de mon système d'ajout des articles à l'origine, voici le code d'ajout
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
     
    <?php
    /*
     * Traitement ajout dans panier d'un article provenant de la boutique
     */
    session_start();
    include('../modele/articleCommande.php');
    //include('includes/header.php');
    $idarticle=intval($_POST['id']);
    $quantite=intval($_POST['Quantite_produit']);//ajoute la quantite preremplie dans le select
    if(isset($_POST['nbreOption']))
    {
        $nbreOption=intval($_POST['nbreOption']);
        for($i=1;$i<=$nbreOption;$i++)
        {
            $j=$i-1;
            $option[$j]=$_POST['option_produit'.$i]; //ajoute l'id de l'option
        }
    }    
    //else{$option='';}
     
    //$option='';
     
     
    //echo $idarticle.'coucou'.$option.'coucou'.$quantite;
    //creation d'un nouvel objet inserer  en fin de panier
    if(is_numeric($quantite) && $quantite > 0)
    {
        $objet_article=new articleCommande($idarticle,$option,$quantite);
        $article_panier=serialize($objet_article);
     
        $lignePanier=sizeof($_SESSION['panier']);
        $_SESSION['panier'][$lignePanier]=$article_panier;
     
        header("location:../panier.php?p");
    }
    else
    {
        if($quantite==0){echo '<script>alert("la quantit\351 indiqu\351e est nulle");window.history.go(-1);</script>';}
        else if($quantite==''){echo '<script>alert("vous avez oubli\351 d\'indiquer la quantit\351 souhait\351e");window.history.go(-1);</script>';}
        else if(!is_numeric($quantite)){echo '<script>alert("la quantit\351 indiqu\351e n\'est pas normalis\351e");window.history.go(-1);</script>';}
        else{echo '<script>window.history.go(-1);</script>';}
    }
     
    ?>
    Comme vous pourrez le voir je marche avec des sessions et des infos serializer (à l'origine il y avait un id, une option possible , et une quantité ) la je souhaite que l'option corresponde à un tableau contenant les différentes id des options ...

    Si vous avez une idée du chose qui me fait perdre mes cheveux n'hésitez pas !!!

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    927
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 927
    Points : 2 113
    Points
    2 113
    Par défaut
    Bonjour,

    Est-ce que le problème ne se présenterait pas uniquement après avoir fait des suppressions ? Je me demande si vous gérez bien les indices des articles dans le tableau du panier.

    Quel est votre code qui modifie le panier ?
    Je ne vois rien d'anormal dans votre code d'ajout d'article.
    "If you can't teach it then you don't know it."

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 60
    Points : 42
    Points
    42
    Par défaut
    Avant tout merci pour la réponse

    Cela doit certainement être un problème d'indice vous avez raison mais je ne vois pas comment régler ce problème ...
    j'ai tenté deux possibilité pour régler ce soucis (pour la suppression d'un article dans le panier )
    d'abord celle ci , ou j'essaye de supprimer un article par rapport à son rang dans le 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
     
    session_start();
    if(isset($_SESSION['panier']))
        {
            $index=$_GET['index'];
            $tmp=array();        
            foreach($_SESSION['panier'] as $key => $value)
            {
                if ($key != $index)
                {
                    $tmp[] = $value;
                }
            }
            $_SESSION['panier']=$tmp;
            unset($tmp);
         }
    else
    {
       echo'il n\'y a rien a vider';
    }
     
            header("Location:../panier.php?p");
    et l'autre par rapport à l'idee de l'article à supprimer ...
    dans les deux cas ça ne marche pas , soit le système tourne en boucle (avec erreur fatal au bout de 30 seconde, soit il supprime plusieurs article (prix , nom , quantité,...) toutant ne supprimant pas leurs entrèes dans la variable session (bizarre) !!!

    Merci d'avance pour votre aide !!

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    927
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 927
    Points : 2 113
    Points
    2 113
    Par défaut
    Un problème fréquent dans la gestion d'une liste d'éléments, c'est qu'on génère l'index d'un nouvel élément en comptant le nombre d'éléments dans la liste, alors que quand on supprime un élément on ne réactualise pas les indexes des autres éléments.

    Donc on a par exemple le tableau suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(0 => 'zéro', 1 => 'un', 2 => 'deux');
    On supprime l'élément 1 et le tableau devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(0 => 'zéro', 2 => 'deux');
    On rajoute un nouvel élément et on obtient le tableau suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(0 => 'zéro', 2 => 'deux', 2 => 'trois');


    Pour ne pas avoir ce problème, tu peux réactualiser les indexes des éléments restants lorsque tu supprime.
    Ou alors tu peux générer l'index d'un nouvel élément en prenant l'index maximum des éléments existants et non en comptant le nombre d'éléments existants.

    A mon avis ça ira mieux après, n'oublie pas le tag [Résolu] si c'est le cas.

    Salut.
    "If you can't teach it then you don't know it."

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 60
    Points : 42
    Points
    42
    Par défaut
    Merci encore pour cette reponse cela doit etre certainement cela

    Mais en fait j'ai un autre soucis, donc le probleme doit se situer aussi la :
    Quand je fais ajouter panier, cela ajoute puis il y une redirection vers le récapitulatif panier
    Or quand je met des articles normaux dans le panier je peux en mettre autant que je veux, il n'y a pas de soucis ,puis quand j'en met un avec option au premier affichage ça va , puis je ne peux en remettre dans le panier ...

    En gros je déserialize le panier , puis la reserialization se fait mal !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for($i=0;$i<$nbreOption;$i++)
                                        {
                                            $id_option=$cool[$i];
                                            $recuperationDonneeOption=$basePanier->recuperation_donnee_option($id_option);
                                            $chainePanier.=$recuperationDonneeOption['titre_option'].'<br>';
                                            //$cool[$i]=$id_option;
                                        }
    Est ce qu'une fois le tableau lu je dois réinserer les différentes options en tableau ???

    Si vous avez une idée n'hésitez pas !!! Et quoi qu'il en soit merci pour tout

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    927
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 927
    Points : 2 113
    Points
    2 113
    Par défaut
    Je ne comprends pas ce deuxième problème.
    Est-ce que tu as un message d'erreur ?

    En tout cas, la sérialisation/dé sérialisation de ton objet articleCommande doit fonctionner sans problème, qu'il contienne un tableau d'options ou pas.

    Est-ce que ce ne serait pas l'utilisation de l'objet articleCommande qui pose problème ? Je veux dire : peut-être que tu ne tiens pas compte de la différence de structure entre une instance d'articleCommande qui possède des options et une autre qui n'en possède aucune.
    En fait c'est très vague ce que je dis, mais je ne comprends pas exactement ce que tu fais.

    Peut-être que si tu fais des print_r($var) de ton objet articleCommande avant de l'afficher tu verras ce qui cloche.

    Et sinon, est-ce que tu sais mettre tout le code (les parties importantes) ?
    "If you can't teach it then you don't know it."

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 60
    Points : 42
    Points
    42
    Par défaut
    Merci y 'a des chances que ce soit ça aussi . En fait quand il n'y a pas d'option je laisse id_option vide , et quand il y'a une option ou plusieurs $idoption est un tableau. Puis lorsque je deserialize je regarde si $idoption est vide, et si non je l'extraie comme je l'ai indiqué ..


    Par contre pour tout le code ça risque d'être long !!!, mais s'il y a une partie à privilégiée je veux bien te la montrer ... donc n'hésites pas

    Merci encore pour tout

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    927
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 927
    Points : 2 113
    Points
    2 113
    Par défaut
    De rien.

    Tu pourrais essayer d'utiliser un tableau vide pour gérer le cas où tu n'as aucune option et un tableau à un seul élément pour celui où tu as une seule option. Peut-être qu'en faisant cela, tu te rendras compte d'un problème, ou bien que le problème sera réglé par lui même.


    Tu peux toujours mettre le code de la page où ça ne fait pas ce que tu souhaite (la page vers laquelle tu redirige après avoir modifier le panier, si j'ai bien suivis).

    Et est-ce que tu as des erreurs ou bien c'est juste que ça ne fait pas ce que tu souhaite ?


    Ah oui, et ça peut être intéressant que tu poste la structure de ta classe articleCommande et si tu as une classe Panier et Commande aussi.

    Je manque d'information là. Si tu peux régler tous les problèmes dont on a déjà parlé et réexaminer ton code (comme si c'était une nouvelle erreur), tu trouveras peut-être.
    "If you can't teach it then you don't know it."

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 60
    Points : 42
    Points
    42
    Par défaut
    Merci encore ,

    je te mets ma classe articleCommande

    et je refais ma page panier je te tiens au courant plus tard si ça marche

    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
     
    <?php
    class articleCommande
    {
        private $idarticle;
        private $idoption;
        private $quantite;
        //private $prixUnitaiteTTCfinal;
     
     
     
        public function articleCommande($ida,$ido,$qu)
        {
            $this->idarticle=$ida;
            $this->idoption=$ido;
            $this->quantite=$qu;
            //$this->prixUnitaiteTTCfinal=$putf;
     
     
        }
     
        public function getIdarticle(){return $this->idarticle;}
        public function getIdoption(){return $this->idoption;}
        public function getQuantite(){return $this->quantite;}
        //public function getPrixUnitaireFinal(){return $this->prixUnitaiteTTCfinal;}
     
    }
    ?>
    Merci encore et a plus tard

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 60
    Points : 42
    Points
    42
    Par défaut
    Voila voila ... et c'est la que l'on se dit que l'on a un soucis !!!

    donc j'ai gardé la même classe articleCommande , ainsi que le même systeme ajout panier , par contre j'ai limité l'affichage du panier au minimum ... Et je ne comprends pas trop les erreurs ( ça tourne en boucle !!!)

    voici le code du panier au minimum
    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
    37
    38
    39
    40
    41
    42
    43
    44
     
    <?php
    session_start();
    include('includes/header.php');
    include('includes/page.php');
    include_once('modele/articleCommande.php'); 
     
     
     
    for($i=0; $i< sizeOf($_SESSION['panier']) ; $i++ )
    {
        $panier=unserialize($_SESSION['panier'][$i]);
        $idarticle=$panier->getIdarticle();
        $cool=$panier->getIdoption();
        $quantite=$panier->getQuantite();
        $nbreOption=count($cool);
     
        echo 'idarticle :'.$idarticle.'<br>Quantite :'.$quantite.'<br>';
        if($nbreOption==1 && $cool[0]!='' && $cool[0]!=0)
        {
             echo $nbreOption.'<br>';
        }
        else if($nbreOption >1)
        {
            $i=0;
            while($i<$nbreOption)
            {
                if($cool[$i]!='')
                {
                    echo $nbreOption.'<br>';
                }
                else{echo 'ssOption<br>';}
                $i++;
            }    
     
        }
        else{echo 'ssOption<br>';}
     
     
     
        $_SESSION['panier'][$i]=serialize($panier); 
    }
     
    ?>
    donc quand il n'y pas d'option
    idarticle :1
    Quantite :1
    ssOption

    une option :
    idarticle :749
    Quantite :1
    1

    Et pas de soucis pour remettre d'autres articles

    et quand il y a 2 options :
    patatra ...
    il y a
    idarticle :697
    Quantite :1
    126
    127
    qui boucle et s'affiche sur toute la page et plante le système ...

    Si vous avez une idée ce serait super cool !!!

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    927
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 927
    Points : 2 113
    Points
    2 113
    Par défaut
    Si tu utilise $j à la place de $i dans ta boucle while :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            $j=0;
            while($j<$nbreOption)
            {
                if($cool[$j]!='')
                {
                    echo $nbreOption.'<br>';
                }
                else{echo 'ssOption<br>';}
                $j++;
            }
    Ca ne fonctionne pas mieux ?
    "If you can't teach it then you don't know it."

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 60
    Points : 42
    Points
    42
    Par défaut
    Pas bête j'avais pas vu que j'utilisais déjà le $i !!!!!!!!!!!!!!!!!!!!

    je relance tout ça et je vous tient au courant si j'avais fait le même type de bourde précédemment !!!

    Merci encore

  13. #13
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    927
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 927
    Points : 2 113
    Points
    2 113
    Par défaut
    Cette petite bourde (qui, en passant, arrive à tout le monde au moins une fois ) doit avoir régler le problème de la boucle. J'attends les questions suivantes s'il y en a. Mais on a bien avancé et j'imagine que tu dois être proche du but.
    "If you can't teach it then you don't know it."

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 60
    Points : 42
    Points
    42
    Par défaut
    Merci carrément goomazio, ça y'est c'est réglé et ça marche !!!!!

    Merci encore pour tout et peut être à bientôt sur developpez !!!!

  15. #15
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    927
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 927
    Points : 2 113
    Points
    2 113
    Par défaut
    Parfait
    "If you can't teach it then you don't know it."

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

Discussions similaires

  1. Switch case avec plusieurs valeurs par cas
    Par Med_be dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 07/04/2011, 13h16
  2. créer un tableau longtable avec plusieurs parties par page
    Par neferou dans le forum Editeurs / Outils
    Réponses: 0
    Dernier message: 04/09/2009, 19h25
  3. Requête complexe avec plusieurs lignes par table
    Par Iwazaru dans le forum Requêtes
    Réponses: 5
    Dernier message: 01/09/2009, 09h46
  4. Une boite avec plusieurs options
    Par Kimado dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 11/11/2008, 22h28

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