Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Discussion: calcul boucle foreach

  1. #1
    Invité régulier
    Profil pro gdgfs thomas
    Inscrit en
    juillet 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Nom : gdgfs thomas

    Informations forums :
    Inscription : juillet 2010
    Messages : 48
    Points : 9
    Points
    9

    Par défaut calcul boucle foreach

    Voila je cree un panier dont voici le code

    Code :
    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 éclairé
    Homme Profil pro Thomas Dutrion
    Développeur Web
    Inscrit en
    février 2009
    Messages
    257
    Détails du profil
    Informations personnelles :
    Nom : Homme Thomas Dutrion
    Âge : 26
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2009
    Messages : 257
    Points : 372
    Points
    372

    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 :
    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 :
    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
    Invité régulier
    Profil pro gdgfs thomas
    Inscrit en
    juillet 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Nom : gdgfs thomas

    Informations forums :
    Inscription : juillet 2010
    Messages : 48
    Points : 9
    Points
    9

    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 :
    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 éclairé
    Homme Profil pro Thomas Dutrion
    Développeur Web
    Inscrit en
    février 2009
    Messages
    257
    Détails du profil
    Informations personnelles :
    Nom : Homme Thomas Dutrion
    Âge : 26
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2009
    Messages : 257
    Points : 372
    Points
    372

    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 confirmé Avatar de shell13010
    Homme Profil pro kyle debasa
    Étudiant
    Inscrit en
    mars 2008
    Messages
    266
    Détails du profil
    Informations personnelles :
    Nom : Homme kyle debasa
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : mars 2008
    Messages : 266
    Points : 221
    Points
    221

    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 :
    Ligne 9: Un petit oubli?


    Code :
    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 éclairé
    Homme Profil pro Thomas Dutrion
    Développeur Web
    Inscrit en
    février 2009
    Messages
    257
    Détails du profil
    Informations personnelles :
    Nom : Homme Thomas Dutrion
    Âge : 26
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2009
    Messages : 257
    Points : 372
    Points
    372

    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 confirmé Avatar de shell13010
    Homme Profil pro kyle debasa
    Étudiant
    Inscrit en
    mars 2008
    Messages
    266
    Détails du profil
    Informations personnelles :
    Nom : Homme kyle debasa
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : mars 2008
    Messages : 266
    Points : 221
    Points
    221

    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!"

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •