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 :

calcul boucle foreach


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 62
    Points : 42
    Points
    42
    Par défaut calcul boucle foreach
    Voila je cree un panier dont 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
    <?php
    // Création du panier si n'existe pas dans la session de l'utilisateur
    session_start();
    include 'Connexionbd.php';
    $vendeurpan=$_GET['vend'];
     
    if (! isset($_SESSION['panier']))  $_SESSION['panier'] = array();
     
    // Voici les données externes utilisées par le panier
    $id_article   = isset($_GET['id_article'])   ? $_GET['id_article']   : null;
    $nom_article  = isset($_GET['nom_article'])  ? $_GET['nom_article']  : null;
    $prix_article = isset($_GET['prix_article']) ? $_GET['prix_article'] : '?';
    $qte_article  = isset($_GET['qte_article'])  ? $_GET['qte_article']  : 1;
     
    //fonction pour vider
    if ($_GET['action'] == "vider") { 
     
    $_SESSION['panier'] = array();
    }
     
    //fonction pour ajouter 1 a la quantite d'un article deja cree
     
     
    if ($_GET['action'] == "ajouterqplus") { 
    $ttc=$_SESSION['panier'][$id_article];
    if($ttc != ""){$_SESSION['panier'][$id_article]['qte'] = $_SESSION['panier'][$id_article]['qte']+1;}
    if($ttc == ""){
    	        $_SESSION['panier'][$id_article]['vendeur']  = $vendeurpan;
    	        $_SESSION['panier'][$id_article]['nom']  = $nom_article;
            $_SESSION['panier'][$id_article]['prix'] = $prix_article;
            $_SESSION['panier'][$id_article]['qte']  = 1;
     
    	}}
     
     
     
    // Voici les traitements du panier
    if ($id_article == null) {
    //echo 'Veuillez sélectionner un article pour le mettre dans le panier!'; // Message si pas d'acticle sélectionné
    }
    else
    if (isset($_GET['ajouter'])){ // Ajouter un nouvel article
    	        $_SESSION['panier'][$id_article]['vendeur']  = $vendeurpan;
            $_SESSION['panier'][$id_article]['nom']  = $nom_article;
            $_SESSION['panier'][$id_article]['prix'] = $prix_article;
            $_SESSION['panier'][$id_article]['qte']  = $qte_article;
    }
    else if ($_GET['action']=="modifier") { 
     
    $_SESSION['panier'][$id_article]['qte'] = $qte_article;}
    else if ($_GET['action']=="supprimer"){  unset($_SESSION['panier'][$id_article]); }// Supprimer un article du panier 
     
     
     
    // Voici l'affichage du panier
    echo '<h2>Contenu de votre panier</h2><ul>';
    asort($_SESSION['panier']); 
    if (isset($_SESSION['panier']) && count($_SESSION['panier'])>0){
            $total_panier = 0;
     
            foreach($_SESSION['panier'] as $id_article=>$article_acheté){
                   echo"$article_acheté[nom] vendu par $article_acheté[vendeur]";
                    if (isset($article_acheté['nom']) && isset($article_acheté['prix']) && isset($article_acheté['qte'])){ 
     
                            // Calcule le prix total du panier
                            $total_panier += $article_acheté['prix'] * $article_acheté['qte'];
                    }
            }
            echo '<hr><h3>Total: ', number_format($total_panier, 2, ',', ' '), ' € '; 
    		echo"+ Frais de port $totalport €";
    		// Affiche le total du panier
    }
    else { echo 'Votre panier est vide'; } // Message si le panier est vide
    echo "</ul>";
     
    ?>
    ce code m'affiche les donnes de la façon suivante :

    produit prix vendeur

    nomproduit2 prix thomix
    nomproduit3 prix thomix
    nomproduit5 prix isidor
    nomproduit1 prix xavier

    je voulais savoir comment faire pour que dans la boucle foreach a la fin d'avoir lister chaque vendeur calculer les prix de tout les article de chaque vendeur

    exemple :

    produit prix vendeur

    nomproduit2 3 thomix
    nomproduit3 5 thomix

    on calcule combien thomix vend dans ce panier et on l'affiche

    nomproduit5 1 isidor

    on calcule combien isidor vend dans ce panier et on l'affiche

    nomproduit1 9 xavier

    on calcule combien xavier vend dans ce panier et on l'affiche

    c'est pas faute d'avoir essayer croyez moi vous avez une petite piste ?

  2. #2
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Sans revoir tout ton code, mais c'est pas forcément la solution la plus propre...:

    Ligne 61 dans ton code ci-dessus, tu as un foreach. Juste avant ce foreach, tu peux déclarer une string et un int :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $nomDernierVendeur = null; 
    $nbVenteDernierVendeur = 0;
    Avant l'affichage, tu dois faire un test pour savoir si c'est le même vendeur qu'avant, afficher si différent et que nbVente est différent de 0....

    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
     
    $nomDernierVendeur = null;
    $nbVenteDernierVendeur = 0;
    foreach($_SESSION['panier'] as $id_article=>$article_acheté){
        if($nomDernierVendeur !== $article_acheté[vendeur]) {
            if($nbVenteDernierVendeur !== 0) {
                echo "$nomDernierVendeur a vendu $nbVenteDernierVendeur produits".
            }
            $nomDernierVendeur $article_acheté[vendeur];
            $nbVenteDernierVendeur = 0;
        } else {
            $nbVenteDernierVendeur++;
        }
        echo"$article_acheté[nom] vendu par $article_acheté[vendeur]";
        if (isset($article_acheté['nom']) && isset($article_acheté['prix']) && isset($article_acheté['qte'])){ 
                            // Calcule le prix total du panier
                            $total_panier += $article_acheté['prix'] * $article_acheté['qte'];
        }
    }
    echo '<hr><h3>Total: ', number_format($total_panier, 2, ',', ' '), ' € '; 
    		echo"+ Frais de port $totalport €";
    		// Affiche le total du panier

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 62
    Points : 42
    Points
    42
    Par défaut
    bonjour,

    j'ai essayer la technique donne ci-dessus mais rien ne s'affiche il ne m'indique jamais le echo dans le if

    j'ai ajouter un echo $nomDernierVendeur a vendu $nbVenteDernierVendeur produits apres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    			    if($nomDernierVendeur !== $article_acheté[vendeur]) {
            if($nbVenteDernierVendeur !== 0) {
                echo "$nomDernierVendeur a vendu $nbVenteDernierVendeur produits";
            }
            $nomDernierVendeur=$article_acheté[vendeur];
            $nbVenteDernierVendeur = 0;
        } else {
            $nbVenteDernierVendeur++;
        }
    pour voir les variable si elle si vide ou pas

    et il m'affiche

    a vendu 0 produits

    nomproduit1 prix1 tom

    tom a vendu 0 produits

    nomproduit2 prix2 albert

    albert a vendu 0 produits

    nomproduit3 prix3 reno

    sur le dernier il n'y a carrement rien je ne comprend pas mais vraiment pas d'ou vien le probleme

  4. #4
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Déjà, on dirait que l'incrémentation ne se fait pas, ce qui du coup ne permet pas de rentrer dans les conditions d'affichage.

    En fait je t'ai répondu assez à l'arrache, donc il faut que tu vérifies les conditions et en gros l'algo du truc quoi, mais conceptuellement ça s'approche de ça !

  5. #5
    Membre averti Avatar de shell13010
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2008
    Messages : 281
    Points : 314
    Points
    314
    Par défaut
    Je suis pas sure d'avoir saisie ta question, en faite tu voudrais juste afficher le total c'est bien sa?

    Les quelque erreur que j'ai aperçu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ligne 9: Un petit oubli?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ligne 10: tu remets $nbVenteDernierVendeur à 0.
    sur se code
    "Quelle prétention de prétendre que l'informatique est récente: Adam et Eve avaient déjà un Apple!"

  6. #6
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Surtout dans le cas d'un $nbVenteDernierVendeur++; il faut quand même assigner le nom du vendeur courant au dernier vendeur...

    Et bien entendu la première remarque de shell13010 (pour la seconde, c'est normal, on va changer de vendeur, donc on lui mets son compteur à zéro !).

  7. #7
    Membre averti Avatar de shell13010
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2008
    Messages : 281
    Points : 314
    Points
    314
    Par défaut
    @Théocrite: Exact,au tant pour moi. petite maladresse
    "Quelle prétention de prétendre que l'informatique est récente: Adam et Eve avaient déjà un Apple!"

Discussions similaires

  1. [JSTL] boucle forEach pour deux liste en même temps
    Par ruud002 dans le forum Taglibs
    Réponses: 1
    Dernier message: 28/09/2006, 15h54
  2. [Tableaux] Boucle foreach inbriquée
    Par nebil dans le forum Langage
    Réponses: 17
    Dernier message: 10/09/2006, 11h40
  3. [C# VS 2005] Collection et boucle foreach
    Par SDragon dans le forum Windows Forms
    Réponses: 3
    Dernier message: 24/07/2006, 19h43
  4. [C# 1.1]Boucles foreach imbriquees
    Par Nip dans le forum Windows Forms
    Réponses: 12
    Dernier message: 13/04/2006, 16h35
  5. [Tableaux] la boucle foreach
    Par jeanfrancois dans le forum Langage
    Réponses: 7
    Dernier message: 09/03/2006, 17h29

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