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 :

Parcours d'un tableau PHP


Sujet :

Langage PHP

  1. #1
    Membre du Club Avatar de bylka
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 60
    Points
    60
    Par défaut Parcours d'un tableau PHP
    Bonjour

    j'ai un petit souci pour parcourir un tableau php,
    le tableau est organisé comme suit: chaque ligne contient: code client + Num_facture + ...
    en plus mon tableau est ordonné par code client , sachant qu'un client peut avoir plusieurs factures ,
    l'objectif est de déterminer pour chaque client les factures qu'il a ,pour faire un traitement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $ancien_client = $table[0]["code_client"];
    for ($i=0; !empty($table[$i]["code_client"]; $i++) {
    if ($ancien_client != $table[$i]["code_client"]) {
         //---faire le traitement pour l'ancien client
         $facture_client = explore("-", $facture);
         (FAIRE UN TRAITEMENT )
         $facture = $table[$i]["num_facture"];//--initialisation
    } else {
        $facture .= $table[$i]["num_facture"];
    }
        $ancien_client = $table[$i]["code_client"];
    }

    le bléme c que pour le dernier client ,le $facture est calculé, mais ya aucun traitement puisque on rentre pas dans la boucle

    Est ce que quelqu'un aurai une meilleure idée pour le parcours et le traitement de tous les clients?

    Merci

  2. #2
    Membre averti Avatar de beejeridou
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2007
    Messages : 280
    Points : 342
    Points
    342
    Par défaut
    Juste une chose, Es-tu sûre que la fonction explore existe bien en php? Je pense que explode est plus appropriée...

    Donc en fait, j'aimerai savoir si dans ton $tableau[$i]['facture'], tu as toutes les factures séparées par un tiret(-) ?

  3. #3
    Membre du Club Avatar de bylka
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 60
    Points
    60
    Par défaut
    Oui c explode, erreur de frappe
    Sinon, dans mon tableau php pour chaque ligne j'ai un client avec une facture, puis la 2éme ligne un client (soit le même ou bien un autre) avec une facture...etc

    donc le $tableau[$i]['facture'] représente une seule facture, et $facture que je construit dans ma boucle, contient toutes les factures d'un même client séparées par des '-'

    Mon souci c que le dernier client avec ses factures ne sera pas traité?je suis donc obligée de faire un traitement hors ma boucle pour le dernier client, ce qui est embêtant!!!
    Merci

  4. #4
    Membre averti Avatar de beejeridou
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2007
    Messages : 280
    Points : 342
    Points
    342
    Par défaut
    Donc un client peut avoir plusieurs identifiants?

    Sinon, où stockes-tu toutes les infos, à la base? dans une base de donnée? Si c'est le cas, il y aurait surement moyen de réaliser facilement ce que tu veux...

  5. #5
    Membre du Club Avatar de bylka
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 60
    Points
    60
    Par défaut
    Oui je stocke les données dans une BDD, un client a un seul identifiant, mais j'ai 'abord effectué une requête sql ,qui elle ma retourné mon tableau php $tableau, et la ma question c dans la façon de parcourir ce tableau?
    je pense que j'aurai pu faire une requête SQL qui me donne une ligne par client, => client + facture1 + facture2 +..
    mais le problème c que le nombre de facture par client n'est pas fixe
    Merci

  6. #6
    Membre averti Avatar de beejeridou
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2007
    Messages : 280
    Points : 342
    Points
    342
    Par défaut
    Il n'y aurait pas moyen de faire un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $req= mysql_query("SELECT factures FROM table_facture WHERE id='".$id."'");
    while($res = mysql_fetch_object($req)) {
        echo $res->factures."<br />";
    }

  7. #7
    Membre du Club Avatar de bylka
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 60
    Points
    60
    Par défaut
    Je pense que je me suis fais mal expliquée!
    je reprend depuis le début:
    - le sujet : pour chaque client avoir toutes ses factures, les infos client..etc
    ce résultat sera affiché dans un tableau html ,ou chaque ligne du tableau html représente un seul client.

    requête SQL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select id_client,nom_client,prenom_client,id_facture from facture,client where facture.id_client = client.id_client order by id_client
    donc voila

  8. #8
    Membre averti Avatar de beejeridou
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2007
    Messages : 280
    Points : 342
    Points
    342
    Par défaut
    Bah ok:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $req = mysql_query("ta requete");
    while($res = mysql_fetch_object($req)) {
        // c'est ici que tu va gerer l'affichage des informations récupérées.
        echo $res->nom_du_champ_a_afficher."<br />";
        echo $res->nom_du_champ_facture."<br />";
        echo "etc, etc, etc";
    }

  9. #9
    Membre du Club Avatar de bylka
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 60
    Points
    60
    Par défaut
    voici le résultat sql:

    client ** nom ** prénom ** N° facture **montant
    ____________________________________________
    1 **** Nadia *** BBBBB ***** 1 ****** 100 €
    1 **** Nadia *** BBBBB ***** 8 ***** 50 €
    1 **** Nadia *** BBBBB ***** 13 **** 20€
    2 **** Fani *** GGGGG **** 2 ***** 40€
    2 **** Fani *** GGGGG **** 20 **** 10€

    Moi je veux afficher en HTML:

    Nom *** prénom *** factures *** montant
    ______________________________________
    Nadia ** BBBBB ***(1,8,13 ) ***170€
    Fani ** GGGGG ***(2,20) ***50€
    Images attachées Images attachées   

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

    Un petit essai avec 2 tables:

    client:
    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
     
    --
    -- Structure de la table `client`
    --
     
    CREATE TABLE `client` (
      `id_client` int(11) NOT NULL auto_increment,
      `nom` varchar(200) NOT NULL,
      `prenom` varchar(200) NOT NULL,
      PRIMARY KEY  (`id_client`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
     
    --
    -- Contenu de la table `client`
    --
     
    INSERT INTO `client` (`id_client`, `nom`, `prenom`) VALUES
    (1, 'client_a', 'aaaaa'),
    (2, 'client_b', 'bbbbb'),
    (3, 'client_c', 'ccccc'),
    (4, 'client_d', 'ddddd'),
    (5, 'client_e', 'eeeee');
    facture:
    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
     
    --
    -- Structure de la table `facture`
    --
     
    CREATE TABLE `facture` (
      `id_facture` int(11) NOT NULL auto_increment,
      `id_client` int(11) NOT NULL,
      `numero` varchar(100) NOT NULL,
      `montant` decimal(10,0) NOT NULL,
      PRIMARY KEY  (`id_facture`),
      UNIQUE KEY `numero` (`numero`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
     
    --
    -- Contenu de la table `facture`
    --
     
    INSERT INTO `facture` (`id_facture`, `id_client`, `numero`, `montant`) VALUES
    (1, 5, 'shsg45345', '10'),
    (2, 2, 'fghk75678', '23'),
    (3, 2, 'sqdf35436', '125'),
    (4, 3, 'dfv3543', '230'),
    (5, 1, 'qsdg35463', '12'),
    (6, 4, 'dfq68731', '15'),
    (7, 1, 'sdf69431', '152'),
    (8, 5, 'qsedf84764', '80'),
    (9, 1, 'il38676', '30'),
    (10, 4, 'tryjdty36873', '200');
    La requète:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = 'SELECT nom, prenom, COUNT(*) as NB_Facture, GROUP_CONCAT(numero) as Num_Facture, SUM(montant) as Total FROM `client` LEFT JOIN `facture` ON `client`.id_client=`facture`.id_client GROUP BY `client`.id_client ';
    Ce qui donne:

    nom prenom NB_Facture Num_Facture Total
    client_a aaaaa 3 qsdg35463,sdf69431,il38676 194
    client_b bbbbb 2 sqdf35436,fghk75678 148
    client_c ccccc 1 dfv3543 230
    client_d ddddd 2 dfq68731,tryjdty36873 215
    client_e eeeee 2 shsg45345,qsedf84764 90

    Avec une table c'est la même chose.

    A+
    Dernière modification par Invité ; 21/10/2008 à 00h25.

  11. #11
    Membre du Club Avatar de bylka
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 60
    Points
    60
    Par défaut
    Trop cool comme solution

    mais le bléme ,c que si je fais encore une jointure avec la table ligne_facture(id_ligne_facture,montant_ttc,id_facture)
    ou chaque facture peut avoir de 1 à n lignes facture
    => donc pour calculer le montant d'une facture ,je fais un left join avec ligne_facture,puis un sum(montant_ttc), et donc le GROUP_CONCAT(numero) me donne un résultat de ce genre:
    si la facture N°1 a 3 lignes de facture, et la facture N°2 a 2 lignes de factures et les deux factures appartiennent au client N°1,donc le GROUP_CONCAT(numero) sera égale à (1,1,1,2,2), donc le numéro facture est dupliqué autant de fois qu'il y a de lignes factures?

    Merci

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

    Je te dis cela un peu plus tard, pas trop le temps de suite.
    Cependant, pour plus d'aide tu devrais mettre ton post dans le forum qui va bien (MySql ou autre). Des personnes bien plus compétentes que moi pourraient s'y pencher.

    A+

  13. #13
    Invité
    Invité(e)
    Par défaut
    Me revoilà,

    Si je comprends bien:
    => Une table identifiant chaque client (id, nom, prénom, ...)
    => Une table identifiant chaque facture (id, id_client, montant, ...)
    => Une table identifiant chaque ligne de commande (id, id_facture, id_produit, nombre, ...)
    Logiquement, il y a aussi une table article définissant chaque article.

    Si c'est cela, la table facture contient ce que tu recherches et doit être mise à jour suivant la table ligne de commande.
    Si pas de table facture, la table ligne de commande doit comporter id_client.

    A+

  14. #14
    Membre du Club Avatar de bylka
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 60
    Points
    60
    Par défaut
    Merci jlmag pour ton aide
    j'ai fais un traitement php sur le tableau résultant de la requête SQL, et la j'ai eu les résultats voulus
    c le GROUP_CONCAT qui m'a aidé (je le connaissait pas avant)
    thank's

  15. #15
    Invité
    Invité(e)
    Par défaut
    De rien,
    A+

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

Discussions similaires

  1. Parcours de Tableau PHP
    Par Cr4shT3st dans le forum Langage
    Réponses: 1
    Dernier message: 27/04/2015, 09h16
  2. [MySQL] Parcours tableau php et prise en compte changement pour insertion BDD
    Par Florian_mbf dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 10/05/2013, 13h59
  3. [DOM XML] XML -> tableau PHP
    Par Mucsy dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 03/06/2005, 11h44
  4. Parcour d un tableau dynamique
    Par harris_macken dans le forum Débuter
    Réponses: 12
    Dernier message: 24/05/2005, 22h23
  5. [PHP-JS] Remplir un tableau javascript selon un tableau php
    Par jerome38000 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/01/2005, 14h02

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