Affichage des données de la table listeJV


Durée approximative de l'activité pratique (1h00) :



Pour la suite de l'initiation, on va crée une page web qui va lire une table d'une base de donnée contenant des descriptions de jeu vidéo.


Créer une requête


On va demander à MySQL de nous dire tout ce que contient la table listeJV.


Pour récupérer des informations de la base de données, nous avons besoin de notre objet représentant la connexion à la base. 


$reponse = $bdd->query('Tapez votre requête SQL ici');


On demande ainsi à effectuer une requête sur la base de données (query en anglais signifie « requête »).


On récupère ce que la base de données nous a renvoyé dans un autre objet, que l'on a appelé ici $reponse  .


Voici la première requête SQL que nous allons utiliser :


SELECT * FROM listeJV


Cela peut se traduire par : « Prendre tout ce qu'il y a dans la table listeJV ».


Analysons chaque terme de cette requête.

  • SELECT : en langage SQL, le premier mot indique quel type d'opération doit effectuer MySQL. Dans ce chapitre, nous ne verrons que SELECT. Ce mot-clé demande à MySQL d'afficher ce que contient une table.


  • * : après le SELECT, on doit indiquer quels champs MySQL doit récupérer dans la table. Si on n'est intéressé que par les champs « nom » et « support », il faudra taper :
    SELECT nom, support FROM listeJV

Si vous voulez prendre tous les champs, tapez *  . Cette petite étoile peut se traduire par « tout » : « Prendre tout ce qu'il y a… ».


  • FROM : c'est un mot de liaison qui se traduit par « dans ». FROM  fait la liaison entre le nom des champs et le nom de la table.


  • listeJV : c'est le nom de la table dans laquelle il faut aller piocher.


Effectuons la requête avec la méthode que l'on vient de découvrir :


<?php

$reponse = $bdd->query('SELECT * FROM listeJV);

?>


$reponse  contient maintenant la réponse de MySQL. L'ensemble des colonnes de la 1ère ligne.


Pour ne pas tout traiter d'un coup, on extrait cette réponse ligne par ligne, c'est-à-dire entrée par entrée.

Pour récupérer une entrée, on prend la réponse de MySQL et on y exécute fetch()  , ce qui nous renvoie la première ligne.

<?php

$donnees = $reponse->fetch();

?>


fetch en anglais signifie « va chercher ».


$donnees est un array (tableau) qui contient champ par champ les valeurs de la première entrée. Par exemple, si vous vous intéressez uniquement au champ "typeDeJeu" , vous utiliserez l'array $donnees['typeDeJeu']  .


Il faut faire une boucle pour parcourir les entrées une à une. Chaque fois que vous appelez $reponse->fetch()  , vous passez à l'entrée suivante. La boucle est donc répétée autant de fois qu'il y a d'entrées dans votre table.


En résumé cela donne :


<?php

try

{

       // On se connecte à MySQL

       $bdd = new PDO('mysql:host=localhost;dbname=initiation;charset=utf8', 'lecteurJV', 'lecteurJV');

}

catch(Exception $e)

{

       // En cas d'erreur, on affiche un message et on arrête tout

        die('Erreur : '.$e->getMessage());

}


// Si tout va bien, on peut continuer


// On récupère tout le contenu de la table listeJV

$reponse = $bdd->query('SELECT * FROM listeJV');


// On affiche chaque entrée une à une

while ($donnees = $reponse->fetch())

{

?>

    <p>

    <strong>Jeu</strong> : <?php echo $donnees['nom']; ?><br />

    Le jeu existe sur : <?php echo $donnees['support']; ?>, c'est un jeu de <?php echo $donnees['typeDeJeu']; ?> <br />

    A sa sortie le jeu valait <?php echo $donnees['prix']; ?> <br />

    Commentaires : <em><?php echo $donnees['commentaires']; ?></em>

   </p>

<?php

}


$reponse->closeCursor(); // Termine le traitement de la requête


?>


Ce qui affichera ceci lors de l'appel de la page listeJV.php




On fait une boucle pour chaque entrée de la table. On commence par l'entrée n° 1, puis l'entrée n° 2, etc. Chaque fois qu'on fait une nouvelle boucle, on passe en revue une autre entrée.

Quelle est la différence entre $reponse  et  $donnees  ?

$reponse  contenait toute la réponse de MySQL en vrac, sous forme d'objet.
$donnees  est un array renvoyé par le fetch()  . Chaque fois qu'on fait une boucle, fetch  va chercher dans $reponse  l'entrée suivante et organise les champs dans l'array $donnees  .

La ligne while ($donnees = $reponse->fetch())  ...

Cette ligne fait deux choses à la fois :

  • elle récupère une nouvelle entrée et place son contenu dans $donnees ;
  • elle vérifie si $donnees  vaut vrai ou faux.

Le fetch  renvoie faux ( false  ) dans $donnees  lorsqu'il est arrivé à la fin des données, c'est-à-dire quand toutes les entrées ont été passées en revue. Dans ce cas, la condition du while  vaut faux et la boucle s'arrête.

Vous noterez à la fin la présence de la ligne :


<?php $reponse->closeCursor(); ?>


Elle provoque la « fermeture du curseur d'analyse des résultats », cela évite d'avoir des problèmes à la requête suivante. Cela veut dire qu'on a terminé le travail sur la requête.


Si on ne veut récupérer qu'un seul champ, il faut faire :


SELECT nom FROM jeux_video


Reprenons le code complet précédent et adaptons-le pour afficher un nom de jeu par ligne :

<html>

<body>

<?php

try

{

    $bdd = new PDO('mysql:host=localhost;dbname=initiation;charset=utf8', 'lecteurJV', 'lecteurJV');

}

catch(Exception $e)

{

        die('Erreur : '.$e->getMessage());

}


$reponse = $bdd->query('SELECT nom FROM listeJV order by nom');


while ($donnees = $reponse->fetch())

{

    echo $donnees['nom'] . '<br />';

}


$reponse->closeCursor();


?>

</body>

</html>


Renverra uniquement le nom des jeux vidéo :



Maintenant que vous savez créer une base de données, insérer des données et lire ses données sur une page PHP, vous pouvez continuer votre activité pratique ici

Créé avec HelpNDoc Personal Edition: Simplifiez votre processus de documentation d'aide avec un outil de création d'aide