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 :

afficher 2 tables [Débutant(e)] [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 293
    Par défaut afficher 2 tables
    bonjour

    je vais essayer d'expliquer correctement ce que je veux faire

    j'ai 2 tables : table_tarifs et table_types

    dans table_tarifs il y a comme champ id, produit, type_produit et prix

    dans table_types il y a comme champ id et type_produit

    je voudrais afficher tous les types_produits avec pour chacun d'eux les produits pour chaque type

    ex

    Maquillage
    -rouge à lèvres
    - ...

    soins

    - ....
    - ....

    j'ai essayé cela comme 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
     
    <?php
    $host="localhost"; // localhost pour le local
    $user="root";//nom d'utilisateur
    $pass="";//mot de pass
    $base="base";//nom de la bases de données
    $link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
    mysql_select_db($base) or die ('Erreur :'.mysql_error());
    $sql="select * FROM table_types";
    $result = mysql_query($sql,$link)  or die ('Erreur : '.mysql_error() );
    while($row = mysql_fetch_array($result)) 
    {
     
    echo $row['type'];?><br /><?php
       $sql2="select * FROM table_tarifs";
       $result2 = mysql_query($sql2,$link)  or die ('Erreur : '.mysql_error() );
       while($row = mysql_fetch_array($result2)) 
       {
       ?>
       <span style="color:#cccccc;"><?php echo $row['produit'];?></span><br /><?php
       }
    }
    ?>
    ce code me donne tous mes types_produit et pour chaque type il me donne tous les produits en ne faisant pas la classification par rapport au type de produit ce qui est normal avec ce code que j'ai fait

    donc je voudrais qu'il affiche tous les types_produits et pour chaque type tous les produits

    je pense qu'il faut changer cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql2="select * FROM table_tarifs";
    mais comment faire pour qu'il affiche par rapport au type, il faudrait faire qqch comme cela mais je ne sais pas quoi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql2="select * FROM table_tarifs where...";
    bon j'espère être clair

    merci

  2. #2
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Je dirai qu'il suffit de trier tes résultats selon le type_produit donc en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql2="select * FROM table_tarifs ORDER BY type_produit";
    Par contre je comprends pas l'intéret de ton autre table qui contient deux champs qui existent deja dans la première table.

  3. #3
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql2="select * FROM table_tarifs where type_produit = " . $row['type_produit'];
    ou un truc qui s'en approche suivant les correspondances de tes champs (et en supposant que type_produit est un champ entier)...

    mais +1 avec koopajah la structure semble bizarre, une explication textuelle des champs ne serait pas de trop

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 293
    Par défaut
    c'est qu'il y a beaucoup de types produit donc c'est pour quand on fait un ajout de produit on a directement une list box avec tous les types de produits

  5. #5
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Ta première table permet de récupérer tous les types_produits avec quelquechose comment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT(type_produit) from table_tarifs
    Normalement quand on a une structure comme la tienne, ce qu'on a c'est une table avec la liste des types produits en texte clair, un id entier comme identifiant pour chaque type. Dans l'autre table, on a pour chaque article un type_produit qui est un entier (et qui correspond à l'id de la table des types produits)
    mais dans ton cas, une unique table rend les choses beaucoup plus simples et claires (sauf si bien sur tu as un ensemble de tables derrière qui utilisent ces type_produit)

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 293
    Par défaut
    voilà dans ma

    table type_produits j'ai par ex

    id type
    1 maquillage
    2 soins
    3 manucurie
    ...

    table produits

    id produit type produit
    1 rouge à lèvres maquillage
    2 fond teint maquillage
    3 soin visage soins
    ....

    donc ce que je veux c'est que cela m'affiche tous les types de produits avec pour chaque type les produits correspondant

    j'aurais pu mettre dans mon select where type="soins" par ex

    mais si j'ajoute un type je dois à chaque fois faire une nouvelle requête donc je voudrais que ca se fasse automatiquement

    merci

  7. #7
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Dans ta table de produits tu devrais avoir ca :

    id produit type produit
    1 rouge à lèvres 1
    2 fond teint 1
    3 soin visage 2

    et non pas le nom du type_produit en double dans les tables, sinon cette table ne sert a rien!

    Pour ton probleme, je t'ai donné une solution, essaies de la tester avant de reformuler le meme probleme.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 293
    Par défaut
    bon j'ai fait cela

    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
     
    <?php
    $host="localhost"; // localhost pour le local
    $user="root";//nom d'utilisateur
    $pass="";//mot de pass
    $base="base";//nom de la bases de données
    $link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
    mysql_select_db($base) or die ('Erreur :'.mysql_error());
    $sql="SELECT DISTINCT(type) from table_types";
    $result = mysql_query($sql,$link)  or die ('Erreur : '.mysql_error() );
    while($row = mysql_fetch_array($result)) 
    {
     
    echo $row['type'];?><br /><?php
       $sql2="select * FROM table_tarifs where type_produit = " . $row['type'];
       $result2 = mysql_query($sql2,$link)  or die ('Erreur : '.mysql_error() );
       while($row = mysql_fetch_array($result2)) 
       {
       ?>
       <span style="color:#cccccc;"><?php echo $row['produit'];?></span><br /><?php
       }
    }
    ?>
    mais si vous pouvez m'éclairer un peu plus car je ne comprends pas très bien comment faire

    merci

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 293
    Par défaut
    si dans ma table table_tarifs je met le champ type_produit en entier j'aurais un problème pour faire un ajout, je ne pourais plus employer une list box employant les types_produit pour faire un ajout

  10. #10
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Je ne vois pas du tout l'intéret de votre table type_produit si vous laissez dans la table des tarifs les type_produits en texte clair. Comme expliqué plutot, vous pouvez tres bien récupérer depuis la table des tarifs la liste des types_produits.
    Mais le probleme n'est pas la. Pour afficher la liste des produits, groupés par type de produits il faut faire quelquechose de ce style:

    Code php : 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
     
    // Recupere la liste des produits, ordonnés par type_produit
    $sql2="select * FROM table_tarifs ORDER BY type_produit";
    $res = mysql_query($sql2);
     
    /* une variable pour connaitre le type_produit courant (pour ne l'afficher que lorsqu'il change */
    $type_produit_courant = "";
     
    // pour chaque produit
    while($row= mysql_fetch_assoc($res)
    {
    // regarde si le type du produit est nouveau ou le meme qu'avant
    if($type_produit_courant != $result['type_produit'])
      {
      // on mémorise le type du produit
      $type_produit_courant = $row['type_produit'];
      // on l'affiche :
      echo $type_produit_courant . "<br/>";
      }
      echo "-" . $row['produit'] . "<br/>";
    }

    Essaies ce bout de code (non testé) ca devrait faire ce que tu veux, il faudra ensuite l'adapter pour ta mise en page

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 293
    Par défaut
    voilà j'ai modifié mon code comme tu m'as dit

    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
     
    <?php
    $host="localhost"; // localhost pour le local
    $user="root";//nom d'utilisateur
    $pass="";//mot de pass
    $base="bdd mincelisse";//nom de la bases de données
    $link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
    mysql_select_db($base) or die ('Erreur :'.mysql_error());
    // Recupere la liste des produits, ordonnés par type_produit
    $sql2="select * FROM table_tarifs ORDER BY type_produit";
    $res = mysql_query($sql2);
     
    /* une variable pour connaitre le type_produit courant (pour ne l'afficher que lorsqu'il change */
    $type_produit_courant = "";
     
    // pour chaque produit
    while($row= mysql_fetch_assoc($res)
    {
    // regarde si le type du produit est nouveau ou le meme qu'avant
    if($type_produit_courant != $result['type_produit'])
      {
      // on mémorise le type du produit
      $type_produit_courant = $row['type_produit'];
      // on l'affiche :
      echo $type_produit_courant . "<br/>";
      }
      echo "-" . $row['produit'] . "<br/>";
    }
     
    ?>
    mais j'ai une erreur

    Parse error: parse error in c:\program files\easyphp1-8\www\new mincelisse\tarif.php on line 193

    merci

  12. #12
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Il manque une parenthèse a la fin de la ligne du while()

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 293
    Par défaut
    oui désolé mais j'avais pas fait attention

    voilà le code que tu m'as donné m'affiche tous les enregistrements sans le type de produit

    donc j'ai modifié

    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
     
    <?php
    $host="localhost"; // localhost pour le local
    $user="root";//nom d'utilisateur
    $pass="";//mot de pass
    $base="bdd mincelisse";//nom de la bases de données
    $link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
    mysql_select_db($base) or die ('Erreur :'.mysql_error());
    // Recupere la liste des produits, ordonnés par type_produit
    $sql2="select * FROM table_tarifs ORDER BY type_produit";
    $res = mysql_query($sql2);
     
    /* une variable pour connaitre le type_produit courant (pour ne l'afficher que lorsqu'il change */
    $type_produit_courant = "";
     
    // pour chaque produit
    while($row= mysql_fetch_assoc($res))
    {
    // regarde si le type du produit est nouveau ou le meme qu'avant
    if($type_produit_courant != $res['type_produit'])
      {
      // on mémorise le type du produit
      $type_produit_courant = $row['type_produit'];
      // on l'affiche :
      echo $type_produit_courant . "<br/>";
      }
      echo $row['type_produit'];?><br /><?php
      echo "-" . $row['produit'] . "<br/>";
    }
     
    ?>
    bon mais maintenant cela m'affiche les enregistrements mais avec pour chaque enregistrement le type de produit

    EPILATION PINCE
    -CREATION SOURCILS A LA PINCE
    PEDICURE - MANUCURE
    -PEDICURIE MEDICALE (à l'institut)
    PEDICURE - MANUCURE
    -PEDICURIE MEDICALE (à domicile)
    PEDICURE - MANUCURE
    -BAIN PARAFFINE
    PEDICURE - MANUCURE
    -MANUCURIE
    POSE D'ONGLES
    -POSE D'ONGLES AVEC TIPS
    POSE D'ONGLES
    -ONGLES GEL
    POSE D'ONGLES
    -REAGREAGE ONGLES
    SOINS BOTOX LIKE
    -SOIN EVENEMENT LIFTANT
    SOINS BOTOX LIKE
    -CURE BOTOX LIKE (8 séances + produits)
    SOINS CHOCOLAT
    -SOIN CHOCOLAT (anti stress - anti pollution)
    SOINS PHYTOMER
    -SOIN LIFT REGARD
    SOINS PHYTOMER
    -SOIN SEA ESSENTIEL AMINCISSANT
    SOINS PHYTOMER
    -SOIN SEA ESSENTIEL SATIN
    SOINS PHYTOMER
    -SOIN SEA HOLISTIC RELAX. VISAGE ET CORPS
    SOINS PHYTOMER
    -SOIN SPA PRESTIGE HYDRATATION
    SOINS PHYTOMER
    -SOIN SPA PRESTIGE OGENAGE
    SOINS PHYTOMER
    -SOIN SEA ESSENTIEL OGENAGE - RIDES
    SOINS PHYTOMER
    -SOIN SEA ESSENTIEL - FERMETTE
    SOINS PHYTOMER
    -SOIN SEA ESSENTIEL - ANTI AGE
    SOINS PHYTOMER
    -SOIN SEA ESSENTIEL APAISANT
    SOINS PHYTOMER
    -SOIN SEA ESSENTIEL HYDRATANT
    SOINS PHYTOMER
    -SOIN SEA ESSENTIEL CRYOTONIC
    SOINS PRESTIGES
    -PEDICURIE PRESTIGE
    SOINS PRESTIGES
    -MANUCURIE PRESTIGE

    alors que je voudrais afficher une seule fois chaque type de produit avec en dessous tous les produits correspondant à ce type de produit

  14. #14
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    ....

    dans ton if() il faut remplacer $res['type_produit'] par $row['type_produit'] je me suis trompé de variable

    en meme temps, il y a des commentaires, le but est que tu comprennes aussi ce que fait le code, pas juste que tu copies/colles sinon tu ne pourras pas l'adapter...

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 293
    Par défaut
    c'est ce que je fais j'essaye de comprendre

    merci pour ton aide

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

Discussions similaires

  1. Afficher des tables en SQL
    Par medinfo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/04/2006, 10h14
  2. Formulaire affichant deux tables liées à une troisième
    Par Mimi-des-îles dans le forum Access
    Réponses: 1
    Dernier message: 23/02/2006, 13h47
  3. [C#] creer et afficher une table en code behind
    Par shams dans le forum ASP.NET
    Réponses: 9
    Dernier message: 13/07/2005, 16h51
  4. afficher les tables d'une BDD
    Par Samanta dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 04/07/2005, 18h09
  5. [JTable] afficher la table vide au début
    Par orgoz dans le forum Composants
    Réponses: 5
    Dernier message: 06/01/2005, 15h21

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