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 :

Conception d'un tableau affichant des données d'une base [MySQL]


Sujet :

PHP & Base de données

  1. #1
    fey
    fey est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 231
    Points : 93
    Points
    93
    Par défaut Conception d'un tableau affichant des données d'une base
    bonjour,

    j'ai un peu de mal a voir comment structurer mon code pour obtenir ceci :

    ou du moins quelque chose qui s'y rapproche.


    ma base se structure comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    table `infos` : (`id_machine`, `matricule`, `machmod`, `emplacement`, `lieu`, `ip`)
     
    table `releves_p1` : (`id`, `id_machine`, `annees`, `mois`, `moisnum`, `id_element`)
     
    table `releves_p2` (`id`, `id_element`, `nom_element`, `quantite`)
    donc j'ai fais ces deux fonctions :
    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
     
     
    	//selection les elements qui seront place dans le corps du tablau
    	//en fonction de l'annee
    	function selAfficheAllCorps($annees){
    		$sql = "SELECT releves_p1.matricule, releves_p1.annees,  releves_p1.moisnum,";
    		$sql .= " releves_p1.id_element, releves_p2.id_element, releves_p2.nom_element,";
    		$sql .= " releves_p2.quantite";
    		$sql .= " FROM `releves_p1` JOIN `releves_p2` ";
    		$sql .= " WHERE releves_p1.id_element = releves_p2.id_element";
    		$sql .= " AND annees = '2008' ";
    		$sql .= "ORDER BY matricule asc, moisnum ASC";
     
    		$req = $this->execQuery($sql);
    		return $req;	
    	}
    	//compte le nombre de copieur a afficher
    	//ce qui permettra de connaitre le nombre de ligne a creer
    	function selAfficheAllNbMachine(){
    		$req = $this->execQuery("SELECT count(id_machine) FROM infos");
    		return $req;
    	}
    pour les mois j'ai cree un petit tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$mois = array('janvier','fevrier','mars','avril','mai','juin','juillet','aout','septembre','octobre','novembre','decembre');
    mais voila maintenant je seche un peu sur la maniere de creer le code php qui affichera le tableau.

    sachant que dans la base il n'y aura pas forcement une valeur pour chaque mois, et donc certain id_machine n'auront pas le meme nombre d'enregistrement.

    est ce que vous avez une idee de comment je pourrais faire ?

    merci beaucoup
    fey

  2. #2
    Membre habitué Avatar de cynferdd
    Profil pro
    Analyste Développeur .Net, PHP, SQL Server
    Inscrit en
    Avril 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Développeur .Net, PHP, SQL Server

    Informations forums :
    Inscription : Avril 2003
    Messages : 154
    Points : 190
    Points
    190
    Par défaut
    salut

    Une fois que tu as executé tes requêtes, je te conseille d'aller voir du côté de cette fonction :
    http://fr.php.net/manual/fr/function.mysql-result.php

    tu récupères le nombres de lignes de ta query avec mysql_num_rows , tu boucle dessus, et tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $var_1 = mysql_result  ( $result  , $i , "champ 1" )
    $var_2 = mysql_result  ( $result  , $i , "champ 2" )
    au sein même de ta boucle en mettant les champs que tu veux récupérer.
    Ensuite, un simple "echo" dans les cellules correspondantes de ton tableau fera l'affaire
    A faire et à défaire on finit par ne plus rien faire.

  3. #3
    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
    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
     
    // tu ordonnes tes données dans un tableau php
    while ( $row = mssql_fetch_array($result)) {
        $tbl[$row['matricule']][$row['mois'] = $row['valeur'];
    }
     
     
    // tu construis le tableau HTML
    foreach ($tbl as $matricule=>$value) {
    echo '<tr>
              <td>' . $matricule . '<td>';
    for ($mois = 1; $mois < 13; $mois++) {
        echo '<td>' . $value[$mois] . '</td>';
    }
    echo '</tr>';
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    fey
    fey est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    yop,
    tout d'abord merci de vos reponses

    sabotage <= il me met une erreur de parse sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tbl[$row['matricule']][$row['mois'] = $row['valeur'];
    cynferdd<= mouais je vois pas trop.

    en fait fait la pour les deux messages je ne vois pas comment/ou est l'instruction qui permet de vraiment detecter

    ou l'on place les donnees cumul_mois en fonction du mois quand la ligne du tableau n'est pas complet.
    car comme je disais tous les "matricules" n'ont pas forcement des donnees pour les 12 mois.

    donc qu'est ce que j'ai zape ?

    merci

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tbl[$row['matricule']][$row['mois']] = $row['valeur'];
    Dans ce que je propose le principe est tout simple :
    tu ranges d'abord les données par matricule
    ensuite pour chaque matricule, tu lis la valeur correspondant a chaque mois, donc s'il n'y avait aucun enregistrement, il n'y aura simplement pas de valeur.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    fey
    fey est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    ok
    par compte pour le code, c'est quoi ? un tableau multi-dimensionnel ?
    si c'est le cas, je ne les ai jamais manipuler ^^
    donc faut que je cherche une petite doc dessus

  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
    pour reprendre ton image de tableau

    [7500254000][3] = 48034
    [7500254001][1] = 1
    [7500254001][3] = 48035
    etc.

    Et apres pour chaque matricule je regarde pour chaque mois
    [7500254000][1] -> rien
    [7500254000][2] -> rien
    [7500254000][3] -> 48034
    etc.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    fey
    fey est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    yep j'ai bien compris le principe

    mais pour la syntaxe j'ai un peu de mal.

  9. #9
    fey
    fey est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    euh au fait cela fonctionne ^^
    merci beaucoup pour ton aide.
    maintenant que j'ai vu ce type de tableau, je vais moins etre embete pour les autres stats que j'ai a faire

  10. #10
    fey
    fey est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    j'aurais une derniere question

    disons qu'avec la requete actuele j'ai cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    matricule	  mois 	  moisnum 	  id_element 		   id_element  	 nom_element    	 quantite
    7500254000 	mars 	3 	750025400020083 	750025400020083 	copies_mois 	40648
    7500254000 	mars 	3 	750025400020083 	750025400020083 	copies_totales 	40648
    7500254000 	mars 	3 	750025400020083 	750025400020083 	cumul_mois 	48034
    7500254000 	mars 	3 	750025400020083 	750025400020083 	cumul_total 	48034
    7500254000 	mars 	3 	750025400020083 	750025400020083 	impressions_mois 	7350
    7500254000 	mars 	3 	750025400020083 	750025400020083 	impressions_totales 	7350
    7500254000 	avril 	4 	750025400020084 	750025400020084 	copies_mois 	16136
    7500254000 	avril 	4 	750025400020084 	750025400020084 	copies_totales 	56784
    7500254000 	avril 	4 	750025400020084 	750025400020084 	cumul_mois 	20066
    7500254000 	avril 	4 	750025400020084 	750025400020084 	cumul_total 	68100
    7500254000 	avril 	4 	750025400020084 	750025400020084 	impressions_mois 	3930
    7500254000 	avril 	4 	750025400020084 	750025400020084 	impressions_totales 	11280
    et je voudrai plutot que ce soit regroupe de maniere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    matricule	 mois	 moisnum 	 id_element	 id_elemen 	 	 nom_elemen	 quantite
    7500254000 	mars 	3 	750025400020083 	750025400020083 	copies_mois 	40648
    7500254000 	avril 	4 	750025400020084 	750025400020084 	copies_mois 	16136
    7500254000 	mars 	3 	750025400020083 	750025400020083 	copies_totales 	40648
    7500254000 	avril 	4 	750025400020084 	750025400020084 	copies_totales 	56784
    7500254000 	mars 	3 	750025400020083 	750025400020083 	cumul_mois 	48034
    7500254000 	avril 	4 	750025400020084 	750025400020084 	cumul_mois 	20066
    7500254000 	mars 	3 	750025400020083 	750025400020083 	cumul_total 	48034
    7500254000 	avril 	4 	750025400020084 	750025400020084 	cumul_total 	68100
    7500254000 	mars 	3 	750025400020083 	750025400020083 	impressions_mois 	7350
    7500254000 	avril 	4 	750025400020084 	750025400020084 	impressions_mois 	3930
    7500254000 	mars 	3 	750025400020083 	750025400020083 	impressions_totales 	7350
    7500254000 	avril 	4 	750025400020084 	750025400020084 	impressions_totales 	11280
    ce serait quoi la syntaxe a metre pour avoir ce resultat ?

    pour rappel c'est le resultat de la fonction : function selAfficheAllCorps($annees)
    merci beaucoup

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql .= "ORDER BY matricule asc, moisnum ASC";
    Tu mets les colonnes que tu veux dans le ORDER BY
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    fey
    fey est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    oops craquage lol, j'avais pas vu que j'avais pas place le nom_element au bon endroit ^^

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

Discussions similaires

  1. [PDO] récupérer et afficher des données d'une base
    Par tibou_d dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 14/11/2008, 11h43
  2. Réponses: 8
    Dernier message: 14/12/2007, 16h04
  3. Afficher des données dans une textbox
    Par divad dans le forum AWT/Swing
    Réponses: 21
    Dernier message: 27/05/2007, 20h22
  4. créer un tableau, afficher des données et plus
    Par NicoO_O dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 13/04/2007, 12h16
  5. [Conception] Sécurité des données d'une base
    Par viny dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 26/12/2006, 23h10

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