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 :

Boucle et affichage de résultats


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 181
    Points : 114
    Points
    114
    Par défaut Boucle et affichage de résultats
    Bonjour,

    Pourriez-vous m'aider sur une chose simple je pense,
    Je n'arrive pas à trouver la logique du code PHP à créer pour afficher un résultat de ce genre :

    4 ordinateurs HP HP PRO 6000 (le 4 venant d'un GROUP BY comptant le nombre de lignes, j'affiche la désignation)

    A ce niveau pas de problème, mais je sais pas où créer ma boucle PHP pour afficher les numéros de série de ce matériel juste en dessus.
    - CZC778544
    - CZC856888
    - CZC874555
    - CZC742265

    Si je fais un code tout bête sans GROUP BY j'aurais çà par exemple venant de ma base :

    HP HP PRO 6000 CZC778544
    HP HP PRO 6000 CZC856888
    HP HP PRO 6000 CZC874555
    HP HP PRO 6000 CZC742265

    et je souhaiterai afficher cela :

    4 HP HP PRO 6000
    CZC778544
    CZC856888
    CZC874555
    CZC742265

    Merci à vous
    Nicolas

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Classe d'abord tes données par modele et parcoure le tableau obtenu pour l'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
       $data[$row['modele']][] = $row['serialnumber'];
    }
     
    foreach($data as $modele=>$numbers) {
       echo count($numbers) . ' ' . $modele . '<br/>';
       foreach($numbers as $serialnumber) {
          echo $serialnumber . '<br/>';
       }
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 181
    Points : 114
    Points
    114
    Par défaut
    Merci beaucoup sabotage, je vais essayer.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 181
    Points : 114
    Points
    114
    Par défaut
    Voilà je suis en plein test, mais il ne m'affiche rien, uniquement ceci :

    Notice: Undefined variable: data in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\vsdm\test.php on line 17
    Warning: Invalid argument supplied for foreach() in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\vsdm\test.php on line 17
    pour cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach($data as $materiel=>$numbers) {
    Merci pour l'aide

    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
    <?php
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
     
    $sth = $bdd->prepare("SELECT * FROM test where localisation='test1'");
     
    while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
       $data[$row['materiel']][] = $row['sn'];
    }
     
     
    foreach($data as $materiel=>$numbers) {
       echo count($numbers) . ' ' . $materiel . '<br/>';
       foreach($numbers as $sn) {
          echo $sn . '<br/>';
       }
    }
     
    ?>

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est query() et pas prepare().
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 181
    Points : 114
    Points
    114
    Par défaut
    Ah merci ! J'ai modifié, maintenant j'ai ça :

    Fatal error: Call to a member function fetch() on a non-object in
    sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ($row = $sth->fetch(PDO::FETCH_ASSOC))
    désolé, je ne maitrise pas bien, ça fait 10 ans que je dis çà :/

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    active les erreurs PDO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 181
    Points : 114
    Points
    114
    Par défaut
    Bonjour et bonjour Sabotage,

    J'ai repris le code depuis peu, je vais donc mettre plus d'infos, j'ai réussi à obtenir quelque chose qui fonctionne en affichant en liste.

    Mes colonnes dans la base :

    id | pdv | equipement | ville | materiel | famille | sn

    Le code en parti :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $req = $pdo->query('SELECT * from materiel_pdv where and famille="CAISSE"');
        	while ($row = $req ->fetch(PDO::FETCH_ASSOC)) {
       	    		 $tableau[] = $row;
        	}
     
    foreach ($tableau as $cle) {
    echo $cle['materiel']."<br>";
     
        }
    Ca m'affiche cela :

    TPV 4800-743 RS 485 512 MO 80 GO + 1 AFFICHEUR (STAND)
    TPV 4800-743 RS 485 512 MO 80 GO + 1 AFFICHEUR (STAND)
    TPV 4800-743 RS 485 512 MO 80 GO + 1 AFFICHEUR (STAND)
    TPV 4800-743 RS 485 512 MO 80 GO + 1 AFFICHEUR (STAND)
    TPV 4800-743 RS 485 512 MO 80 GO + 1 AFFICHEUR (STAND)
    TPV 4800-743 RS 485 2GB 80 GO + 1 AFFICHEUR (STAND)
    Et je souhaiterai que ça affiche :

    5 TPV 4800-743 RS 485 512 MO 80 GO + 1 AFFICHEUR (STAND)
    1 TPV 4800-743 RS 485 2GB 80 GO + 1 AFFICHEUR (STAND)
    Je comprends à présent la requête et le parcours du tableau,
    que je peux consulter avec print_r.

    Par contre je ne comprends plus la partie de sabotage et essayée de la mettre en place avec mes données,
    mais je ne comprends cette ligne et si elle est encore bonne avec mes infos :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date[$row['modele']][] = $row['serialnumber']
    et le forech qui ajoute un tableau avec $modele=>$numbers(je n'ai pas mis le numéro de série , ni d'autres informations pour le moment car il me suffira de les rajouter avec un echo)

    Merci pour votre aide
    Nicolas

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
       $data[$row['modele']][] = $row;
    }
     
    foreach($data as $modele=>$values) {
       echo count($values) . ' ' . $modele . '<br/>';
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 181
    Points : 114
    Points
    114
    Par défaut
    ... résultat
    13 TPV 4800-743 RS 485 512 MO 80 GO + 1 AFFICHEUR (STAND)
    1 TPV 4800-743 RS 485 2GB 80 GO + 1 AFFICHEUR (STAND)
    Merci beaucoup sabotage, vous m'avez bien dépanné !

    Je vous embête une dernière fois; pourriez-vous m'expliquer ces 2 lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $data[$row['modele']][] = $row;
    foreach($data as $modele=>$values)
    1/ Le tableau avec la valeur modele [] mais pourquoi = $row ?
    2/ Parcours du tableau $data as $modele, ok, mais pourquoi ajouter =>$values

    Merci

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    $row et $values contiennent les autres données que tu vas recuperer dans ton SELECT.
    Mais si ta finalité c'est seulement le nombre et le modèle, tu n'as qu'a faire une requête COUNT/GROUP BY.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 181
    Points : 114
    Points
    114
    Par défaut
    Merci sabotage, je vais réviser les tableaux alors.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 181
    Points : 114
    Points
    114
    Par défaut
    Désolé, je reviens à la charge, mais ça se complique et je n'y arrive pas :-/

    Sur une ligne où il y a 5 matériels, comment puis-je afficher à la suite les 5 numéros de série différents ? (champ sn dans la bdd)
    5 TPV 4800-743 RS 485 512 MO 80 GO + 1 AFFICHEUR (STAND)
    Il faut aussi que je récupère les valeurs dans les champs "famille".

    Merci d'avance !
    Nicolas

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    je croyais que tu allais étudier les tableaux PHP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach($data as $modele=>$values) {
       echo count($values) . ' ' . $modele . '<br/>';
       foreach ($values as $row) {
          echo $row['famille'] . ' ' . $row['sn'] . '<br/>';
       }
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 181
    Points : 114
    Points
    114
    Par défaut
    Une nouvelle fois merci Sabotage ! Oui j'ai essayé, je n'avais pas eu l'idée d'utiliser un deuxième foreach.

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 181
    Points : 114
    Points
    114
    Par défaut
    Par contre j'aurais besoin d'une précision, je ne comprends pas cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $tableau[$row['materiel']][] = $row;

    Et je ne pourrais pas avoir sur une ligne le compteur, le materiel , la famille, le sn, car là avec les 2 foreach je suis embêté pour afficher tout sur une ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($tableau as $materiel=>$values) {
       echo count($values) . ' ' . $materiel ;
       foreach ($values as $row) {
          echo $row['famille'] . ' ' . $row['sn'] . '<br/>';
    merci !

  17. #17
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu veux répéter le compteur pour chaque numéro de série ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 181
    Points : 114
    Points
    114
    Par défaut
    Bonsoir,

    En fait l'afichage est niquel , genre "5 UC IBM CAISSE", bon après je vais devoir afficher les numéros de série dans un infobulle ou autre.
    Mais j'essaye aussi de récupérer les familles car je dois disposer l'affichage par famille dans des <DIV> différentes. Mais je vais gérer ça ensuite tout seul.

    J'aurais bien aimé en fait dans le premier foreach, récupérer en plus les numéros de série SN, et les familles que je puisses passer ces valeurs en echo, ou faire des if pour l'affichage.
    J'ai essayé par moi même avant de vous embêter, ce que je ne comprends pas c'est qu'en faisant un print_r de $tableau, j'ai toutes mes valeurs, mais je que n'arrive pas à afficher sn ou famille en faisant $tableau[sn] ou [famille]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach($tableau as $materiel=>$values) {
       echo count($values) . ' ' . $materiel ;
       foreach ($values as $row) {
          echo $row['famille'] . ' ' . $row['sn'] . '<br/>';
    Merci

  19. #19
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu obtiens quoi avec ce code ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 181
    Points : 114
    Points
    114
    Par défaut
    Ce résultat.

    1 SERVEUR DE SAUVEGARDE MB2000S Appliance R2832896
    2 DOUCHETTE IBC MT6015 + CABLE USB DOUCH
    1 DOUCHETTE PS QS-200-PS+3ANS GARANTIE DOUCH
    1 PEBBLE BASIC IMPRIMANTE COULEUR IMP FID
    2 LEXMARK T640 DTN + BAC 500 F 33 PPM 64 MO RECTO VERSO IMPI 7916FVY
    IMPI 7920K8L
    14 IMPR.4610-TI4 THERM/IMPACT CHEQUE RS485 IMPI

    C'est presque ce que je recherche, en fait avant les 2 forech il faudrait que je puisse récupérer la famille,
    je vais devoir faire 20 conditions IF selon la famille pour les afficher dans des DIV différentes.

    Merci

Discussions similaires

  1. Réponses: 5
    Dernier message: 30/06/2008, 14h43
  2. [MySQL] Affichage de résultats issus d'une boucle sur un switch
    Par Micaunprobzo dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/09/2007, 11h45
  3. Affichage des résultats d'un moteur de recherche
    Par poah dans le forum Langage
    Réponses: 1
    Dernier message: 24/11/2005, 14h31
  4. Affichage du résultat
    Par thomas_strass dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/07/2005, 11h30
  5. [VB.NET] Boucle d'affichage
    Par 3Dos dans le forum ASP.NET
    Réponses: 2
    Dernier message: 18/02/2005, 12h53

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