Cours pratique d'initiation à PHP/MySQL | Sommaire ![]() |
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.
Le script ci-dessous procède en 7 étapes :
<?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écupé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.
On reprend la version 1 et on remplace l'étape 5 par :
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.
On reprend la version 2 et on remplace l'étape 5 par :
<?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 ?
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).
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ès | Contact : herve.pages@free.fr |