Affichage des données de la base

Maintenant qu'on a entré des données dans la table SQL rounds à l'aide de phpMyAdmin, on veut écrire un script PHP qui soit capable d'aller récupérer les enregistrements de cette table et de les afficher dans le navigateur.

On va l'appeller select_all.php et le placer dans le répertoire (à créer) C:\Program Files\EasyPHP\www\gaming\.
Dans ce répertoire on va regrouper tous les scripts du projet Gaming.


select_all.php (version 1)

Le script ci-dessous procède en 7 étapes :

  1. Fabrication d'une requête SQL.
  2. Connexion au serveur MySQL.
  3. Choix d'une base.
  4. Envoi de la requête SQL au serveur MySQL et récupération du résultat de cette requête dans une variable.
  5. Affichage d'un message de réussite.
  6. Libération de la mémoire occupée par le résultat de la requête.
  7. Déconnexion.
<?php
  error_reporting(E_ALL);

  // 1. Fabrication d'une requête SQL
  $ma_requete = "SELECT * FROM `rounds` ORDER BY `date`,`num_round`";

  // 2. Connexion au serveur MySQL
  $db_link = mysql_connect("localhost", "mon_username", "mon_password")
                or die(mysql_error());

  // 3. Choix d'une base
  mysql_select_db("ma_base",$db_link) or die(mysql_error());

  // 4. Envoie de la requête SELECT
  $result = mysql_query($ma_requete,$db_link) or die(mysql_error());
?>
<HTML>
<BODY>
<H1>R&eacute;cup&eacute;ration OK<H1>
</BODY>
</HTML>
<?php
  // 6. Libération de la mémoire occupée par le résultat de la requête
  mysql_free_result($result);
  
  // 7. Déconnexion
  mysql_close($db_link);
?>

Ce qu'on appelle « fabriquer une requête SQL » consiste simplement à stocker dans une variable (ici la variable $ma_requete) l'énoncé de la requête sous forme d'une chaîne de caractère.

Fonctionnement de l'instruction $result = mysql_query($ma_requete,$db_link) or die(mysql_error()); :

Pour l'instant, on ne sait pas encore afficher le contenu d'un identifiant de résultat (malheureusement un simple echo $result ou print_r($result) ne fonctionnent pas).

Chercher les informations relatives aux fonctions PHP mysql_connect(), mysql_select_db(), mysql_query() et mysql_close() avec l'aide en ligne : http://www.php.net/.

Visualiser l'exécution de ce script : clic droit sur l'icône EasyPHP + Web local + sélectionner le répertoire gaming/ puis le script select_all.php.


select_all.php (version 2)

On reprend la version 1 et on remplace l'étape 5 par :

  1. Affichage du résultat de la requête SELECT (avec utilisation d'une balise <HR> comme séparateur d'enregistrements).

Comme on ne connaît pas à priori le nombre d'enregistrements contenus dans le résultat, on va automatiser le nombre de lignes à afficher en utilisant une boucle while sur la fonction mysql_fetch_assoc().

<?php

  ...

?>
<HTML>
<BODY>

<?php
  while ($row = mysql_fetch_assoc($result)) {
    echo "<HR>";
    echo $row['date'] . " ";
    echo $row['num_round'] . " ";
    ...
  }
?>
</BODY>
</HTML>

Aidez vous de la coloration syntaxique pour débugger votre script.

Visualisez l'exécution de votre script.


select_all.php (version 3)

On reprend la version 2 et on remplace l'étape 5 par :

  1. Affichage du résultat de la requête SELECT dans un tableau (un enregistrement par ligne du tableau).
<?php

  ...

?>
<HTML>
<BODY>

<TABLE border="2">
<?php
  while ($row = mysql_fetch_assoc($result)) {
	echo "<TR>";
	echo "<TD>" . $row['date'] . "</TD>";
	echo "<TD>" . $row['num_round'] . "</TD>";
	...
	echo "</TR>";
  }
?>
</TABLE>

</BODY>
</HTML>

Aidez vous de la coloration syntaxique pour débugger votre script.

Visualisez l'exécution de votre script.

Visualisez le code source de la page HTML produite par votre script. Est-il très lisible ?


select_all.php (version 4)

La table rounds contient des colonnes de type varchar : ce sont les colonnes map, place1, place2, ... , place6. Ces colonnes peuvent à priori contenir n'importe quoi. Par exemple, rien n'empêche un joueur de choisir comme pseudo ha</TR>ho, ou </TABLE>, ou <INPUT TYPE="text">, ou n'importe qu'elle chaîne de caractère contenant du code HTML ... C'est tordu mais c'est possible !

Insérer un enregistrement dans la table rounds en plaçant des balises HTML et des accents dans les champs de type varchar (utiliser l'interface phpMyAdmin). Visualiser le contenu de la table rounds à l'aide du script select_all.php.

Pour qu'une chaîne de caractères soit affichée telle quelle par le navigateur, il faut l'encoder avant de lui envoyer. L'encodage se fait à l'aide de la fonction htmlentities() :

<?php

  ...

?>
<HTML>
<BODY>

<TABLE border="2">
<?php
  while ($row = mysql_fetch_assoc($result)) {
	echo "<TR>";
	echo "<TD>" . $row['date'] . "</TD>";
	echo "<TD>" . $row['num_round'] . "</TD>";
	echo "<TD>" . $row['jeu'] . "</TD>";
	echo "<TD>" . htmlentities($row['map']) . "</TD>";
	echo "<TD>" . $row['nb_joueurs'] . "</TD>";
	echo "<TD>" . htmlentities($row['place1']) . "</TD>";
	...
	echo "</TR>\n";
  }
?>
</TABLE>

</BODY>
</HTML>

Modifiez votre script pour qu'il encode les champs de type varchar avant de les envoyer au navigateur. Tester cette nouvelle version (penser à visualiser le code source de la page HTML produite).


select_all.php (version 5)

Placer le titre "Liste de tous les rounds" sur la page produite par le script select_all.php. Améliorer la mise en forme du tableau et de la page en général.

Quelques balises et attributs de balises utiles :


Page d'accueil de Hervé PagèsValid HTML 4.01!Contact : herve.pages@free.fr