On a vu dans le précédent chapitre qu'avec MySQL on pouvait récupérer facilement des données dans la BDD et que le langage SQL est très puissant car il propose de nombreux critères de sélection (WHERE, BORDER BY, etc…)
Ceci est la suite et l'ensemble de ces deux chapitres nous permettront de réaliser de nombreux scripts PHP.
Comme exercice, on va ajouter une nouvelle entrée à la table "jeux_video".
 |
Facile, on utilise PhpMyAdmin ? |
Effectivement, PhpMyAdmin permet de rajouter de nouvelles entrées dans la table (on l'a vu chapitre 2 partie 3). Mais ici, on va le faire avec un script PHP.
D'abord, rappel de ce à quoi ressemble la ta table "jeux_video" :
ID | nom | possesseur | console | prix | nbre_joueurs_max | commentaires |
1 | Super Mario Bros | Florent | NES | 4 | 1 | Un jeu d'anthologie ! |
2 | Sonic | Patrick | Megadrive | 2 | 1 | Pour moi, le meilleur jeu au monde ! |
3 | Zelda : ocarina of time | Florent | Nintendo 64 | 15 | 1 | Un jeu grand, beau et complet comme on en voit rarement de nos jours |
4 | Mario Kart 64 | Florent | Nintendo 64 | 25 | 4 | Un excellent jeu de kart ! |
5 | Super Smash Bros Melee | Michel | GameCube | 55 | 4 | Un jeu de baston délirant ! |
Pour rajouter une entrée, on a besoin de connaître la requête SQL. En voici une par exemple qui rajoute une entrée :
Code : SQL
INSERT INTO jeux_video(ID, nom, possesseur, console, prix, nbre_joueurs_max, commentaires) VALUES('', 'Battlefield 1942', 'Patrick', 'PC', '45', '50', '2nde guerre mondiale')
- D'abord, on doit mettre INSERT INTO pour dire qu'on va insérer une entrée.
- On précise ensuite le nom de la table (ici "jeux_video"), puis mettre entre parenthèses les noms des champs.
- Enfin, et c'est là qu'il ne faut pas se tromper, on doit écrire VALUES et mettre les valeurs à insérer dans le même ordre que les champs qu'on a indiqués.
 |
A noter que pour le premier champ (ID), il n'y a rien entre les apostrophes. C'est voulu : le champ a la propriété "auto_increment", MySQL mettra donc le numéro d'ID lui-même. |
Enfin, si on veut, on n'est aps obligé de mettre les noms des champs d'abord, cette requête marche tout aussi bien (mais elle est moins claire) :
Pour rajouter une entrée, on a besoin de connaître la requête SQL. En voici une par exemple qui rajoute une entrée :
Code : SQL
INSERT INTO jeux_video VALUES('', 'Battlefield 1942', 'Patrick', 'PC', '45', '50', '2nde guerre mondiale')
Du moment qu'on respecte le bon ordre des champs, tout va bien.
Maintenant, le script PHP utilisant cette requête :
Code PHP
<?php
mysql_connect("localhost", "alain33", "mot_de_passe");
mysql_select_db("coursphp");
// On ajoute une entrée avec mysql_query
mysql_query("INSERT INTO jeux_video VALUES('', 'Battlefield 1942', 'Patrick', 'PC', '45', '50', '2nde guerre mondiale')");
mysql_close();
?>
Que fait ce code ? Il ajoute une entrée dans la BDD pour le jeu "Battlefield 1942", appartenant à "Patrick", qui fonctionne sur "PC", qui coûte "45" euros etc…
Entendons-nous bien :
ce code n'affiche rien. Il ajoute juste des données dans la BDD. Ce n'est que si on fait un SELECT (comme on l'a vu dans le précédent chapitre) qu'on aura quelque chose d'intéressant à afficher au visiteur.
On verra dans la pratique, on combine les deux : on écrit et on lit dans la BDD.
On vient de rajouter Battlefield dans la BDD.
On se rend compte par la suite que Battlefield se joue en fait à 32 joueurs maximum (au lieu de 50), et que son prix a baissé : on le trouve à 10 euros (au lieu de 45).
Pas de problème, avec une petite requête SQL on peut arranger ça. En effet, en utilisant UPDATE, on va pouvoir modifier l'entrée qui pose problème :
Code : SQL
UPDATE jeux_video SET prix='10', nbre_joueurs_max='32' WHERE ID='51'
Comment ça marche ? :
- Tout d'abord, le mot-clé UPDATE permet de dire qu'on va modifier une entrée.
- Ensuite, le nom de la table (jeux_video).
- Le mot-clé SET, qui sépare le nom de la table du reste.
- Et on met ensuite les champs qu'il faut modifier, séparés par des virgules. Ici, on modifie le champ "prix", on lui affecte la valeur "10" (prix='10'), et de même pour le champ nbre_joueurs_max.Les autres champs ne sont pas modifiés.
- Enfin, le mot-clé WHERE est tout simplement indispensable. Ca permet de dire à MySQL quelle entrée il doit modifier. On se base très souvent sur le champ ID pour indiquer quelle entrée est à modifier. Ici, on suppose que Battlefield a été enregistré sous l'ID nº 51.
 |
Pour connaître l'ID de Battlefield, il faudrait aller sous PhpMyAdmin et regarder quel nº d'ID MySQL lui a donné. |
Et si on veut, on peut se baser sur le nom du jeu au lieu de l'ID (pour le WHERE) :
UPDATE jeux_video SET prix='10', nbre_joueurs_max='32' WHERE nom='Battlefield 1942'
Et si maintenant, on imagine que Florent vient racheter tous les jeux de Michel. Il faut modifier la table !
 |
Faut modifier chaque entrée une à une ? |
Bien sur que non. SQL est est un langage de feignants, voici comment faire :
Code : SQL
UPDATE jeux_video SET possesseur='Florent' WHERE possesseur='Michel'
Traduction :
Dans la table jeux_video, modifier toutes les entrées dont le champ possesseur est égal à Michel, et le remplacer par Florent.
Qu'il y ait 1, 10, 100 ou 1000 entrées, cette requête &agarve; elle-seule suffit pour mettre à jour toute la table.
Une dernière requête qui pourra se révéler utile : DELETE.
Rapide et simple à utiliser, elle est quand même un poil dangereuse : après suppression, il n'y a aucun moyen de récupérer les données, alors faire attention !
Exemple pour supprimer l'entrée de Battlefield :
Code : SQL
DELETE FROM jeux_video WHERE nom='Battlefield 1942'
Rien de plus facile :
- DELETE FROM : pour dire "supprimer dans"
- jeux_video : le nom de la table
- WHERE : indispensable pour indiquer quelle(s) entrée(s) doivent être supprimée(s). Si on l'oublie, tout sera supprimé ! Cela équivaut à vider la table.