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 :

Tableau de données double entrée


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2017
    Messages : 12
    Par défaut Tableau de données double entrée
    Bonjour tout le monde,

    J'ai un problème pour un projet. C'est à dire que j'aimerai faire un tableau qui prend en colonne un attribut d'une table et en ligne un attribut d'une autre table. Enfin pour la case qui lie la colonne et la ligne, j'aimerai qu'une données s'affiche.

    Pour illustrer :
    Nom : exemple db.jpg
Affichages : 1495
Taille : 18,3 Ko

    Imaginons une telle base de données,

    J'aimerai un tableau dans une page web comme ceci :

    Nom : tableau de donnée.JPG
Affichages : 1424
Taille : 33,9 Ko

    Les colonnes sont les noms des clients, les lignes les noms des produits et les chiffres la quantité d'un achat...

    J'ai essayé quelque chose comme ça pour avoir déjà les colonnes et les lignes :

    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
    <?php $sql1 = 'SELECT nom FROM Client';
                $req2 = $mysqli->prepare($sql1);
                $req2->execute();
     
    $sql2 = 'SELECT nom FROM Produit';
                $req2 = $mysqli->prepare($sql2);
                $req2->execute();
    ?>
     
                <table>
                    <tr>
                        <th></th>
                        <?php
     
                        while($resultat1=$req1->fetch()) { ?>
                        <th><?php echo $resultat1['nom']; ?></th>
                        <?php } ?>
                    </tr>
     
                    <?php
     
                    while($resultat2=$req2->fetch()) { ?>
                    <tr><?php echo $resultat2['nom']; ?></tr>
                    <?php } ?>
     
     
     
                </table>
    Mais ça ne fonctionne pas et pour afficher la quantité d'un achat j'y suis encore moins...


    Si quelqu'un pouvait m'aider ça serait super sympa !

    Merci d'avance

  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
    Par défaut
    Ca ne sert à rien de faire un prepare si tu n'utilises pas de paramètres.
    Tu ne peux pas relire plusieurs fois les données d'une requête, il faut donc le stocker dans un tableau.

    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
    <?php
    $sql = 'SELECT quantite, id_client, id_produit FROM Achat';
    $result = $mysqli->query($sql);
    while ($row = $result->fetch()) {
    	$tblAchat[$row['id_produit']][$row['id_client']] = $row['quantite'];
    }
    ?>
     
    <table>
    	<tr>
    		<th></th>
    <?php
    $sql = 'SELECT id, nom FROM Client';
    $req_client = $mysqli->query($sql);
    while ($row = $req_client->fetch()) {
    	$tblClient[$row['id']] = $row['nom'];$
    	echo '<th>' . $row['nom'] . '</th>';
    }
    ?>
    	</tr>
    <?php
    $sql = 'SELECT id, nom FROM Produit';
    $req_produit = $mysqli->query($sql);
    while ($row = $req_produit->fetch()) {
    			echo '<tr>
    					<td>' . $row['nom'] . '</td>';
                foreach ($tblClient as $id_client=>$nom_client) {
    				$achat = isset($tblAchat[$row['id']][$id_client]) ? $tblAchat[$row['id']][$id_client] : 0;
    				echo '<td>' . $achat . '</td>'
    			}
    			echo '<tr>';
    }
    ?>
    </table>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2017
    Messages : 12
    Par défaut
    Bonjour,
    Merci pour cette aide, ça m'a déjà pas mal avancé, mais ça ne fonctionne pas. Enfin ça renvoie dix 0 car j'ai dix clients ^^ Enfin je crois

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

    "mais ça ne fonctionne pas" n'est d'aucune aide !

    • Montre au moins ton code
    • Effectue un DEBOGAGE DE BASE : mets des echo ...; var_dump(...); dans ton code pour vérifier tes données,...

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2017
    Messages : 12
    Par défaut
    Bonjour,
    Excusez-moi j'ai écris trop tôt, j'essayais de comprendre un peu mes erreurs, en fait je crois que j'ai compris c'est que seulement le contenu du tableau s'affiche, le nom des colonnes (client) et le nom des lignes (produit) ne s'affichent pas.
    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
     
    <?php       $req = $mysqli->prepare('SELECT id_produit, id_client, quantite FROM achat t WHERE id_Achat =?');
                $req->bind_param('i', $idAchat);
                $req->execute();
                while ($row = $req->fetch()) {
                    $tblAchat[$row['id_produit']][$row['id_client']] = $row['quantite'];
                }
                ?>
     
     
    <table class="table">
        <tr>
            <th></th>
    <?php
    $req_client = $mysqli->prepare('SELECT id, nom FROM client');
    $req_client->execute();
    while ($row = $req_client->fetch()) {
        $tblclient[$row['id']] = $row['nom'];
        echo '<th>' . $row['nom'] . '</th>';
    }
    ?>
        </tr>
     
    <?php
    $req_produit = $mysqli->prepare('SELECT id, nom FROM produit');
    $req_produit->execute();
    while ($row = $req_produit->fetch()) {
                echo '<tr>
                        <td>' . $row['nom'] . '</td>';
                foreach ($tblclient as $id_client=>$nom_client) {
                    $achat = isset($tblAchat[$row['id']][$id_client]) ? $tblAchat[$row['id']][$id_client] : 0;
                    echo '<td>' . $achat . '</td>';
                }
                echo '<tr>';
    }
    ?>
    </table>
    J'ai utilisé des prepare et execute pour toutes mes requêtes car j'avais un problème avec les simples query comme vous m'aviez donné l'exemple plus tôt, il me répondait ne pas connaitre la méthode mais cela n'a pas d'importance je pense.

    Merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bon. Déjà au début :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php       $req = $mysqli->prepare('SELECT id_produit, id_client, quantite FROM achat t WHERE id_Achat =?');
                $req->bind_param('i', $idAchat);
    D'où vient $idAchat ?

    Le débogage de base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo $idAchat;
     
    var_dump($tblAchat);

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2017
    Messages : 12
    Par défaut
    Oui j'ai rajouté une condition en fait je change le contexte à chaque fois que je reviens ici car ce système de client et produit est juste un exemple pour moi.
    Du coup le $id_achat que j'aurai plutôt dû appeler $id_sessionAchat qui est une clé étrangère dans la table Achat pour une autre table "session" qui servirait à regrouper plusieurs achat en fonction d'autres caractéristiques, je ne pensais pas le préciser cette table dans le contexte de l'exemple mais voilà maintenant vous savez tout, enfin après ça n'a pas beaucoup d’importance.

    Je reste du coup bloqué sur le fait que le nom de mes colonnes et de mes lignes ne s'affichent pas et que dix 0 s'affichent alors qu'il y a des données dans la base de données

    Merci

  8. #8
    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
    Par défaut
    C'est juste que c'est fetch_assoc() et pas fetch()

    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
    <?php
    $mysqli = new mysqli('localhost', 'root', '', 'test');
    $sql = 'SELECT quantite, id_client, id_produit FROM Achat';
    $result = $mysqli->query($sql);
    while ($row = $result->fetch_assoc()) {
    	$tblAchat[$row['id_produit']][$row['id_client']] = $row['quantite'];
    }
    ?>
     
    <table>
    	<tr>
    		<th></th>
    <?php
    $sql = 'SELECT id, nom FROM Client';
    $req_client = $mysqli->query($sql);
    while ($row = $req_client->fetch_assoc()) {
    	$tblClient[$row['id']] = $row['nom'];
    	echo '<th>' . $row['nom'] . '</th>';
    }
    ?>
    	</tr>
    <?php
    $sql = 'SELECT id, nom FROM Produit';
    $req_produit = $mysqli->query($sql);
    while ($row = $req_produit->fetch_assoc()) {
    			echo '<tr>
    					<td>' . $row['nom'] . '</td>';
                foreach ($tblClient as $id_client=>$nom_client) {
    				$achat = isset($tblAchat[$row['id']][$id_client]) ? $tblAchat[$row['id']][$id_client] : 0;
    				echo '<td>' . $achat . '</td>';
    			}
    			echo '<tr>';
    }
    ?>
    </table>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2017
    Messages : 12
    Par défaut
    Il me répond qu'il ne connait pas la méthode fetch_assoc()

    Call to undefined method mysqli_stmt::fetch_assoc()
    Au passage, j'ai reformulé ma requête pour en avoir une seule, 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
    <table class="table">
        <tr>
            <th></th>
    <?php
    $mysqli = new mysqli(config_local::SERVERNAME,config_local::USER,config_local::PASSWORD,config_local::DBNAME);
    $req_molecule = $mysqli->prepare('SELECT t.diametre, m.id, m.nom, b.id, b.nom FROM Test t LEFT OUTER JOIN molecule_antibioplus m on m.id=t.id_molecule LEFT OUTER JOIN bacterie b on b.id=t.id_bacterie WHERE id_session=1');
    $req_molecule->execute();
    $req_molecule->bind_result($diametree, $idm, $nomm, $idb, $nomb);
    while ($row = $req_molecule->fetch()) {
        $tblMolecule[$row[$idm]] = $row[$nomm];
        echo '<th>' . $row[$nomm] . '</th>
        <tr>
        <td>' . $row[$nomb] . '</td>';
                foreach ($tblMolecule as $id_molecule=>$nom_molecule) {
                    $test = isset($tblSession[$row[$idb]][$id_molecule]) ? $tblSession[$row[$idb]][$id_molecule] : 0;
                    echo '<td>' . $row[$diametree]. '</td>';
                }
                echo '<tr>';
    }
    ?>
    </table>
    J'ai essayé de remplacer dans les echos, les variable par des "test" et il y avait bien l'affichage avec la bonne taille de tableau, mais quand je met les variables, il n'affiche rien alors que dans mon while j'ai essayé de faire un echo avec les variables et elles s'affichent bien ...

    Merci

  10. #10
    Invité
    Invité(e)
    Par défaut
    1/ Peut-on savoir quelle version de PHP tu as ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo phpinfo(); ?>

    2/ Les paramètres de connexion sont corrects (vérifiés) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mysqli = new mysqli(config_local::SERVERNAME,config_local::USER,config_local::PASSWORD,config_local::DBNAME);

  11. #11
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2017
    Messages : 12
    Par défaut
    je suis en PHP Version 5.6.25
    j'ai essayé en version 7.0.10 et il me met la même erreur
    Fatal error: Uncaught Error: Call to undefined method mysqli_stmt::fetch_assoc()
    Oui ils sont correct.
    Sinon j'ai essayé de mettre un echo avec toutes les données du bind result simplement dans le while et elles s'affichent bien mais lors de la création du tableau elles ne s'affichent pas...

    Merci

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

    Non, c'est :
    Idem pour les autres...

  13. #13
    Invité
    Invité(e)
    Par défaut
    Autre chose :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT t.diametre, m.id, m.nom, b.id, b.nom.......

    Différencie bien les "id" et "nom" avec des alias, pour l'affichage :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT t.diametre, m.id AS m_id, m.nom AS m_nom, b.id AS b_id, b.nom AS b_nom.......

    Ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo $row['m_nom'];
    .....
    Dernière modification par rawsrc ; 02/05/2017 à 20h46.

  14. #14
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2017
    Messages : 12
    Par défaut
    Ah oui du coup j'ai balancé le vrai contexte
    Au final avec l'encadrement $row[] ça ne fonctionne pas mais comme je fais un bind_result je peux l'enlever et les bonnes valeurs s'affichent
    Malheureusement la forme du tableau c'est pas ça.. Quand il y a plusieurs test (ou achat dans l'autre contexte) cela fait un affichage comme ça :

    Nom : bug tableau.JPG
