Sommaire du site
Présentation
Comment apprendre
L'équipement
La page web
Styles et CSS
HTML, structure de la page
HTML, éléments du corps
Le langage JavaScript
JavaScript, objets "core"
JavaScript, DOM, les bases
JavaScript, DOM, node
JavaScript, compléments
Le langage PHP, les bases
PHP, fonctions utiles
PHP pour le web
PHP, compléments
SQL, introduction
MySQL et PHP pour le web
MySQL, plus loin...
Applications AJAX
Annexes utiles
Fichier .htaccess
Sécurité des sites web
Conception d'un site web
Référencement,
syndication
Page mise à jour le : 12-08-2015
Il arrive souvent que l'on ait à traiter des informations organisées sous des structures identiques et organisées en liste.
Les adhérents d'une association sont caractérisés par leur nom, leur adresse, leur rôle dans l'association et la date de leur dernier paiement de cotisation.
On peut représenter cette liste structurée par une table. Pour notre exemple on aura :
Nom | Adresse | Fonction | Date cotisation |
Jean Bonnot | 5, rue tabaga | président | 02-12-2024 |
Marie Tournelle | 10, avenue du messie | secrétaire | 13-02-2024 |
Charles Atant | 3, place Ide | adhérent | 31-08-2024 |
Sarah Plik | 231, cours toujours | adhérente | |
etc. |
Ces informations pourraient être enregistrées dans un fichier, mais le traitement ne sera pas très simple.
Il est préférable d'utiliser un système de gestion de bases de données qui est spécialisé pour traiter ce type d'information structurée. Et il peut faire encore mieux...
En effet, notre exemple précédent ne comporte qu'une table. Or il est probable que d'autres existent.
En effet, cette association organise des activités, voici donc une nouvelle table :
Intitule | Lieu | Moment |
Boxe | Anciens abattoirs | Lundi 19h-21h |
Couture | Gymnase | Samedi 14h-17h |
Spéléologie | Egouts de la ville | Samedi 18h à dimanche 23h |
etc. |
Comme on peut s'en douter, il semble intéressant d'associer les adhérents aux activités qu'ils pratiquent.
Mais un adhérent peut pratiquer plusieurs activités et chaque activité a plusieurs participants. De plus, on souhaite éviter les redondances d'information entre les tables.
Pour cela, on utilise une troisième table qui indique les relations entre les éléments des deux précédentes.
Pour éviter d'éventuels problèmes d'homonymie il est préférable de modifier les deux tables que l'on a vues afin d'ajouter une colonne d'identification.
Celles-ci deviendront :
id | Nom | Adresse | Fonction | Date cotisation |
1 | Jean Bonnot | 5, rue tabaga | président | 02-12-2024 |
12 | Marie Tournelle | 10, avenue du messie | secrétaire | 13-02-2024 |
35 | Charles Atant | 3, place Ide | adhérent | 31-08-2024 |
83 | Sarah Plik | 231, cours toujours | adhérente | |
etc. |
et
id | Intitule | Lieu | Moment |
5 | Boxe | Anciens abattoirs | Lundi 19h-21h |
8 | Couture | Gymnase | Samedi 14h-17h |
3 | Spéléologie | Egouts de la ville | Samedi 18h à dimanche 23h |
etc. |
La colonne 'ID' identifie de façon unique chaque ligne.
Alors la table des participations aux activités est :
Qui | Quoi |
35 | 8 |
83 | 5 |
35 | 3 |
12 | 3 |
etc. |
Une base de données contient des tables dont les éléments peuvent être associés.
Une table contient des enregistrements de structure identique.
Un enregistrement est structure en colonnes ou champs.
A chaque colonne ou champ est associé un type (nombre, texte, date...) et, parfois, une
taille maximale.
Le système de gestion de bases de données (SGBD) fourni un ensemble de commandes pour gérer
Tout cela avec la meilleure efficacité, sécurité, performance, accessibilité, convivialité, puissance...
Pour que l'utilisateur puisse faire réaliser ces fonctions par le système, il est nécessaire de disposer d'un
langage informatique de communication. Le langage le plus utilisé est SQL (Structured Query Language). Les
commandes de ce langage sont appelées "requêtes".
Il existe différents systèmes de gestion de bases de données. La plupart utilisent le langage de requêtes "SQL".
SQL n'est pas un langage de programmation car il ne gère pas le déroulement d'un programme. Il est un "langage de requêtes pour bases de données".
Les serveurs web disposent parfois de plusieurs SGBD. L'un des plus utilisé est "MySQL", il est une des composantes de l'ensemble "LAMP" : Linux, Apache, MySQL, PHP. Et donc, la bibliothèque de fonctions PHP contient les commandes adaptées à MySQL. (Ou WAMP, MAMP... pour Windows, Mac...)
Pour l'utilisation sur le web, MySQL fonctionne en mode serveur. Cela signifie qu'il est un serveur de bases de données auquel il faudra se connecter.
La documentation de référence de MySQL, donc du langage SQL inclus dans ce SGBD se trouve à :
http://dev.mysql.com/doc/refman/5.0/fr/index.html
Comme il existe plusieurs versions (évolution) de MySQL, il est fortement conseillé de vérifier la version MySQL de son serveur avec la commande PHP : 'phpinfo();'.
Il y a trois façons d'utiliser MySQL :
"phpMyAdmin" est une application web pour la gestion des bases de données avec MySQL. Il s'agit d'un "site" web spécifique (un ensemble de pages web) écrit en PHP, d'où son nom.
Pour l'utiliser, il faut lancer un navigateur web et donner l'adresse du site. Celle-ci est indiquée par la documentation du serveur ou par l'hébergeur.
Par exemple, si on utilise un serveur local sous EasyPHP 2.0, on utilise l'adresse (depuis la machine du serveur) : http://127.0.0.1/home/mysql/
Sur un serveur distant, cet accès est soumis à l'acceptation d'un compte d'utilisateur associé à un mot de passe.
phpMyAdmin permet l'administration des bases de données sans connaissance du langage SQL du fait de son fonctionnement interactif.
phpMyAdmin présente trois grands intérêts.
Il est utile pour les commandes qui ne doivent être exécutées qu'une seule fois ou rarement : création de bases et de tables, modifications de structure, remplissage préalable de tables, sauvegarde des contenus...
Il a aussi une vertu d'apprentissage car toute commande lancée sera affichée dans la syntaxe SQL (en haut de la fenêtre), il est même possible d'avoir des informations complémentaires sur la commande et d'obtenir le code PHP équivalent.
De plus il dispose d'une fenêtre SQL, bouton en haut à gauche qui permet de tester des commandes SQL en direct. Il faut toutefois être prudent avec certaines commandes...
Si l'on utilise les services d'un serveur mutualisé, l'hébergeur a créé la base de données, cette opération n'est donc pas a réaliser et phpMyAdmin accède directement à la base.
Mais si l'on travaille sur son propre serveur : serveur local ou dédié, il faut créer la base. Comme cette
opération n'est à réaliser qu'une fois, le plus simple est de la faire avec phpMyAdmin.
Dans ce cas, sur la première page que l'on obtient au démarrage, on trouve : "Créer une base de données", il suffit de donner un nom (laisser les autres options en l'état) et cliquer sur le bouton 'Créer'. Cette nouvelle base doit apparaitre dans la colonne de gauche.
On pourra ouvrir cette base en cliquant sur ce nom.
Une fois la base ouverte, si celle-ci ne comporte aucune table, la fenêtre principale (de droite) en propose la création, sinon on y trouve la partie "Créer une nouvelle table".
Créer une nouvelle table demande son nom et le nombre de champs (colonnes) à y placer.
On renseigne ces informations et on clique sur le bouton "Exécuter". Il faut maintenant spécifier les champs.
Chaque champ doit bien sûr avoir un nom et un type, il faudra éventuellement spécifier des index. Le reste des informations peut être laissé vide.
Type SQL | Nature | Remarques |
TINYINT ou BIT ou BOOL | Entier [-128, 127] ou [0, 255] | Peuvent avoir l'attribut : 'UNSIGNED' : nombres uniquement positifs. |
SMALLINT | Entier [-32 768, 32 767] ou [0, 65 535] | |
MEDIUMINT |
Entier [-8 388 608, 8 388 607] ou [0, 16 777 215] |
|
INT |
Entier [-2 147 483 648, 2 147 483 647] ou [0, 4 294 967 295] |
|
BIGINT |
Entier [-9 223 372 036 854 775 808, 9 223 372 036 854 775 807] ou [0, 18 446 744 073 709 551 615] |
|
FLOAT | Virgule flottante 10 chiffres significatifs étendue 1038 | |
DOUBLE | Virgule flottante 16 chiffres significatifs étendue 10308 | |
DECIMAL | Nombre codé sous forme de chaîne de caractères | |
CHAR | Chaîne taille fixe < 256 caractères | La taille maximum doit être spécifiée dans 'Taille / Valeur' |
VARCHAR | Chaîne taille variable < 256 caractères | |
TINITEXT ou TINYBLOB | Chaîne taille variable < 65 535 caractères |
Les comparaisons et tris sur le type 'TEXT' ne différencient pas les minuscules des majuscules Avec 'BLOB', la distinction est faite, ce type est bien adapté aux données binaires. |
TEXT ou BLOB | Chaîne taille variable < 65 535 caractères | |
MEDIUMTEXT ou MEDIUMBLOB | Chaîne taille variable < 16 777 215 caractères | |
LONGTEXT ou LONGBLOB | Chaîne taille variable < 4 294 967 295 caractères | |
ENUM | Une des valeurs de la liste | Les valeurs possibles doivent être spécifiées dans 'Taille / Valeur' |
SET | Des valeurs de la liste | |
DATE | Une date 'AAAA-MM-JJ' | L'année est en premier, le numéro du jour en dernier. |
DATETIME | Date-heure 'AAAA-MM-JJ HH:MM:SS' | |
TIMESTAMP | Date_heure format UNIX | A éviter car changement de format à partir de MySQL 4.1 |
YEAR | Année |
Sur les nombres :
http://dev.mysql.com/doc/refman/5.0/fr/numeric-type-overview.html
Sur les chaînes
http://dev.mysql.com/doc/refman/5.0/fr/string-type-overview.html
Sur les date/heures :
http://dev.mysql.com/doc/refman/5.0/fr/date-and-time-type-overview.html
Pour les tailles occupées :
http://dev.mysql.com/doc/refman/5.0/fr/storage-requirements.html
L'indexation d'un champ facilite la recherche dans la table pour une valeur de ce champ.
Un champ peut avoir comme valeur d'index : 'PRIMARY', 'UNIQUE', 'INDEX' ou 'FULLTEXT'
La case 'A_I' cochée indique que le champ est en auto-incrément. Ce doit être un champ de type nombre
entier. Un compteur interne à la table est utilisé et est incrémenté à chaque insertion d'enregistrement.
L'enregistrement contiendra pour ce champ la valeur de ce compteur.
Les valeurs d'auto-incrément commencent à 1.
Dans notre exemple du début, la table 'adherents' pourrait avoir ses champs spécifiés ainsi :
Nom du champ | Type | Particularités |
id | MEDIUMINT |
Attribut : UNSIGNED Index : PRIMARY Auto-incrément |
nom | VARCHAR |
Taille : 255 Index : UNIQUE |
adresse | TINYTEXT | |
fonction | CHAR | Taille : 10 |
date_cotisation | DATE | Index : INDEX |
Les tables apparaissent, dans "phpMyAdmin" dans la colonne de gauche, sous le nom de la base.
En cliquant sur l'une des tables on obtient ses informations dans la partie droite où l'on trouve 10 onglets.
Afficher : liste le contenu de la table. Si la table contient beaucoup d'enregistrements, l'affichage se fait page par page.
Structure : affiche la structure de la table. Il est possible de modifier les champs, de les supprimer et d'en ajouter.
SQL : permet de passer une commande SQL. Analogue au bouton de la colonne de gauche mais n'ouvre pas de fenêtre spécifique.
Rechercher : pour faire des recherches d'enregistrements dans la table.
Insérer : facilite l'ajout d'enregistrements. Il est possible d'associer une fonction à la valeur que l'on place.
Exporter : pour générer une "image' de la structure et/ou du contenu de la table. Différents formats d'exportation sont proposés, les options varient selon les formats.
Importer : opération inverse de la précédente, il y a moins de formats.
Opérations, pour faire sur la table :
Vider : supprime tous les enregistrements de la table.
Supprimer : efface la table (et donc son contenu) de la base.
Avant tout accès, il est indispensable de connecter au serveur de bases de données puis à la base de données concernée.
Si l'on utilise "phpMyAdmin", son lancement correspond à la connexion au serveur. La connexion à la base se fait en cliquant sur le nom de celle-ci dans la colonne de gauche.
En revanche, et on le verra plus tard, si l'on utilise la base de données dans une page web, il faudra réaliser ces opérations par des commandes spécifiques en PHP.
SQL ne distingue pas les majuscules des minuscules. Cependant, pour une bonne lisibilité, généralement on écrit les mots-clefs du langage en majuscules et les identifiants en minuscules.
Chaque requête SQL débute par un mot-clef identifiant la commande. Il est suivi d'informations indiquant sur quoi porte la commande : noms de table, de colonne (champ), etc. Le séparateur est l'espace. D'autres mots-clefs interviennent pour indiquer la nature de ces informations.
Parfois on encadre les identifiants (noms) entre accents graves (anti-apostrophes) "`". Cela est nécessaire si l'identifiant contient des caractères spéciaux comme l'espace.
Les valeurs sont placées entre apostrophes.
Voici un exemple de requête sur notre table telle qu'elle à été définie au paragraphe précédent.
Cette requête produit le contenu des colonnes 'nom' et 'adresse' de la table 'adherents' pour une valeur de 'date_cotisation' postérieure au 31 décembre 2009.
On peut remarquer le les noms de colonnes et de la table sont encadrés par des accents graves. La valeur de date est encadrée d'apostrophes et donnée sous la forme 'AAAA-MM-JJ'.
Ci-dessous les requêtes les plus utilisées.
Pour leur présentation nous utiliserons la notation :
MOT_CLEF identifiant valeur [partie optionnelle]
Souvent plusieurs formes existent, seule la forme simple sera donnée sur cette page. Les détails complets seront trouvés sur le site de référence.
SELECT col [,col...] FROM table [WHERE condition]
SELECT est une requête qui produit un résultat. Comme elle est utilisée la plupart du temps pour faire une recherche dans une table, on précise le nom de celle-ci derrière le mot FROM.
Le nom des champs à obtenir est placé entre SELECT et FROM, s'il y en a plusieurs on les sépare par une virgule. Il est possible d'indiquer comme nom de champ le caractère '*'. Dans ce cas tous les champs seront listés.
La clause WHERE est un filtre introduisant une condition. En l'occurrence, SELECT n'affichera que les informations satisfaisant cette condition. En l'absence de WHERE, SELECT aurait affiché tout le contenu de la table.
En savoir plus :
http://dev.mysql.com/doc/refman/5.0/fr/select.html
INSERT ajoute un nouvel enregistrement ou plus dans la table. Elle accepte plusieurs syntaxes. En voici une :
INSERT INTO table SET colonne= valeur[, colonne= valeur[,...]]
« table » est le nom de la table ou l'ajout se fera, « colonne » est le nom de la colonne où sera placé « valeur ». Si certaines colonnes ne sont pas indiquées, une valeur par défaut leur sera donnée.
Exemple
Remarquons que les valeurs sont données dans le type des colonnes : le nom de la personne est enclos d'apostrophes.
La fonction MySQL NOW() renvoie la date et heure, minute, seconde actuelles. Comme le champ n'accepte que la date, la troncature est automatique.
Une autre syntaxe permet l'ajout simultané de plusieurs enregistrements
En savoir plus :
http://dev.mysql.com/doc/refman/5.0/fr/insert.html
La requête « UPDATE » a aussi plusieurs syntaxes dont une très proche de celle de l'ajout. Elle est généralement associée à « WHERE » car sinon la modification serait faite sur toute la table !
UPDATE table SET colonne= valeur[, colonne= valeur[,?]] [WHERE condition]
Les colonnes non spécifiées ne sont pas modifiées.
Il est indispensable de bien vérifier la clause WHERE pour s'assurer que seuls les enregistrements concernés seront modifiés.
UPDATE `adherents`
SET `fonction`= 'Trésorière' WHERE `id`= '20'
En savoir plus :
http://dev.mysql.com/doc/refman/5.0/fr/update.html
Encore plus simple dans la syntaxe, mais radicale, la requête "DELETE". La clause « WHERE » est indispensable sinon la table est vidée entièrement.
DELETE FROM table [WHERE condition] [LIMIT nombre]
Supprime de « table » les enregistrements satisfaisant la condition "condition".
Si la clause LIMIT est indiquée, au plus « nombre » enregistrements seront supprimés. C'est une bonne façon de limiter les problèmes s'il y a une erreur dans la clause WHERE
DELETE FROM `adherents` WHERE `id`= '20' LIMIT 1
En savoir plus :
http://dev.mysql.com/doc/refman/5.0/fr/delete.html
Après cette première approche des bases de données et de MySQL, nous allons voir pourquoi et comment utiliser cela en PHP.