Nous avons vu un moyen de créer une base de données [DB] MySQL avec phpMyAdmin, DB que nous avons nommée "Infobrol" sur le serveur mysql5test.
Nous avons vu ensuite comment créer une table avec phpMyAdmin, table que nous avons nommée "dictionnaire".
Enfin, nous avons vu comment ajouter des données dans notre table.
Voici pour rappel la structure de notre table :
Infobrol | Base de données Infobrol - Table dictionnaire sur le serveur mysql5test | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ces parties conçernent la partie "administration" de la gestion des données, par un outil intégré ou extérieur à notre site. Nous allons voir maintenant comment utiliser les informations de la base de données dans nos pages Web.
Comme nous allons devoir manipuler des données, nous devons prendre un moment pour comprendre comment elles sont structurées dans la DB. Nous pouvons nous représenter notre structure de données comme des tableaux (les tables de la DB), qui comportent des lignes (les “records” (en français, « enregistrements »)) et des colonnes (les « champs »[5])
Un enregistrement est donc une ligne de notre tableau, composée de toutes les données qui constituent une entité.
Les colonnes (les « champs »[5]) groupent toutes les données de même type et dont la signification est identique.
Comment aller chercher dans la DB les données que nous avons sauvé dans notre table dictionnaire ?
Comme nous l'avons vu dans les pages précédentes, PHP n'est pas un langage d'interrogation de données. Nous allons donc utiliser SQL [“Structured Query Language”[6]].
SELECT * FROM `dictionnaire`;
Majuscules et minuscules
Nous pouvons utiliser des majuscules ou des minuscules pour les commandes SQL, cela n'a pas d'importance[8]. J'ai pris l'habitude de noter les mots réservés de SQL en majuscule et les noms des tables et des champs en minuscule, mais j'ai constaté par la suite que le contraire est plus répendu.
Cette requête charge tous les champs (utilisation de l'étoile après le mot SELECT) de toutes les lignes de la table dictionnaire.
Nous avons ici entouré le nom de la table par des accents aigus diacritiques[9] comme le résultat de la requête généré par phpMyAdmin, mais ce n'est absolument pas nécessaire, et nous ne les emploierons plus par la suite.
Si nous ne désirons pas charger toutes les colonnes (les champs), nous pouvons remplacer l'étoile par les champs à charger.
SELECT mot, def FROM dictionnaire;
Dans le langage des opérateurs relationnels, nous parlons de projection.
Si nous ne désirons pas charger toutes les lignes, nous pouvons procéder de deux manières :
Nous allons donc adapter notre requête pour ne charger que les champs mot et def, et limiter les résultats à la lettre "a".
SELECT * FROM dictionnaire WHERE lettre='a';
Dans le langage des opérateurs relationnels, nous parlons de sélection.
Nous pouvons à présent demander à PHP d'envoyer notre commande SQL vers la DB MySQL grâce à la fonction PHP mysql_query.
Ensuite, nous avons le choix entre deux manières pour récupérer les données pour chaque ligne :
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Dictionnaire: lettre a</title> </head> <body> <h1>Mots qui débutent par la lettre "a"</h1> <?php include_once('scripts/variables.php'); // creation de la requete $query='SELECT mot, def FROM dictionnaire WHERE lettre=\'a\';'; // execution de la requete //fermeture de la connexion // lecture des enregistrements // Les donnees d'un enregistrement sont dans le tableau $fields echo '<dl><dt>'.$fields['mot'].'</dt><dd>'.$fields['def'].'</dl>'; } // liberer les ressources }else{ echo '<p>Attention : impossible de se connecter à la DB.</p>'; } ?> </body> </html>
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Dictionnaire: lettre a</title> </head> <body> <h1>Mots qui débutent par la lettre "a"</h1> <?php include_once('scripts/variables.php'); // creation de la requete $query='SELECT mot, def FROM dictionnaire WHERE lettre=\'a\';'; // execution de la requete //fermeture de la connexion // lecture des enregistrements // Les donnees d'un enregistrement sont dans l'objet $obj echo '<dl><dt>'.$obj->mot.'</dt><dd>'.$obj->def.'</dl>'; } // liberer les ressources }else{ echo '<p>Attention : impossible de se connecter à la DB.</p>'; } ?> </body> </html>
Vous pouvez cliquer ici pour afficher les exemples de codes PHP sans les balises d'une page HTML (seulement les différences).
<?php // Affichage du formulaire echo '<form name="dicoSearch" method="post">'; echo '<fieldset>'; echo '<legend>Critères de recherche</legend>'; echo '<input type="text" name="dicoLetter" />'; echo '<input type="submit" name="Submit" value="Envoyer" />'; echo '<br /><label for="dicoLetter">Veuillez entrer une lettre et cliquer sur le bouton Envoyer</label>'; echo '</fieldset>'; echo '</form>'; echo '<br /><br />'; // Si une valeur a été postée $dicoLetter=$_POST['dicoLetter']; // On n'accepte qu'une seule lettre echo '<b>'.$dicoLetter.'</b> n\'est pas un argument valide...'; }else{ // Fichier qui contient les données nécessaires include('scripts/variables.php'); // Fichier dans lequel on se connecte sur la DB include ('scripts/dbconnect.php'); // Requête à exécuter $query = 'SELECT mot, def FROM dictionnaire WHERE lettre = \''.$dicoLetter.'\';'; // Résultat de la requête // Nombre de lignes trouvées // Fichier dans lequel on ferme la connexion include ('scripts/dbclose.php'); // Si nous avons des résultats if($cnt>0){ // Début de l'affichage des résultats echo '<div align="center">'; echo '<table width="90%" border="0" cellpadding="2" cellspacing="1" class="table">'; echo '<thead><tr><th>N°</th><th>Mot défini</th><th>Définition</th></tr></thead>'; echo '<tbody>'; // Déclaration d'un compteur $k=0; // Affichage des lignes // Une ligne sur 2 est d'un style différent echo '<tr class="'.(($k%2==0)?'td':'td2').'">'; echo '<td>'.++$k.'</td><td>'.$obj->mot.'</td><td>'.$obj->def.'</td>'; echo '</tr>'; } // Fin du tableau echo '</tbody>'; echo '</table>'; }else{ // Message si une valeur a été postée mais que la requête n'a produit aucun résultat echo 'Aucun enregistrement ne correspond à <b>'.$dicoLetter.'</b>'; } } ?>
Nous pouvons trier les éléments de la base de données grâce à l'instruction ORDER BY, suivie du nom du champ sur lequel porte le tri.
Cette instruction peut être suivie des options ASC ou DESC qui permettent un tri ascendant ou descendant.
La page de résultats est similaire à la précédente (nous ne présentons que les enregistrements dont le champ "lettre" est égal à la lettre demandée), mais nous permet de sélectionner le type de tri effectué sur le champ "mot", et nous présente la requête à la manière de PhpMyAdmin.
Injection de code SQL
Ces exemples sont simples afin de les comprendre plus facilement. Mais il faut toujours sécuriser les données que l'utilisateur nous fournit.
En effet, si nous utilisons les données du formulaire sans les vérifier, une personne malveillante peut injecter du code avec les données, et par exemple vider complétement la base de données, ou récupérer des données confidentielles, etc.
Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher les interactions avec les réseaux sociaux sur ces pages.
19 mots clés dont 0 définis manuellement (plus d'information...).
Avertissement
Cette page ne possède pas encore de mots clés manuels, ceci est donc un exemple automatique (les niveaux de pertinence sont fictifs, mais les liens sont valables). Pour tester le nuage avec une page qui contient des mots définis manuellement, vous pouvez cliquer ici.Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher le nuage de mots clés.
Recherche (afficher)
Utilisateur (masquer)
Navigation (masquer)
Apparence (afficher)
Stats (afficher)
Citation (masquer)