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 :

Lecture BdD et affichage


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut Lecture BdD et affichage
    Bonjour, j'ai une base de données intitulée dbtest & 4 tables (auteur, livre, livre_theme, theme)

    Voici mon code : Les Livres appartenant à l'Auteur Marie

    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
     
     
    class Ouvrage {
     
    	public function __construct() {
     
    	}
     
    public function getAuteurLivre() {
     
    		$mysqli = new mysqli('localhost', 'root', '10111110', 'dbtest');
    		$mysqli->set_charset("UTF8");
     
    		if($mysqli->connect_errno) {
     
    			echo 'Erreur de connexion ' . $mysqli->connect_error;
     
    			exit;
    		}
     
    		$query = 'SELECT A.id, nom, L.id, titre, auteur_id
     
    		FROM auteur AS A
    		INNER JOIN livre AS L
    		ON A.id = L.auteur_id
    		WHERE A.id = 2';
     
    		$result = $mysqli->query($query);
     
    		if(!$result) {
     
    			echo 'Erreur de requête ' . $mysqli->error;
    		}
    		else {
     
    			while($row = $result->fetch_array()) {
     
    				$id_auteur = $row['id'];
    				$nom = $row['nom'];
    				$id_livre = $row['id'];
    				$titre = $row['titre'];
    				$auteur_id = $row['auteur_id'];
     
                    $results[$id_auteur]['Identification Auteur'] = $id_auteur;
    				$results[$id_auteur]['Nom Auteur'] = $nom;
    				$results[$id_livre]['Identification Livre'] = $id_livre;
    				$results[$id_livre]['Titre Livre'] = $titre;
    				$results[$id_livre]['Id Auteur'] = $auteur_id;
    			}
     
    			return $results;
    		}
     
    		$mysqli->close();
    	}
    }
    display.php

    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 require('class/Ouvrage.php'); ?>
     
    <?php
     
    	$result = new Ouvrage();
    	$results = $result->getAuteurLivre();
     
    	?>
     
    	<h1>Les Livres appartenant à l'Auteur Marie</h1>
    	<table border="1">
    		<thead>
    			<tr>
    				<th>Identification Auteur</th>
    			    <th>Nom Auteur</th>
    			    <th>Identification Livre</th>
    			    <th>Titre Livre</th>
    			    <th>Id Auteur</th>
    			</tr>
    		</thead>
     
    		<tbody>
    			<?php if(!empty($results)) : ?>
    				<?php foreach($results as $id => $result) : ?>
    					<tr>
    						<td><?php echo $result['Identification Auteur']; ?></td>
    				        <td><?php echo $result['Nom Auteur']; ?></td>
    				        <td><?php echo $result['Identification Livre']; ?></td>
    				        <td><?php echo $result['Titre Livre']; ?></td>
    				        <td><?php echo $result['Id Auteur']; ?></td>
    				    </tr>
    			    <?php endforeach ?>
    		    <?php endif ?>
    		</tbody>
    	</table>
    La requête fonctionne bien dans PHPMyAdmin mais pas dans display.php

    Ça me donne ceci

    Identification Auteur Nom Auteur Identification Livre Titre Livre Id Auteur
    1 Marie 1 PHP et Mysql 2
    2 Marie 2 Apprendre PHP 2
    5 Marie 5 Projet PHP 2

    Je vous remercie d'avance pour votre aide. Bonne journée à tous

  2. #2
    Membre chevronné Avatar de Freudd
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 165
    Par défaut
    Bonjour cyci60,

    Peux-tu nous expliquer le résultat que tu attends dans ta table ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut
    Le résultat que j'attends : Les Livres appartenant à l'Auteur Marie

    Identification Auteur Nom Auteur Identification Livre Titre Livre Id Auteur
    2 Marie 1 PHP et Mysql 2
    2 Marie 2 Apprendre PHP 2
    2 Marie 5 Projet PHP 2

  4. #4
    Membre chevronné Avatar de Freudd
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 165
    Par défaut
    Je pense que c'est parce que tu n'as pas utilisé l'identifiant de ton livre et celui de ton auteur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $id_auteur = $row['id']; // ceci n'est pas l'id de ton auteur
    $nom = $row['nom'];
    $id_livre = $row['id']; // ça c'est l'id de ton livre ?
    $titre = $row['titre'];
    $auteur_id = $row['auteur_id']; // ça semble l'id de ton auteur

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    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
    		while($row = $result->fetch_array()) {
     
    				$id_auteur = $row['id'];
    				$nom = $row['nom'];
    				$id_livre = $row['id'];
    				$titre = $row['titre'];
    				$auteur_id = $row['auteur_id'];
     
                    $results[$id_auteur]['Identification Auteur'] = $id_auteur;
    				$results[$id_auteur]['Nom Auteur'] = $nom;
    				$results[$id_livre]['Identification Livre'] = $id_livre;
    				$results[$id_livre]['Titre Livre'] = $titre;
    				$results[$id_livre]['Id Auteur'] = $auteur_id;
    			}
     
    			return $results;
    1- Tu as :
    • $results[$id_auteur] et $results[$id_livre] :
    • $id_auteur et $auteur_id ??
    • $id_auteur = $id_livre ??
    • ...

    ça ne va pas !


    2- ASTUCE pour différencier clairement les données récupérées de la bdd, quand tu as PLUSIEURS TABLES avec des noms de colonnes identiques.

    • -> Créer des ALIAS de colonnes !

    La requête devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    		$query = 'SELECT 
    			A.id AS auteur_id, 
    			A.nom AS auteur_nom, 
    			L.id AS livre_id, 
    			L.titre AS livre_titre, 
     
    		FROM auteur AS A
    		INNER JOIN livre AS L
    		ON A.id = L.auteur_id
    		WHERE A.id = 2';
    2- Et là, TOUT le code (while.... return...) se résume à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    			$results = $result->fetch_all(MYSQLI_ASSOC);
    			return $results;
    et à l'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    				<?php foreach($results as $row) : ?>
    					<tr>
    						<td><?php echo $row['auteur_id']; ?></td>
    				        <td><?php echo $row['auteur_nom']; ?></td>
    				        <td><?php echo $row['livre_id']; ?></td>
    				        <td><?php echo $row['livre_titre']; ?></td>
     
    				    </tr>
    			    <?php endforeach ?>
    Dernière modification par Invité ; 07/05/2020 à 17h49.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut
    Bonjour, merci à vous , ça marche

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/07/2008, 21h00
  2. Probleme récupération image bdd pour affichage
    Par kakahn dans le forum Struts 1
    Réponses: 6
    Dernier message: 03/01/2008, 19h47
  3. [GeoTools] Lecture de Shapefile / Affichage
    Par othouven dans le forum SIG : Système d'information Géographique
    Réponses: 1
    Dernier message: 04/10/2007, 15h39
  4. [sql Flash] Lecture BDD dans Flash , INSERT ou UPDATE
    Par Keroik dans le forum Requêtes
    Réponses: 1
    Dernier message: 06/08/2007, 11h20

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