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 :

panier et commande d'achat [MySQL]


Sujet :

PHP & Base de données

  1. #41
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Comme un lien transmet les données en GET, tu rencontre un problème.
    Pour faire simple, le mieux est de tout faire via un formulaire en POST.
    Voilà j'ai fais tout dans un formulaire:
    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
    <form action="achat.php?id_produit=<?php echo $_GET['id_produit']?>" method="post">
    <p> 
    <table width="300"  border="0" align="center" cellpadding="10" cellspacing="0" bgcolor="#eeeeee" class="tableaux">
        <tr>
          <td width="50%""><div align="right">Quantité</div></td>
          <td width="50%"> 
    <select name="quantite" id="quantite">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
    </select></td>
        </tr>
     
         <input name="id_produit" type="hidden" id="pass" value="<?php echo $_GET['id_produit'] ?>"></td>
     
        <tr>
          <td height="34" colspan="2"><div align="center">
              <input type="submit" name="valider" value="valider">
          </div></td>
        </tr>
      </table>
     
    </p>
     
    </form>
    ça devra fonctionner comme ça, non?

  2. #42
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    Problème corrigé

    effectivement xeloch, la faute est dans 'action' du formulaire.

    RunCodePhp, le formulaire modifié correspond t'il a votre proposition de correction de la faute?

    Merci à vous deux

  3. #43
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Pourquoi $_GET['id_produit'] ?

    C'est quoi au juste achat.php ?

    Normalement les choses devraient se dérouler au minimum en 2 temps, dans 2 pages différentes.
    - Une page d'un détail d'un produit dans le but d'ajouter un produit au panier
    - Puis le panier : sa gestion des divers produits qu'il peu contenir. Un panier peu potentiellement contenir plusieurs produits.

    Au départ je pensais que achat.php était l'équivalent du détail du produit.
    Maintenant j'ai l'impression que c'est le panier et sa gestion.


    La façon de nommer tes fichiers porte à confusion (du moins celui là).
    Dans tous les cas il n'y a pas d'achat, pas de commande, pas à ce stade, car on en est au panier seulement.
    S'il y a un processus d'achat, ça donnerait lieu à un autre fichier, une autre action : "acheter" (ou commander, qui est en général plus utilisé).
    C'est juste une remarque.

  4. #44
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    RunCodePhp, le formulaire modifié correspond t'il a votre proposition de correction de la faute?
    Je ne sais pas, je ne sais, plus, c'est un peu l'embrouille.

    J'suis un peu perdu sur ce coup là.
    Faire plusieurs choses en même temps c'est pas évident par moment.

  5. #45
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 25
    Par défaut
    C'est vrai qu'aux premiers abords achat.php correspond au moment de la transaction.
    Alors que la on dirait plus etre au niveau de l'ajout dans le panier non?

  6. #46
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    Pourquoi $_GET['id_produit'] ?
    Celui qui existe dans action du formulaire? j'ai du l'ajouter pour que ça marche, lorsque je ne le mets pas, il y a l'erreur undefined $id_produit après dans la condition .

    C'est quoi au juste achat.php ?
    C'est le panier, ce n'est qu'une page d'essai achat.php. je compte ajouter dans cette page l'affichage du panier après l'ajout du produit, mais j'ai un petit problème; après la validation (l'ajout dans la base), le formulaire reste afficher alors que je veux afficher 'succés d'ajout' et puis affichage du panier.

  7. #47
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 25
    Par défaut
    Citation Envoyé par janyoura Voir le message
    Celui qui existe dans action du formulaire? j'ai du l'ajouter pour que ça marche, lorsque je ne le mets pas, il y a l'erreur undefined $id_produit après dans la condition .
    Je t'ai donné une solution plus propre que de rappeler ta variable à la deuxième page.

    Utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form action = "<?php $_SERVER['PHP_SELF'] ?>" method="post">
    Enfin je peux me tromper mais a moi cela me semble plus propre. (Juste une remarque aussi )

  8. #48
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Je ne sais pas, je ne sais, plus, c'est un peu l'embrouille.

    J'suis un peu perdu sur ce coup là.
    Faire plusieurs choses en même temps c'est pas évident par moment.
    Vous avez raison , moi même ça m'arrive l'embrouille, j'ai des tas de pages à faire en même temps, du fait souvent j'ai des fautes c'est pourquoi je poste au forum.

    (Nous sommes très mal encadrés par le prof malheureusement ou plutôt aucun encadrement ni préparation et en plus de ça le temps du projet est trop limité)

    Merci pour votre attention

  9. #49
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    C'est le panier, ce n'est qu'une page d'essai achat.php. je compte ajouter dans cette page l'affichage du panier après l'ajout du produit, mais j'ai un petit problème; après la validation (l'ajout dans la base), le formulaire reste afficher alors que je veux afficher 'succés d'ajout' et puis affichage du panier.
    Je comprends mieux pourquoi maintenant, du moins j'espère.
    En faite ne voyais pas ce qu'un panier devrait normalement contenir.
    (si tu pouvais le nommer panier.php, ce serait bien plus simple, plus d'amalgame possible).

    Le code actuel prévoit juste d'insérer le et l'unique produit qu'on tente d'ajouter au panier.
    Théoriquement ça ne va pas, car un panier (du moins la gestion du panier) c'est pour afficher/gérer plusieurs produits.
    En somme, on doit percevoir une boucle quelque part.
    Comme c'est la session ($_SESSION['panier']) qui contient le ou les produits, on devrait voir une boucle sur celle-ci.

    C'est aussi en parti pour cela que le formulaire ne devrait pas faire allusion à $_GET['id_produit'], car cette donnée vaut l'identifiant du produit qu'on tente d'insérer, et non les ou les produits composant le panier.


    Pour quelqu'un qui débute, je trouve que tu t'attaque à quelque chose assez compliqué tout de même.
    Normalement il faut bien plus que les bases (Php, Base De Données) pour faire ça, du moins je pense.
    M'enfin.

    Est-ce que les étapes d'avant sont faites, fonctionnelles ?


    Si on tente de récapituler tout ça en se basant sur ce qui ce fait en général :
    - Une page d'accueil contenant un menu : en général une liste de catégories de produits (genre : films d'actions, films de science fictions, etc ...).
    Un clic sur une des catégories mènera à l'étape suivante (ci-dessous).

    - Une page "catégorie" listant tous les produits de la catégorie demandée.
    Les produits sont listés sous forme de liens.
    Chaque lien mène vers le détail du produit.

    - Une page "produit" détaillant le produit demandé.
    Un formulaire (méthode POST) est proposé afin d'ajouter le produit dans le panier.
    (A voir, le formulaire peu inclure le choix de la quantité)

    - Une page "panier" permettant de gérer tous les produits ajoutés au panier.
    3 actions sont possible :
    -- Modification de la quantité de chaque produit (individuellement)
    -- Suppression d'1 des produits
    -- Suppression de la totalité des produits (du panier indirectement).
    Une liste de formulaires (1 formulaire par produit) sera créé pour gérer chaque produit individuellement (boucle sur la session).
    (On peu créer 1 seul et unique formulaire pour l'ensemble des produits, mais c'est plus compliqué à mon sens).

    Est-ce que tu procèdes comme ceci ? (ou plus ou moins)
    Si ce n'est pas le cas, qu'est-ce qui diffère ?

  10. #50
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    Le code actuel prévoit juste d'insérer le et l'unique produit qu'on tente d'ajouter au panier.
    Théoriquement ça ne va pas, car un panier (du moins la gestion du panier) c'est pour afficher/gérer plusieurs produits.
    En somme, on doit percevoir une boucle quelque part.
    Comme c'est la session ($_SESSION['panier']) qui contient le ou les produits, on devrait voir une boucle sur celle-ci.
    oui je veux faire comme ça car un client peut mettre plusieurs produits, mais je ne suis pas encore arrivée à bien manipuler $_SESSION['panier'], je ne sais pas d'ailleurs comment :\

    C'est aussi en parti pour cela que le formulaire ne devrait pas faire allusion à $_GET['id_produit'], car cette donnée vaut l'identifiant du produit qu'on tente d'insérer, et non les ou les produits composant le panier.
    j'ai changé l'action du formulaire par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php $_SERVER['PHP_SELF'] ?>
    cela enlève t'il l’ambiguïté?



    Est-ce que les étapes d'avant sont faites, fonctionnelles ?
    Si ce n'est pas le cas, qu'est-ce qui diffère ?
    - Une page de bienvenue pour l'utilisateur connecté contenant deux liens: lien vers la liste des film et un lien vers la listes des musiques.

    -A la liste des films on trouve un tableau, dans chaque ligne contient le nom du film et ces details, ainsi qu'un lien 'Ajouter au panier' qui dirigera vers panier.php(code de achat.php). (de meme pour le lien liste des musiques)

    enfin, voilà le code que je suis entrain de développer pour l'affichage du 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
    <?php
    if ($type_produit == 'film') //récupère le type à partir du lien ajouter au panier
    	{
    //jointure entre la table 'cd_film' et la table 'panier'
    	$affiche = $bdd->query(
        'SELECT p.quantite quantité_produit, f.titre nom_produit, f.prix prix_produit 
        FROM panier p
        INNER JOIN cd_film f
        ON p.id_produit = f.id_film');
          while($panier = $affiche->fetchALL(PDO::FETCH_ASSOC))
    	  { // affichage de chaque produit, mais ceci me semble faux
    		  foreach($panier as $affichage_panier)
    		  echo $affichage_panier['nom_produit'];?> <br /> <?php
    	  }
    	}
    ?>

  11. #51
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    j'ai oublié de dire que dans la gestion du panier il n'y aura que l'ajout d'un produit et l'affichage du panier ensuite un lien pour la validation du panier (commande), je ne ferai pas comme un vrai site d'achat en ligne (modification d'une quantité ou enlèvement d'un produit du panier)
    Quoi d'autre.. il manque aussi la vérification du stock produit (sa quantité) lors du choix de quantité dans le formulaire

  12. #52
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    -A la liste des films on trouve un tableau, dans chaque ligne contient le nom du film et ces details, ainsi qu'un lien 'Ajouter au panier' qui dirigera vers panier.php(code de achat.php). (de meme pour le lien liste des musiques)
    Alors pour éviter les complications, dans cette page qui contient la liste des film et leur détail, il faudrait non pas créer un lien, mais un formulaire en POST.
    Ceci c'est pour la même raison qu'auparavant : le panier attend que les données soient en POST.
    Si c'est en GET, tu vas avoir le même problème que tout à l'heure.

    Il faudra là aussi rajouter l'id_produit dans un champ caché, et éventuellement la quantité (mettre 1 comme valeur par défaut).

    Pour la session, c'est simple : $_SESSION est un tableau comme tous les autres, ni plus ni moins (c'est un peu faux, mais fonctionnellement c'est pareil).
    Donc une simple boucle foreach() suffit pour lister son contenu.


    Cependant, les produits du paniers sont eux aussi dans la Bdd, et c'est là que les choses se compliquent quand même.
    Faut il se baser uniquement sur ce que contient la Bdd ou uniquement la session ?
    Normalement il faudrait synchroniser les 2, mais c'est compliqué.

    Vu que tu débute, je te conseillerais de ne plus enregistrer la panier dans la Bdd, mais les enregistrer uniquement dans la session, ne serait-ce que dans un 1er temps.
    Synchroniser les 2 c'est vraiment compliqué, car une session à une durée de vie, un temps d'expiration (par défaut 24 minutes).
    Tu vas avoir inévitablement une incohérence entre ce qu'il y aura dans la Bdd et dans la session.
    C'est compliqué, ça va te prendre beaucoup de temps à le faire.
    Te baser uniquement sur la session sera nettement plus simple.
    C'est un conseil, évidemment.

  13. #53
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    C'est compliqué, ça va te prendre beaucoup de temps à le faire.
    Te baser uniquement sur la session sera nettement plus simple.
    C'est un conseil, évidemment.
    Le problème je ne sais pas pourquoi j'ai tendance à comprendre ce qui est compliqué et non le facile!!!!
    Merci pour le conseil, je n'ai plus même le temps de changer la méthode, donc je garderai la gestion avec la base de donnée même s'il'y aura des bugs dans certains cas comme vous m'avez expliqué (je devrai rendre le projet demain et j'ai encore d'autres taches concernant la session, parce que la visite du site et sa manipulation diffère entre un administrateur et un utilisateur)

  14. #54
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    je devrai rendre le projet demain ...

    j'ai oublié de dire que dans la gestion du panier il n'y aura que l'ajout d'un produit et l'affichage du panier ensuite un lien pour la validation du panier
    Wouu, demain
    C'est clair que, quand on a pas le sujet, qu'on ne connait pas le contexte, nous on ne peu que conseiller de faire les choses quelque peu dans les règles de l'art (si on peu dire).

    Et respecte le sujet.
    Effectue uniquement l'ajout, le code est théoriquement fait.
    Et affiche seulement le contenu du panier, donc dans cette page achat.php ne met pas de formulaire, rien.

    S'il faut quand même une validation et que cela débouche sur page récapitulant l'ensemble des produits, commande.php, suffit de créer un simple lien vers commander.php.
    Puis faire un copier/coller du même code dans achat.php qui sert à afficher les produits.
    Terminé.


    Quelque chose comme :
    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
    <?php
    // Encodage (UTF-8)
    header('Content-Type: text/html; charset=UTF-8');
    // Démarrage de la session
    session_start();
     
    // Connexion à la Bdd
    try
    {
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES utf8';
        $bdd = new PDO('mysql:host=localhost;dbname=projet', 'root', '', $pdo_options);
    }
    catch (PDOException $e)
    {
        die('Erreur : ' . $e->getMessage());
    }
     
    // Ajout d'un produit dans le panier
    if (isset($_POST['valider'], $_POST['id_produit'], $_POST['quantite']))
    {
        echo 'hiiii';
        $_SESSION['quantite'] = (int)$_POST['quantite']; 
        $quantite = (int)$_SESSION['quantite'];
        $id_client = (int)$_SESSION['id_client'];
        $id_produit = (int)$_POST['id_produit'];
     
        $req = $bdd->prepare('INSERT INTO panier (id_produit, quantite, id_client) VALUES (:id_produit, :quantite, :id_client) ');
        $req->bindValue(':id_produit', $id_produit, PDO::PARAM_INT);
        $req->bindValue(':quantite', $quantite, PDO::PARAM_INT);
        $req->bindValue(':id_client', $id_client,  PDO::PARAM_INT);
        $req->execute();
     
        // Redirection / actualisation
        header('Location: achat.php?insert=true');
    }
     
    // Récupération des données
    $affiche = $bdd->query('SELECT p.quantite, f.titre, f.prix
    FROM panier p
    INNER JOIN cd_film f ON p.id_produit = f.id_film');
     
    // fetchAll : permet de récupérer tous les éléments d'un seul coup
    $panier = $affiche->fetchALL(PDO::FETCH_ASSOC);
     
    // Partie Interface / HTML
    ?>
    <html>
    <head>
        ... etc ...
    </head>
    <body>
     
    <?php
    // SI insertion
    if (isset($_GET['insertion']) && $_GET['insertion'] == 'true') {
        echo '<p>Le produit a bien été ajouté</p>';
    }
    ?>
     
    <?php
    if (!empty($panier)) {
    ?>
     
    <table>
    <tr>
        <th>NOM</th>
        <th>QUANTITE</th>
        <th>PRIX</th>
    </tr>
    <?php
    // affichage de chaque produit
    foreach($panier as $affichage_panier) {
    ?>
    <tr>
        <td><?php echo $affichage_panier['titre']; ?></td>
        <td><?php echo $affichage_panier['quantite']; ?></td>
        <td><?php echo $affichage_panier['prix']; ?></td>
    </tr>
    <?php
    }
    ?>
    </table>
     
    <?php
    }
    else {
        echo '<p>Votre panier est vide.</p>';
    }
    ?>
    </body>

  15. #55
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message

    S'il faut quand même une validation et que cela débouche sur page récapitulant l'ensemble des produits, commande.php, suffit de créer un simple lien vers commander.php.
    Puis faire un copier/coller du même code dans achat.php qui sert à afficher les produits.
    Terminé.
    oui c'est ce que j'ai fais comme code dans achat.php(devenu panier.php)
    il me reste une petite question: je veux aussi dans le même code que vous m'avez donné comme exemple compter le prix total des produits, pour ensuite lors du formulaire POST envoyé à commande.php je l'affiche.
    j'ai fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tot_produit = count($panier); 
    // et après?

  16. #56
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    J'ai un peu complété le code de mon post plus haut.
    Rajouté l'insertion du produit
    Redirection après insertion + un message de confirmation
    Puis une alternative dans la cas où le panier ne contenait rien.

    Ca ne devrait pas être trop loin.

    comme exemple compter le prix total des produits
    Le plus simple c'est de faire une requête à part pour ça.
    Quelque chose comme :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT SUM(p.prix) AS somme_prix
    FROM panier p
    INNER JOIN cd_film f ON p.id_produit = f.id_film
    Puis faire un simple fectch() (et non fetchAll), car ceci retournera obligatoirement 1 ligne (la somme des prix).


    Si ca coince (solution 2 ou plan B), suffit de parcourir le tableau du panier avant affichage et additionner les prix.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $somme_prix = 0;
    foreach($panier as $affichage_panier) {
        $somme_prix += $affichage_panier['prix'];
    }
    Suffit après d'afficher $somme_prix là où tu veux.

  17. #57
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php $som = $bdd->query(
    'SELECT SUM (f.prix) AS somme_prix
    FROM panier p
    INNER JOIN cd_film f 
    ON p.id_produit = f.id_film
    ');
    $total_prix = $som->fetch();
    echo $total_prix;
    ?>
    erreur:
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1630 FUNCTION projet.SUM does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual' in C:\Program Files (x86)\EasyPHP-5.3.8.0\www\projet\panier.php:92 Stack trace: #0 C:\Program Files (x86)\EasyPHP-5.3.8.0\www\projet\panier.php(92): PDO->query('SELECT SUM (f.p...') #1 {main} thrown in C:\Program Files (x86)\EasyPHP-5.3.8.0\www\projet\panier.php on line 92

  18. #58
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Supprime l'espace entre le SUM et la parenthèse pour voir : SUM(f.prix)


    J'ai pensé à un autre petit détail.
    Normalement il faudrait rajouter dans la requête l'id_client pour que l'affichage du panier ne concerne que celui du client identifié.
    Sinon ça sera tous les produits sans exception, donc de tous les clients.

    Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // Récupération des données
    if (isset($_SESSION['id_client']) && (int)$_SESSION['id_client'] > 0) {
        $affiche = $bdd->prepare('SELECT p.quantite, f.titre, f.prix
    FROM panier p
    INNER JOIN cd_film f ON p.id_produit = f.id_film
    WHERE p.id_client = :id_client');
        $affiche->bindValue(':id_client', (int)$_SESSION['id_client'], PDO::PARAM_INT);
        $affiche->execute();
     
        // fetchAll : permet de récupérer tous les éléments d'un seul coup
        $panier = $affiche->fetchALL(PDO::FETCH_ASSOC);
    }

  19. #59
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Supprime l'espace entre le SUM et la parenthèse pour voir : SUM(f.prix)


    J'ai pensé à un autre petit détail.
    Normalement il faudrait rajouter dans la requête l'id_client pour que l'affichage du panier ne concerne que celui du client identifié.
    Sinon ça sera tous les produits sans exception, donc de tous les clients.
    ça marche maintenant la somme mais je me suis rendu compte que j'ai besoin de la somme en considérant la quantité de chaque produit.

    pour la remarque, oui je compte le faire. Merci pour le rappel

  20. #60
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    maintenant la somme mais je me suis rendu compte que j'ai besoin de la somme en considérant la quantité de chaque produit
    Et bien il suffit de rajouter la multiplication sur la quantité :
    ... SUM(f.prix * p.quantite) ...

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. Réponses: 9
    Dernier message: 13/10/2011, 12h27
  2. Onglet importation dans commande d'achat
    Par beuzy dans le forum SAP
    Réponses: 0
    Dernier message: 19/07/2011, 10h46
  3. MM - Commande d'achat - tables de prix
    Par Kiefer_S dans le forum SAP
    Réponses: 1
    Dernier message: 16/06/2010, 11h24
  4. LMSW, CATT ou programme pour commande d'achat
    Par kitty2006 dans le forum SAP
    Réponses: 4
    Dernier message: 30/10/2009, 06h07
  5. smartforms pour commande d'achat
    Par kitty2006 dans le forum SAP
    Réponses: 0
    Dernier message: 05/05/2009, 09h59

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