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 :

affichage boucle while


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Mai 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 5
    Points : 4
    Points
    4
    Par défaut affichage boucle while
    Bonjour,

    je dois me tromper dans mon analyse.

    • ma table famille contient le paramétrage de chaque famille avec leur image.
    • ma table type contient le paramétrage de chaque type avec leur image.
    • ma table listtank contient la liste des tanks avec leur image



    Ce que je veux faire c'est :

    • quand j'appel l'affichage de la liste des tans, je veux faire afficher les images du type et de la famille



    puisque dans la table listtank j'ai idtype et idfam.

    j'ai essayer avec foreach mais je n'y arrive pas non plus.
    je ne sais pas si j'ai été assez clair.

    J'utilise trois table :

    table 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dbtabfam = $db->query('SELECT * FROM aw_famille_tank');
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #   Nom     Type    Interclassement    Attributs    Null    Défaut  Extra  
    1   idfam       int(11)                UNSIGNED Non Aucune  AUTO_INCREMENT 
    2   nom_fam     varchar(10) latin1_general_ci       Non Aucune         
    3   coul_fam    varchar(6)  latin1_general_ci       Non Aucune         
    4   log_fam     varchar(100)latin1_general_ci
    table 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dbtabtype = $db->query('SELECT * FROM aw_type_tank');
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #   Nom     Type    Interclassement    Attributs    Null    Défaut  Extra  
    1   idtype      int(11)                         Non Aucune  AUTO_INCREMENT     
    2   nomtype     varchar(10) latin1_general_ci       Oui NULL       
    3   logtype     varchar(100)latin1_general_ci       Oui NULL
    table 3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dbtablistank = $db->query('SELECT * FROM aw_liste_tank');
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #   Nom     Type    Interclassement    Attributs    Null    Défaut  Extra  
    1   idtank      int(11)                             Non Aucune  AUTO_INCREMENT     
    2   nomtank     varchar(50) latin1_general_ci       Non Aucune         
    3   rangtank    int(2)                          Non Aucune         
    4   idtype      int(11)                     Non Aucune         
    5   logtank     varchar(100)latin1_general_ci           Non Aucune         
    6   idfam       int(11)                     Non Aucune         
    7   cartank     varchar(1)  latin1_general_ci       Non Aucune
    j'ai ma première ligne qui s'affiche bien mais pas les autres.

    Qu'est ce que j'oublie de faire ?
    ou qu'est ce que je fais mal ?

    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
    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
    77
    78
    79
     
    include('../config/configsql.php');
     
    /* Acces à la base de données */
    try
    {
     $db = new PDO('mysql:host='.HOST.';dbname='.DB_NAME.';charset=utf8', ''.ROOT.'',''.MDPASS.'');
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch (PDOException $e) {
        print "Erreur de conenxion, désolé: " . $e->getMessage() ; die();
    }
     
    /* lecture des tables de la base de données des types de tank*/
    $dbtablistank = $db->query('SELECT * FROM aw_liste_tank');
    $dbtabtype = $db->query('SELECT * FROM aw_type_tank');
    $dbtabfam = $db->query('SELECT * FROM aw_famille_tank');
    ?>
    <table border=1 cellspacing=0 cellpadding=0 width=50%>
        <caption> Liste de tank Armored</caption>
        <tr valign=middle>
            <th align=center>ID</th>
            <th align=center>NOM</th>
            <th align=center>RANG</th>
            <th align=center>TYPE</th>
            <th align=center>LOGO</th>
            <th align=center>ID FAM</th>
            <th align=center>CARACTERISTIQUE</th>
     
        </tr>
        <?php
     
    // On affiche chaque entrée du tableau fammille de tank une à une
    while ($tablistank = $dbtablistank->fetch() )
        {     
            ?>
                <tr valign=middle>
                    <td align=center><?php echo $tablistank['idtank']; ?></td>
                    <td align=center><?php echo $tablistank['nomtank']; ?></td>
                    <td align=center><?php echo $tablistank['rangtank']; ?></td>
                    <td align=center>
                        <?php
                        while ($tabtype = $dbtabtype->fetch())
                            {
                                if ($tablistank['idtype'] == $tabtype['idtype'])
                                    {
                                        $imagetype="../../images/".$tabtype['logtype'];
                                        echo $tabtype['nomtype']." ";
                                        echo '<img src="'.$imagetype.'" alt="" />';
                                    }
                            }
                        $dbtabtype->closeCursor();
                        ?>
                    </td>
                    <td align=center>
                        <?php
                            $imagetank="../../images/".$tablistank['logtank'];        
                            echo '<img src="'.$imagetank.'" alt="" />';
                        ?>
                        </td>
                    <td align=center>
                        <?php
                            while ($tabfam = $dbtabfam->fetch())
                                {
                                    if ($tablistank['idfam'] == $tabfam['idfam'])
                                        {
                                            $imagefam="../../images/".$tabfam['log_fam'];        
                                            echo '<img src="'.$imagefam.'" alt="" />';
                                        }
                                }
                            $dbtabfam->closeCursor();
                        ?>
                    </td>
                    <td align=center><?php echo $tablistank['cartank']; ?></td>
                </tr>
            <?php
        }
    ?>
    </table>
    merci de pour votre aide.

    bien à vous!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour, et bienvenu sur DVP,

    il suffit d'utiliser des JOINTURES :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sqlTOUT = "SELECT * 
    	FROM aw_liste_tank TNK
    	INNER JOIN aw_famille_tank FAM 
    		ON TNK.idfam = FAM.idfam
    	INNER JOIN aw_type_tank TYP 
    		ON TNK.idtype = TYP.idtype
    	";
    $dbTOUT = $db->query($sqlTOUT);

    Remarques :

    1/ TNK, FAM et TYP sont des "alias" des noms des tables (ça évite de les recopier x fois, et rend la requête plus lisible)

    2/ EVITER d'utiliser * dans la requête : préférer écrire directement les noms de chaque champ.
    (ATTENTION avec les jointures, s'il y a les même noms dans plusieurs tables...).
    Dernière modification par Invité ; 20/05/2017 à 16h47.

  3. #3
    Candidat au Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Mai 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 5
    Points : 4
    Points
    4
    Par défaut merci
    bonjour et merci pour ta réponse,

    je suis un débutant en php, j'ai des solides bases en C++ ce qui m'a permis de réaliser un certain nombre de chose.
    mais la j'avoue, je ne vois pas ce que je dois faire.

    ou dois je déclarer ma jointure à la place du 2 eme while?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     while ($tabtype = $dbtabtype->fetch())
                            {
                                if ($tablistank['idtype'] == $tabtype['idtype'])
                                    {
                                        $imagetype="../../images/".$tabtype['logtype'];
                                        echo $tabtype['nomtype']." ";
                                        echo '<img src="'.$imagetype.'" alt="" />';
                                    }
                            }
                        $dbtabtype->closeCursor();
    aurais tu la gentillesse de prendre un peu de temps pour m'expliquer.
    en te remerciant d'avance.

  4. #4
    Invité
    Invité(e)
    Par défaut
    quand j'appel l'affichage de la liste des tans, je veux faire afficher les images du type et de la famille
    Ca nécessite qu'UNE SEULE requête : celle que je t'ai fournie.

    Les jointures "ramènent" les infos des autres tables.

    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
    <?php // requête : TOUS les TANKS, avec leur FAMILLE et TYPE
    $sqlTOUT = "SELECT 
    	TNK.logtank,
    	FAM.log_fam,
    	TYP.logtype, TYP.nomtype
    	FROM aw_liste_tank TNK
    	INNER JOIN aw_famille_tank FAM 
    		ON TNK.idfam = FAM.idfam
    	INNER JOIN aw_type_tank TYP 
    		ON TNK.idtype = TYP.idtype
    	";
    $dbTOUT = $db->query($sqlTOUT);
     
     while ($row = $dbTOUT->fetch())
    {
     
           // image FAMILLE
           $imagefamille="../../images/".$row['log_fam'];        
           echo $row['nomtype']." ".'<img src="'.$imagefamille.'" alt="" />';
     
           // image TYPE
           $imagetype="../../images/".$row['logtype'];        
           echo $row['nomtype']." ".'<img src="'.$imagetype.'" alt="" />';
     
           // image TANK
           $imagetank="../../images/".$row['logtank'];        
           echo '<img src="'.$imagetank.'" alt="" />';
           // ...
    }
    'log_fam', 'logtype', 'logtank' : tu devrais uniformiser (normaliser) l'écriture de tes données (ici, avec ou sans underscore).
    Ca évitera aussi d'autres erreurs bêtes et confusions.

  5. #5
    Candidat au Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Mai 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Merci encore
    Bon j'ai refait le code suivant tes recommandations

    j'ai laissé des choses inutiles pour aller vite.
    J'ai des perdus des infos mais du coup je ne vois plus mes infos d'avant
    je pense qu'il faut récupérer l'ensemble des table et les fusionner.

    c'est bien ca le principe ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Oui, c'est ça.

    Il faut que tu ajoutes dans la requête tous les champs que tu veux utiliser/afficher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sqlTOUT = "SELECT 
    	TNK.logtank, TNK.xxxx, TNK.yyyy,
    	FAM.log_fam, FAM.aaaa, FAM.bbbb,
    	TYP.logtype, TYP.nomtype, ...... (ajouter tous les champs nécessaires)
    	FROM ........
    Dans ton cas, comme tu n'as que peu de champs à récupérer
    (et que tu n'as pas 2 noms de champs identiques susceptibles de créer une confusion),
    tu peux mettre * :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sqlTOUT = "SELECT 
    	*
    	FROM ........

  7. #7
    Candidat au Club
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Mai 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 5
    Points : 4
    Points
    4
    Par défaut OOOOOOOOHHHHH MERCI MERCI
    OH EXTRA !!!!!!!!!!!!!

    Puree c'est puissant comme truc......................
    MERCI ENCORE !
    c'est trop top!

    ouah je suis sur le cul !!!!
    et ben merci!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/11/2013, 13h43
  2. problème avec simpleXML et boucle while
    Par mawkli dans le forum Langage
    Réponses: 2
    Dernier message: 27/07/2012, 16h08
  3. problème avec l'affichage de ma requête sur mon formulaire
    Par nabgre dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 29/05/2012, 19h29
  4. [XSL-FO] Petit problème avec l'affichage de mon background-image
    Par citizen87 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 10/09/2009, 12h56
  5. Problème avec variable dans boucle DO WHILE
    Par bandit_debutant dans le forum Langage
    Réponses: 13
    Dernier message: 25/02/2008, 16h34

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