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 :

Sessions et système de panier


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Juin 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juin 2018
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Sessions et système de panier
    Bonjour!
    J'essaie de faire un système de panier pour un site, mais je rencontre des problèmes avec les variables de sessions.

    • En gros, avec $_GET je regarde si on veut ajouter/supprimer un article et son id correspondant dans la bdd.
    • Ensuite j'appelle la fonction correspondante qui modifie $_SESSION['panier'].
    • Quand je veux afficher le panier, je regarde les ids et les quantités dans $_SESSION['panier'] et je regarde dans la bdd pour savoir a quel article ça correspond.

    Le problème, c'est que dans la fonction 'plus', $_SESSION['panier'] est bien modifié comme je le souhaite mais juste avant la boucle for avant l'affichage, il n'y a plus rien dans $_SESSION['panier'].
    J'espère que quelqu'un pourra m'aider.
    Voici le code:
    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
    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
     
    <?php
    session_start();
    //connexion à la bdd avec PDO
    if(!isset($_SESSION['panier']))
    {
        $_SESSION['panier'] = array();
    }
    if(isset($_GET['action']))
        {
            switch($_GET['action'])
            {
                case 'plus':
                    if(isset($_GET['id']))
                    {
                        plus(intval($_GET['id'])); //on veut ajouter l'article qui a l'id $_GET['id'] dans la bdd
                    }
                //etc...
            }
        }
    function in_panier($id) //verifie si l'article se trouve déja dans le panier
    {
        $present = -1;
        for($i = 0; $i < sizeof($_SESSION['panier']); $i++)
        {
            if($_SESSION['panier'][$i]['id'] == $id)
            {
                $present = $i;
                break;
            }
        }
        return $present;
    }
     
    function plus($id)
    {
        global $bdd;
     
        if(!is_int($id))
        {
            echo "Une erreur est survenue";
            return;
        }
        $l = in_panier($id);
        if($l != -1)
        {
            $_SESSION['panier'][$l]['qte']++;
            echo 'in_panier';
        }
        else{
            $req = $bdd->prepare('SELECT * FROM plats WHERE id = ?');
            $req->bindValue(1, $id);
            $req->execute();
            while($r = $req->fetch())
            {
                $_SESSION['panier'][] = array(
                    'id' => intval($id),
                    'qte' => 1,
                    'prxtot' => floatval($r['prix']),
                );
            }
            $req->closeCursor();
        }
    }
    function minus($id)
    {
         //code
    }
     
    //On lis l'id et la quantité dans $_SESSION['panier'], et lis dans la bdd à quoi ça correspond et on met ces infos dans $panier 
    $panier = array();
    for($i = 0; $i < sizeof($_SESSION['panier']); $i++)
    {
        $req = $bdd->prepare('SELECT * FROM plats WHERE id = ?');
        if(is_int($_SESSION['panier'][$i]['id']))
        {
            $req->bindValue(1, $_SESSION['panier'][$i]['id']);
            $req->execute();
            while($l = $req->fetch())
            {
                $panier[] = array(
                    'fr' => $l['fr'],
                    'en' => $l['en'],
                    'qte' => $_SESSION['panier'][$i]['qte'],
                    'prxtot' => $_SESSION['panier'][$i]['qte'] * $l['prix'],
                    'id' => $_SESSION['panier'][$i]['id'],
                );
            }
        }
        else{
            echo "Une erreur est survenue.";
        }
    }
    //affichage du contenu du panier
    ?>
    Merci d'avance!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1-
    "...mais juste avant la boucle for avant l'affichage..."
    Et on trouve ça où ?
    Merci d'être plus précise.
    On ne va pas décortiquer tout le code.


    2- conseil : mets des noms de fonction plus explicites et "uniques".

    • plus() -> panier_ajouter_produit()
    • minus() -> panier_supprimer_produit()
    • ...


    3- Tutoriel sur la création d'un panier en PHP
    Dernière modification par Invité ; 16/06/2018 à 13h04.

  3. #3
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Bonjour...
    Je ne comprends pas à quoi sert ta variable $panier ?
    Que donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo '<pre>';
    print_r($_SESSION['panier']);
    echo '</pre>';
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  4. #4
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Juin 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juin 2018
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Et on trouve ça où ?
    Merci d'être plus précise.
    On ne va pas décortiquer tout le code.
    Désolée. En fait $_SESSION['panier'] est modifiée dans la fonction 'plus', mais en dehors de la fonction elle ne l'est plus.
    Si je fait un var_dump($_SESSION['panier']) plus loin dans le code j'ai 'array(0){}'.
    C'est vraiment bizarre, quand je modifie la fonction 'plus' et que quand je fait ma requête sql au lieu d'avoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $_SESSION['panier'][] = array(
       'id' => $id
       //etc
    );
    je met:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $_SESSION['panier'][] = array(
       'id' => 2
       //etc
    $_SESSION['panier'] n'est pas vide après, mais si j'essaie avec 'id' => 1, ça ne marche pas!
    J'ai sûrement fait quelque chose de stupide, mais je trouve vraiment pas.

  5. #5
    Invité
    Invité(e)
    Par défaut
    1- vérifie qu'il n'y a pas d'espace ou passage à la ligne AVANT le 1er <?php
    2- supprime les ?> en toute fin de fichier : ça évite aussi d'avoir des espaces ou passage à la ligne HTML qui peuvent nuire *

    * surtout si ce sont des fichiers inclus dans d'autres.
    ex. : header(), par exemple, ne supporte pas d'affichage HTML AVANT (espaces ou passage à la ligne compris).


    3- Cela dit, tu écris dans le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //affichage du contenu du panier
    Mais rien après...
    On ne sais pas ce qui peut se passer...

    Nous ne sommes ni devin, ni magicien.

    Une SESSION est disponible partout : dans ou en dehors d'une fonction.
    Donc, il manque certainement du code pour comprendre où ça ne va plus...

    4- AS-TU LU le lien que j'ai fourni ??

  6. #6
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Juin 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juin 2018
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Dendrite Voir le message
    Je ne comprends pas à quoi sert ta variable $panier ?
    $panier n'est effectivement pas vraiment utile, puisque je pourrais économiser une requête sql en mettant toutes les informations dans $_SESSION. Merci, je vais changer ça. Mais $_SESSION['panier'] est vide.
    A part $_SESSION['panier'], les variables de session fonctionnent donc je pense avoir fait quelque chose de faux dans la fonction.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par LordWolleh Voir le message
    ...donc je pense avoir fait quelque chose de faux dans la fonction...
    Je confirme...

    Mais tu ne donnes pas les infos nécessaires...

    N.B. essaie de GROUPER tes réponses....

    Citation Envoyé par jreaux62 Voir le message
    AS-TU LU le lien que j'ai fourni ??

    Dernière modification par Invité ; 18/06/2018 à 11h19.

  8. #8
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je vais poser une question bête ; ya-t-il un endroit dans ton code où tu vides le panier ou bien où tu l'initialises à un tableau vide (quelque chose comme $_SESSION['panier'] = [];) ? Si oui, vérifie les conditions autour et si tu ne rentres pas dans cette fonction par erreur. Vérifie aussi que tu n'as pas oublié un index quelque part. Par exemple $_SESSION['panier'] = array('...'); au lieu de $_SESSION['panier'][] = array('...');.
    En gros cherche tous les endroits où tu modifie $_SESSION['panier'] et ajoute un var_dump($_SESSION['panier']); pour vérifier le contenu.
    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)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  9. #9
    Candidat au Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Juin 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juin 2018
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci pour vos réponses, je pense savoir ce qui a causé le problème.
    Dans le switch pour savoir quelle action effectuer, j'avais oublié de mettre des break ce qui a fait que dès qu'un élément était ajouté au panier, il était aussitôt supprimé.
    C'est vraiment bête...

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

Discussions similaires

  1. système de panier sans paiement en ligne
    Par nhynhy dans le forum E-Commerce
    Réponses: 4
    Dernier message: 01/02/2012, 09h32
  2. Gestion des sessions « inter-systèmes »
    Par Aéris22 dans le forum Hibernate
    Réponses: 2
    Dernier message: 29/03/2011, 22h19
  3. [Système] Id session Windows
    Par Néo-Tony dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 25/01/2006, 09h36
  4. Réponses: 16
    Dernier message: 02/12/2005, 10h39
  5. Réponses: 4
    Dernier message: 04/10/2005, 10h47

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