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 :

Explode : récupérer valeurs champs suite requête


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 402
    Par défaut Explode : récupérer valeurs champs suite requête
    Bonjour,

    Ma question étant une question de débutant, je me permets de poster ici le message que j'ai posté hier sur le forum PHP & MYSQL. Il a peut-être plus sa place sur le forum débuter (les modérateurs peuvent s'ils le souhaitent supprimer mon message du forum PHP & MYSQL).

    J'ai une base de données MYSQL qui répertorie mes livres et qui comporte plusieurs tables dont les suivantes :
    - 1 table LIVRE comportant notamment comme champs : ID_LIVRE et TITRE
    - 1 table CATEGORIE comportant comme champs : ID_CATEGORIE et NOM_CATEGORIE (c-a-d roman, document, essais etc)
    - 1 table CLASSIFIE comportant comme champs : ID_LIVRE et ID_CATEGORIE
    - 1 table GENRE comportant comme champs : ID_GENRE et NOM_GENRE (c-a-d thriller, polar, SF etc)
    - 1 table THEMATISE comportant comme champs : ID_LIVRE et ID_GENRE

    Pour avoir des lignes de résultat du style,

    titre categories genres
    -------------------------------------------------------------------
    Titre 1 Categorie 2|Categorie 4 Genre 1|Genre 3

    j'utilise dans ma requête GROUP_CONCAT :
    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
     
    try
    {
     
    	$bdd = new PDO('mysql:host=localhost;dbname=bibliosql', 'root', '');
     
    }
    catch(Exception $e)
    {
     
            die('Erreur : '.$e->getMessage());
    }
     
    	$reponse = $bdd->query('SELECT L.TITRE AS titre,
        GROUP_CONCAT(DISTINCT C.NOM_CATEGORIE SEPARATOR '|') AS categories,
        GROUP_CONCAT(DISTINCT G.NOM_GENRE SEPARATOR '|') AS genres
    FROM LIVRE L
    INNER JOIN CLASSIFIE A
        ON A.ID_LIVRE = L.ID_LIVRE
    INNER JOIN CATEGORIE C 
        ON A.ID_CATEGORIE = C.ID_CATEGORIE
    INNER JOIN THEMATISE T
        ON T.ID_LIVRE=L.ID_LIVRE
    INNER JOIN GENRE G
        ON G.ID_GENRE = T.ID_GENRE
    GROUP BY L.id_livre
    ORDER BY L.TITRE
    LIMIT 0,500');
    Voilà pour la partie SQL. Je coince sur la partie gestion de l'affichage en PHP.
    1) Comment récupérer les différentes valeurs du champ TITRE ? Grâce à foreach ? Mais je ne sais pas comment m'y prendre.
    2) Concernant la récupération des différentes valeurs sur les champs NOM_CATEGORIE et NOM_GENRE, je crois qu'il faut utiliser explode et foreach ? Ici non plus, je ne sais pas comment m'y prendre.
    Je précise que je suis un débutant n'ayant aucune pratique. Pouvez-vous m'aider à écrire le code permettant de gérer l'affichage souhaité ? Merci d'avance.

  2. #2
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonjour, il faut que tu fasses ceci :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    foreach($reponse as $row)
         echo $row['titre'];

    Tu peux également faire quelque chose comme ceci :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $reponse = $bdd->query('SELECT...', PDO::FETCH_OBJ);
     
    foreach($reponse as $row)
         echo $row->titre;

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 402
    Par défaut
    Merci Madfrix. Pour afficher le titre de mes livres, j'ai donc fait ce 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=bibliosql', 'root', '');
     
    }
    catch(Exception $e)
    {
     
            die('Erreur : '.$e->getMessage());
    }
     
    	$reponse = $bdd->query('SELECT L.TITRE AS titre
    	
    	from livre L
    LIMIT 0,500'); 
     
     
     foreach($reponse as $row)
         echo '<br/>'.$row['titre'].'<br/>';;
     
     
     ?>
    Effectivement mes titres sont listés. Mais pour afficher le(s) genres et catégorie(s) rattachés à ces titres, je dois faire , je crois, la requête suivante :
    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
    SELECT L.TITRE AS titre,
        GROUP_CONCAT(DISTINCT C.NOM_CATEGORIE SEPARATOR '|') AS categories,
        GROUP_CONCAT(DISTINCT G.NOM_GENRE SEPARATOR '|') AS genres
    FROM LIVRE L
    INNER JOIN CLASSIFIE A
        ON A.ID_LIVRE = L.ID_LIVRE
    INNER JOIN CATEGORIE C 
        ON A.ID_CATEGORIE = C.ID_CATEGORIE
    INNER JOIN THEMATISE T
        ON T.ID_LIVRE=L.ID_LIVRE
    INNER JOIN GENRE G
        ON G.ID_GENRE = T.ID_GENRE
    GROUP BY L.id_livre
    ORDER BY L.TITRE
    LIMIT 0,500
    Si j'essaye d'afficher la page avec cette requête au sein du code précédent, j'ai une erreur : "Warning: Invalid argument supplied for foreach()"
    C'est là je suppose qu'il faut prévoir l'explode pour gérer l'affichage des genres et catégories séparés par des "|" si un titre possède plusieurs genres ou catégories. Pouvez-vous de nouveau m'aider concernant cette fois-ci l'explode et le foreach associé ? Merci d'avance.

  4. #4
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Citation Envoyé par almoha Voir le message
    Si j'essaye d'afficher la page avec cette requête au sein du code précédent, j'ai une erreur : "Warning: Invalid argument supplied for foreach()"

    Alors tu as probablement une erreur dans ta requête elle-même. L'as tu testé sous phpMyAdmin par exemple ?

    Une fois quelle sera valide, tu pourras récupérer tes categories et tes genres via un explode dans ton foreach en effet :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $tab_categories = explode('|', $row['categories']);
    $tab_genres = explode('|', $row['genres']);

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 402
    Par défaut
    Ma requête fonctionnait avec phpMyAdmin mais pas avec PHP. J'ai trouvé la raison : le caractère séparateur | devait être entouré de " " et non de ' '.
    Ma requête est dorénavant valide mais je n'arrive pas à intégrer ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tab_categories = explode('|', $row['categories']);
    $tab_genres = explode('|', $row['genres']);
    dans mon code après la requête, au niveau du foreach :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach($reponse as $row)
     
         echo '<br/>'.$row['titre'].'<br/>';
    pour récupérer les categories et tes genres par un echo via le explode.

    Merci d'avance de ton aide complémentaire.

  6. #6
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Il suffit juste de faire ceci :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $tab_categories = array();
    $tab_genres = array();
     
    foreach($reponse as $row){
          $titre = $row['titre'];
          $tab_categories = explode('|', $row['categories']);
          $tab_genres = explode('|', $row['genres']);
    }

    Ainsi pour chaque ligne retournée ($row) tu as la liste des categories ans le tableau $tab_categories et la liste des genres dans le tableau $tab_genres

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

Discussions similaires

  1. [MySQL] Explode : récupérer valeurs champs suite requête
    Par almoha dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 30/07/2010, 21h48
  2. Récupérer un champs suite à une requête
    Par biddal dans le forum Requêtes
    Réponses: 9
    Dernier message: 21/02/2008, 14h46
  3. récupérer valeur champ libre formulaire dans un état
    Par stagolee dans le forum VBA Access
    Réponses: 1
    Dernier message: 10/01/2008, 13h18
  4. Réponses: 3
    Dernier message: 06/06/2007, 19h47
  5. Récupérer valeur champs de formulaire dynamique
    Par antillejj dans le forum ASP
    Réponses: 1
    Dernier message: 22/12/2006, 07h17

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