Nous avons vu dans le chapitre précédent que MySQL pouvait récupérer des données dans la BDD très facilement. Nous avons vu aussi que le langage SQL était très puissant, car il propose de nombreux critères de sélection (WHERE, ORDER BY etc...)
C'est bien beau tout ça, mais si vous savez juste lire dans une base de données et que vous ne savez pas écrire dedans, ça va pas le faire
Vous l'aurez compris, ce chapitre est clairement la suite du précédent. En utilisant ce que vous aurez appris dans ces 2 chapitres, vous saurez réaliser de nombreux scripts PHP
Votre mission, si vous l'acceptez : ajouter une nouvelle entrée à la table "jeux_video" (sur laquelle nous avons travaillé dans le chapitre précédent).
Mouahahahah, mais c'est facile. Tu utilises PhpMyAdmin et hop ! C'est fait !
...... Quoi, j'ai dit quelque chose de mal ?

Non non

C'est vrai que PhpMyAdmin permet de rajouter de nouvelles entrées dans la table (on l'a vu dans le chapitre 2 de la partie II). Mais ce qui nous intéresse ici, c'est de le faire avec un script PHP !
Tout d'abord, je vous rappelle à quoi ressemble la 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, vous aurez besoin de connaître la requête SQL. En voici une par exemple qui rajoute une entrée :
Code : SQL1 | 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, vous devez mettre INSERT INTO pour dire que vous allez insérer une entrée.
- Vous précisez ensuite le nom de la table (ici "jeux_video"), puis mettez entre parenthèses les noms des champs.
- Enfin, et c'est là qu'il ne faut pas se tromper, vous devez écrire VALUES et mettre les valeurs à insérer dans le même ordre que les champs que vous avez indiqués.
Vous remarquerez que pour le premier champ (ID), je n'ai rien mis 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 vous le désirez, sachez que vous n'êtes pas obligés de mettre les noms des champs d'abord, cette requête marche tout aussi bien (mais elle est moins claire) :
Code : SQL1 | INSERT INTO jeux_video VALUES('', 'Battlefield 1942', 'Patrick', 'PC', '45', '50', '2nde guerre mondiale')
|
Du moment que vous respectez le bon ordre des champs, tout ira bien
Maintenant, voici le script PHP qui utilise cette requête :
Code : PHP1
2
3
4
5
6
7
8
9 | <?php
mysql_connect("localhost", "mateo21", "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 vous faites un SELECT (comme nous l'avons vu dans le précédent chapitre) que nous aurons quelque chose d'intéressant à afficher au visiteur.
Vous verrez dans la pratique qu'on combine les deux :
on écrit et
on lit dans la BDD.
Vous venez de rajouter Battlefield dans la BDD, tout s'est bien passé.
Mais... vous vous rendez compte avec stupeur que Battlefield se joue en fait à 32 joueurs maximum (au lieu de 50), et que en plus son prix a baissé : on le trouve à 10 euros (au lieu de 45).
No problemo amigo

Avec une petite requête SQL on peut arranger ça. En effet, en utilisant UPDATE vous allez pouvoir modifier l'entrée qui pose problème :
Code : SQL1 | UPDATE jeux_video SET prix='10', nbre_joueurs_max='32' WHERE ID='51'
|
Comment ça marche ?
Dernière minute ! Florent vient de racheter tous les jeux de Michel ! Il va falloir modifier ça tout de suite !

Heu, va falloir modifier chaque entrée une à une ?
Dites-vous bien une chose : le langage SQL est un langage de feignasse

Il n'est pas question de passer des heures à modifier toute la table pour ça !
En clair, en réfléchissant environ 0,5 seconde vous allez trouver tous seuls la requête SQL qui permet de faire ce qu'on cherche.
C'est bon vous avez trouvé ? Allez, je vous donne la réponse, c'est vraiment facile :
Code : SQL1 | 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 à elle-seule suffit pour mettre à jour toute la table
Si c'est pas beau le SQL
Enfin, voilà 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 faites attention !
Voici comment on supprime par exemple l'entrée de Battlefield :
Code : SQL1 | DELETE FROM jeux_video WHERE nom='Battlefield 1942'
|
Y'a 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 vous l'oubliez, tout sera supprimé ! Cela équivaut à vider la table.
Et voilou vous savez tout !
La partie II de ce cours est quasiment terminée

Nous avons vu ce qu'il fallait savoir pour MySQL. Dans la partie III vous allez apprendre des choses pas bien difficiles et pourtant très utiles. C'est maintenant que vous allez en apprendre le plus sur PHP !
Mais avant de clôturer la partie II, je vous ai concocté un petit TP qui, je l'espère, devrait vous plaire