Affichages : 1028
Taille : 23,1 Ko

    Pour le premier achat, la ligne est bien avec la colonne mais pour le reste ... voilà

    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
    <table class="table">
        <tr>
            <th></th>
    <?php
    $mysqli = new mysqli(config_local::SERVERNAME,config_local::USER,config_local::PASSWORD,config_local::DBNAME);
    $req_molecule = $mysqli->prepare('SELECT t.diametre, m.id, m.nom, b.id, b.nom FROM Test t LEFT OUTER JOIN molecule_antibioplus m on m.id=t.id_molecule LEFT OUTER JOIN bacterie b on b.id=t.id_bacterie WHERE id_session=1');
    $req_molecule->execute();
    $req_molecule->bind_result($diametree, $idm, $nomm, $idb, $nomb);
    while ($row = $req_molecule->fetch()) {
        $tblMolecule[$idm] = $nomm;
        echo '<th>' . $nomm . '</th>
        <tr>
        <td>' . $nomb . '</td>';
                foreach ($tblMolecule as $id_molecule=>$nom_molecule) {
                    $test = isset($tblSession[$idb][$id_molecule]) ? $tblSession[$idb][$id_molecule] : 0;
                    echo '<td>' . $diametree. '</td>';
                }
                echo '<tr>';
    }
    ?>
    </table>
    Merci

  15. #15
    Invité
    Invité(e)
    Par défaut
    Affiche le code HTML généré.


    Et vérifie la logique de ta requête...

  16. #16
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2017
    Messages : 12
    Par défaut
    Oui du coup j'ai compris la forme qu'il génère mais pour former un tableau de plusieurs dimensions c'est un casse tête

  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
    Par défaut
    Dans le code que je t'ai ecrit et qui fonctionne, il y a 3 requêtes.
    Dans ton code, il n'y en a plus qu'une ... pourquoi ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. [XL-2010] Tableau double entrée, comparaison de l'existence de données
    Par Rom's.75 dans le forum Excel
    Réponses: 2
    Dernier message: 04/12/2013, 10h08
  2. [2.6.0] tableau de donnée à double entré...
    Par David55 dans le forum BIRT
    Réponses: 0
    Dernier message: 09/08/2010, 18h42
  3. tableau double entrée
    Par Andrey dans le forum C
    Réponses: 16
    Dernier message: 08/11/2005, 15h33
  4. tableau de hachage à double entrée
    Par bikochuu dans le forum Langage
    Réponses: 1
    Dernier message: 04/11/2005, 10h58
  5. [XSLT]tableau double entrée avec cellule manquante
    Par nferay dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 08/03/2005, 15h07

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