ÇáãÓÇÚÏ ÇáÔÎÕí ÇáÑÞãí

ãÔÇåÏÉ ÇáäÓÎÉ ßÇãáÉ : MYSQL and PHPMYADMIN lire et écrire les données sur les bases de données


ÌãÇá ãÛÑÇÈí
2008-03-26, 12:25 AM
le SQL n'a rien à voir avec le PHP. C'est beaucoup beaucoup plus simple, et en plus cette fois on va lui parler avec des "phrases" (en anglais of course ;) )

Seulement, pour compliquer un petit peu l'affaire (sinon c'est pas rigolo), on ne va pas pouvoir parler à MySQL directement. Eh non, seul PHP peut le faire !
C'est donc PHP qui va faire l'intermédiaire entre vous et MySQL. On devra demander à PHP : "Va dire à MySQL de faire ceci.".

http://www.siteduzero.com/tuto-3-4-0-un-site-dynamique-avec-php.html#part_4

Je crois qu'un petit schéma ne serait pas de refus...
http://www.siteduzero.com/uploads/fr/files/5001_6000/5898.jpg

Ca vous rappelle les bons souvenirs du premier chapitre, non ? :lol:

Ici on ne voit pas le client, on s'intéresse surtout à ce que le serveur fait lorsqu'il doit génèrer une page PHP.
Voici ce qu'il peut se passer lorsque le serveur a reçu une demande d'un client qui veut poster un message sur vos forums :

1. Le serveur utilise toujours PHP, il lui fait donc passer le message.
2. PHP effectue les actions demandées et se rend compte qu'il a besoin de MySQL. En effet, le code PHP contient à un endroit "Va demander à MySQL d'enregistrer ce message". Il fait donc passer le travail à MySQL.
3. MySQL fait le travail que PHP lui avait soumis et lui répond "OK, c'est bon !"
4. PHP renvoie au serveur que MySQL a bien fait ce qui lui était demandé.


Voilà en gros comment on peut schématiser ça. Je n'ai pas mis le client pour ne pas vous embrouiller, mais il est clair qu'il aurait fallu le mettre tout en haut du schéma (c'est lui qui fait appel au serveur, comme nous l'avons vu dans le tout premier chapitre).

Bon, eh bien maintenant que nous avons fait les présentations, il va falloir voir comment est organisée une base de données (très très important).
Structure d'une base de données
Oulah oulah ! Surtout faites très attention à ce qui va suivre ! C'est indispensable pour bien comprendre la base de données !

Et pis c'est pas parce que le titre vous donne la nausée que vous devez vomir sur le clavier :lol:

Bon allez, un peu de sérieux, ce qui suit est => VITAL <=
Ce n'est pas compliqué (ouf !), mais ce sera une des rares fois où je vous demanderai de retenir du vocabulaire.

En effet, avec la BDD il faut utiliser un vocabulaire précis. Heureusement, vous ne devriez pas avoir trop de mal à vous en souvenir, vu qu'on va se servir d'une image : celle d'une armoire.
Ecoutez-moi attentivement, et n'hésitez pas à lire lentement, plusieurs fois si c'est nécessaire.

Je vous demande d'imaginer ceci :

* La base, c'est l'armoire. C'est le gros meuble dans lequel les secrétaires ont l'habitude de classer les informations.
* Dans une armoire, il y a plusieurs tiroirs. Un tiroir, dans le langage MySQL, c'est ce qu'on appelle une table. Chaque tiroir contient des données différentes. Par exemple, on peut imaginer un tiroir qui contient les pseudonymes et infos sur vos visiteurs, un autre qui contient les messages postés sur votre forum...
* Mais que contient une table ? C'est là que sont enregistrées les données, sous la forme d'un tableau. Dans ce tableau, les colonnes sont appelées des champs, et les lignes sont appelées des entrées. Par exemple, voici à quoi peut ressembler le contenu d'une table appelée "visiteurs" :


Table "visiteurs"

Numéro Pseudonyme E-mail Age
1 Kryptonic kryptonic*8free.fr 24
2 Serial_Killer serialkiller*8unitedgamers.com 16
3 M*teo21 top_secret*8siteduzero.com 18
4 Bibou bibou557*l8aposte.net 29
... ... ... ...








Ce tableau est donc le contenu d'une table (le tiroir).
Les champs dans cet exemple sont : "Numéro", "Pseudonyme", "E-mail" et "Age".
Chaque ligne est une entrée. Ici, il y a 4 entrées, mais une table peut très bien en contenir 100, ou 1 000, ou même 100 000 ! (je vous souhaite d'avoir autant de visiteurs ^^ ).

très souvent, on crée un champ "Numéro", aussi appelé "ID". Comme nous le verrons plus tard, il est très pratique de numéroter ses entrées, même si ce n'est pas obligatoire.

Et pour finir, voici l'indispensable schéma pour que tout ça soit clair :
http://www.siteduzero.com/uploads/fr/files/59001_60000/59541.png


(merci à Helix001 pour avoir amélioré ce schéma, la première version que j'en avais faite était un peu moche il faut dire :p )

Bon de toute manière, l'essentiel c'est que vous compreniez qui contient qui.
Comme vous le voyez, on peut mettre autant de tables que l'on veut dans une base (ce qui fait qu'en général une seule base suffit).
Dans chaque table, les données sont enregistrées sous la forme d'un tableau, comme nous l'avons vu plus haut.

Pour vous donner quelques exemples concrets, voici quelques tables utilisées sur ce site web :

* news : stocke toutes les news qui sont affichées à l'accueil.
* livre_or : stocke tous les messages postés sur le livre d'or.
* forum : stocke tous les messages postés sur le forum.
* newsletter : stocke les adresses e-mails de tous les visiteurs inscrits à la newsletter.


Voilà, vous devriez commencer à comprendre pourquoi vous allez avoir besoin d'une BDD sur votre site ;)
Si quelque chose ne vous paraît pas clair, si vous avez l'impression de mélanger un peu "bases", "tables", "champs", "entrées", relisez de nouveau cette partie. Il faut que vous soyez capable de reproduire le schéma tout seul sur un bout de papier
. :(
Q.C.M.
Comment s'appelle le système de base de données que l'on utilise avec PHP ?

* MySQL
* MyTQL
* MySQR

Peut-on s'adresser directement à la base de données ?

* Oui
* Non, il faut demander la permission au serveur d'abord.
* Non, il faut demander à PHP de le faire pour nous.

Quel langage doit-on utiliser pour parler à MySQL ?

* Le PHP
* Le SQL
* Le MySQL

Laquelle de ces affirmations est incorrecte ?

* Une base contient des tables.
* Le nombre de tables dans une base est limité.
* Le contenu d'une table peut être représenté sous la forme d'un tableau.

Qu'est-ce qu'un champ ?

* Un type d'information qu'enregistre la table
* Le contenu d'une table
* Un lieu où on récolte le blé.



PhpMyAdmin
Avatar
Auteur : M*teo21
Créé : le 16/08/2005 20:38:30
Modifié : le 29/07/2007 19:52:07
Noter et commenter ce tutoriel
Imprimer ce tutoriel
Nous allons maintenant faire des manipulations sur une base de données. Vous allez "voir" ce que peuvent contenir une base et ses tables.
Pour cela, nous allons nous servir d'un système très pratique que beaucoup de sites utilisent : PhpMyAdmin.

PhpMyAdmin est livré avec WAMP, vous allez donc pouvoir l'utiliser tout de suite.
La quasi-totalité des hébergeurs permettent d'utiliser PhpMyAdmin. Renseignez-vous auprès de votre hébergeur pour savoir comment y accéder. Par exemple si vous êtes chez Free, l'adresse de PhpMyAdmin est http://sql.free.fr. Vous aurez très certainement besoin d'un login et d'un mot de passe.

Concrètement, PhpMyAdmin est un ensemble de pages PHP. Ce n'est pas un programme, mais des pages PHP toutes prêtes dont on se sert pour gagner du temps.
On commence donc simplement : on ne va pas coder dans ce chapitre, pour le moment on va simplement manipuler.

La première chose que je vous demanderai de faire, c'est d'ouvrir PhpMyAdmin.
Comment ça "comment on fait" ? :lol:
Démarrez WAMP, faites un clic gauche sur l'icône de la barre des tâches et allez dans "phpMyAdmin". Vous y êtes :)
Sommaire du chapitre :

* Créer une table
* Modifier une table
* Autres opérations
* Q.C.M.

Chapitre précédent Sommaire Chapitre suivant
Créer une table
L'accueil de PhpMyAdmin ressemble à ceci :

Accueil PhpMyAdmin


Vous avez 2 endroits importants :

* Liste des bases : dans ce menu déroulant sont listées vos bases de données. Le nombre entre parenthèses, c'est le nombre de tables qu'il y a dans la base.
* Créer une base : tapez un nom pour votre base de données, cliquez sur "Créer" et hop ! C'est fait :)


Pour le moment, 2 bases sont déjà créées : "mysql" et "test". Ne touchez pas à la base Mysql, elle contient des informations importantes pour le fonctionnement de Mysql.
Nous, on va se servir de la base "test". Ouvrez donc cette base en cliquant sur le menu déroulant à gauche et en choisissant "test".

On vous indique à gauche qu'aucune table n'a été trouvée dans la base. Et si on en créait une ? ^^
On va par exemple créer une table "news" qui contiendra 3 champs :

Image utilisateur


Cliquez sur "Exécuter".
La table n'est pas immédiatement créée, il faut maintenant indiquer le nom des champs et les données qu'ils peuvent contenir.
On va faire simple car c'est juste pour tester. On va donc créer 3 champs pour cette table :

* id : comme bien souvent, vous allez devoir créer un champ appelé "id". C'est le numéro d'identification. Grâce à lui, toutes vos entrées seront numérotées, ce qui est bien pratique. Il y aura ainsi la news n°1, n°2, n°3 etc...
* titre : ce champ contiendra le titre de la news.
* contenu : enfin, ce champ contiendra la news en elle-même.


Soyons clairs : je ne suis pas en train de vous apprendre à créer un système de news pour votre site. Ca on verra un peu plus tard. D'ailleurs, si on avait voulu faire ça bien on aurait aussi créé un champ "date", mais bon ne compliquons pas les choses inutilement.
Pour le moment on veut juste faire joujou :lol:

Vous devriez avoir ceci sous les yeux :

Image utilisateur

Vous remplissez à gauche le nom du champ, au milieu le type de champ, et à droite la taille maximale du champ.

Mais qu'est-ce qu'un type de champ ?

Un champ peut contenir du texte, des nombres, des dates etc... Il faut donc définir quel type de données contiendra le champ.
Voici les principaux types de données que vous avez besoin de connaître (il y en a beaucoup d'autres) :

* INT : nombre entier. Il y a plusieurs variantes, selon la grandeur des nombres que ça peut comporter. Dans l'ordre, il y a TINYINT (très petit, c'est-à-dire 255 maximum), SMALLINT (jusqu'à 30 000), MEDIUMINT (8 000 000), INT (2 000 000 000), BIGINT (vraiment beaucoup !).
* TEXT : du texte. Là encore il y a plusieurs variantes, ça fonctionne de la même manière. A vous de choisir celui qui vous paraît le plus adapté.
* DATE : date de la forme "YYYY-MM-DD", "YY-MM-DD" ou "YYMMDD" (c'est le format américain, eh oui !)
* TIME : l'heure, de la forme "HH:MM:SS" ou "HHMMSS" ou "HHMM" ou "HH".
* DATETIME : mélange la date et l'heure, de la forme "YYYY-MM-DD HH:MM:SS"
* BLOB : plus particulier, ce type est rarement utilisé. Il permet de stocker des fichiers dans la base de données. Vu que c'est un cas particulier, on n'en parlera pas de suite, mais il faut que vous sachiez que ça existe.


Il reste à voir les quelques options qui sont proposées à droite de l'écran pour chaque champ :

Image utilisateur


Pour le premier champ, id, j'ai mis "auto_increment" pour Extra. Je vous recommande de le faire pour tous vos champs "id" : ainsi, le numéro de champ augmentera tout seul à chaque fois que vous rajouterez une entrée. Ca évite des prises de tête en plus...
J'ai aussi mis "Primaire" pour "id", je vous recommande de le faire pour tous vos champs id, ça accélèrera les recherches dans votre table.

Voilà, je ne m'étends volontairement pas sur tout ça, vous en savez largement assez pour créer une table. Il est inutile de détailler toutes les possibilités, on y passerait des heures. Copiez mon modèle à chaque fois que vous créez une table et ça sera bon.
Cliquez enfin sur "Sauvegarder", et ça y est. Ouf ! On a créé une table :D

Vous pouvez retrouver toute la marche à suivre dans cette animation que je vous ai concoctée :

Créer une table (813 Ko)
Modifier une table
A gauche de votre écran, la table "news" devient visible :

Image utilisateur


Si vous cliquez sur "news", ça affichera à droite la structure de la table.
Si vous cliquez sur la petite image de tableau à gauche, ça affichera le contenu de la table.

Pour l'instant la table est vide. Si vous affichez la structure de la table, vous devriez voir ceci en haut :

Image utilisateur


Rien de bien intéressant à toucher ici, si ce n'est les onglets en haut : "Structure", "Afficher", "SQL" etc etc... Cela vous amènera vers différentes options que nous verrons plus loin.

Nous allons rentrer des informations (des entrées) dans cette table. Cliquez sur l'onglet "Insérer" en haut. Vous pouvez maintenant créer une entrée. Faites comme moi :

Image utilisateur


Pour id, je n'ai rien mis car, je vous le rappelle, on avait indiqué "auto_increment". Le nombre sera calculé tout seul par Mysql, ne vous en occupez pas.
Indiquez simplement le titre et le contenu de votre news, puis cliquez sur "Exécuter".

Recommencez 1 ou 2 fois, en faisant la même manipulation et en laissant le champ "id" vide.

Maintenant, on va afficher ce que contient la base. Pour cela, cliquez sur l'onglet "Afficher" en haut, ou bien cliquez sur la petite image en forme de tableau à gauche de l'écran Image utilisateur
Le contenu de la table s'affiche sous vos yeux ébahis o_O

Image utilisateur


Vous repérez ici les champs : id, titre et contenu. Cette table a 3 entrées, et comme vous pouvez le voir Mysql a bien fait les choses puisque les numéros d'id se sont créés tous seuls :)

1. Afficher tout le texte : si vous cliquez sur le T majuscule, cela affichera la totalité du texte. Vous remarquerez sur mon image que si le texte est trop long, PhpMyAdmin le coupe. Avec ce bouton vous verrez tout le texte.
2. Modifier l'entrée : cette petite image vous permet de modifier l'entrée sélectionnée (si vous voulez apporter des modifications à votre news par exemple).
3. Supprimer l'entrée : ce bouton supprime l'entrée sélectionnée.
4. Afficher X lignes à partir de l'enregistrement n° X : s'il y a beaucoup d'entrées dans votre table, PhpMyAdmin n'en affichera qu'un bout (les 30 premières lignes normalement). Si vous voulez en afficher plus, il vous suffit de modifier ces valeurs puis de cliquer sur "Afficher".


Voilà, vous en savez suffisamment pour travailler sur une table. Avouez que ce n'était pas bien dur ;)
Il y a certes beaucoup de choses que je passe sous silence, mais c'est principalement parce que vous n'en aurez besoin que très rarement.

Bon, il nous reste à traiter encore de quelques fonctionnalités proposées par PhpMyAdmin, et ça sera bon pour ce chapitre.
Autres opérations
Nous allons séparer cette partie en 5 sous-parties, correspondant aux onglets suivants :

* SQL
* Exporter
* Opérations
* Vider
* Supprimer



SQL


Cliquez sur l'onglet : Image utilisateur
Il s'affiche à l'écran :

Image utilisateur


C'est ici que vous pouvez exécuter ce que l'on appelle des requêtes SQL pour demander à Mysql de faire quelque chose.
Vous avez 2 méthodes pour exécuter une requête SQL :

1. Dans la grande zone de texte, vous pouvez taper des requêtes SQL. Par exemple ici on a :
SELECT * FROM `news` WHERE 1
Cela signifie : "Afficher tout le contenu de la table 'news'"Je vous apprendrai ce langage SQL tout au long de la partie II.
2. Dessous, vous pouvez cliquer sur le bouton Parcourir pour rechercher un fichier sur votre disque dur qui contient des requêtes SQL. Ca revient exactement au même, mais il est parfois plus facile de s'échanger des requêtes SQL à l'aide d'un fichier texte.


Pour valider, cliquez sur "Exécuter".

Sur certaines versions plus récentes de PhpMyAdmin, il faut aller dans l'onglet "Importer" pour importer un fichier SQL depuis votre disque dur.


Exporter


Il nous reste à voir les 4 onglets à droite :

Image utilisateur


Nous nous intéressons maintenant à l'onglet "Exporter". C'est ici que vous allez pouvoir récupérer votre base de données sur le disque dur sous forme de fichier texte (qui contiendra des tonnes de requêtes SQL).

Ce fichier que l'on va "exporter", est-ce que c'est le même que celui dont tu nous parlais tout à l'heure ? Celui situé dans C:\wamp\mysql\data ?

Non pas du tout. Ce que je vous ai montré tout à l'heure, c'était quelque chose d'illisible. Je vous avais dit qu'on n'y toucherai pas, je ne vous ai pas menti.
Le fichier que vous allez obtenir grâce à "l'exportation" de PhpMyAdmin, c'est un fichier qui dit à MySQL comment recréer votre base de données (avec des requêtes en langage SQL)

A quoi il sert ce fichier ?

On peut s'en servir pour deux choses :

* Transmettre votre base de données sur Internet : pour le moment, votre base de données se trouve sur votre disque dur. Mais si vous êtes hébergés sur Internet, chez Free par exemple, on va utiliser ce fichier généré pour "reconstruire" la base de données. Ainsi, sur Internet vous aurez la même base de données et votre site web pourra l'utiliser !
* Faire une copie de sauvegarde de la base de données : on ne sait jamais, si vous faites une bêtise ou qu'un hacker détruit toutes les informations sur votre site (dont la base de données), vous serez bien content d'avoir une copie de secours sur votre disque dur !


Attention, je vous rappelle un point important : le fichier que vous allez générer contient les informations pour "reconstruire" votre base de données. Ce n'est donc pas le fichier dans lequel MySQL enregistre vos données, dont je vous ai parlé à la fin du chapitre précédent.

Votre écran doit ressembler à ceci :

Image utilisateur


Je vous conseille de laisser les options par défaut, c'est largement suffisant.
Distinguez simplement la structure des données de la table. La structure d'une table se résume en quelques lignes, ce sont en fait les noms des champs, leurs types etc... Par contre, les données correspondent aux entrées, et il peut y en avoir beaucoup ! Pour faire une sauvegarde complète, il faut donc prendre la structure ET les données.

A noter que vous pouvez demander une compression, ce qui est utile si votre table est très grosse.
Surtout, pensez à cocher la case "Transmettre".

Cliquez sur "Exécuter". On vous proposera alors de télécharger un fichier : c'est tout à fait normal. N'hésitez pas à regarder ce qu'il y a dans ce fichier : vous allez voir qu'il y a plein de requêtes SQL. C'est ce langage que je vais vous apprendre dans les chapitres qui suivent !

Bon, j'ai récupéré le fichier. Maintenant, comment je fais pour recréer la base de données sur mon site web ?

Il faut aller sur le PhpMyAdmin de votre hébergeur (il en a forcément un). Renseignez-vous pour connaître l'adresse.
Par exemple chez Free c'est : http://phpmyadmin.free.fr/phpMyAdmin (il faudra indiquer votre login et mot de passe). Une fois dessus, rendez-vous dans l'onglet "SQL", vous devriez voir ceci :

Image utilisateur


Oui je sais, on a déjà vu cette image toute à l'heure. Nous, on a besoin juste de la partie (2) : "Emplacement du fichier texte". Cliquez sur "Parcourir" pour indiquer où se trouve le fichier sur votre disque dur. Faites "Exécuter", attendez que ça l'envoie, et c'est bon ! Votre base de données est alors recréée sur Internet ! :D

Opérations


Vous pouvez faire ici diverses opérations sur votre table.
Je ne vais pas les énumérer une à une, ni vous expliquer comment elles fonctionnent vu que c'est très simple. Sachez simplement que vous pourriez avoir besoin de :

* Changer le nom de la table : indiquez le nouveau nom pour cette table.
* Déplacer la table vers : si vous voulez mettre cette table dans une autre base de données.
* Copier la table : faire une copie de la table, dans une autre base ou dans la même (attention, dans ce cas il faudra qu'elle ait un nom différent).
* Réparer la table : ne me demandez pas comment ça fonctionne, tout ce que je sais c'est que si votre table semble poser problème, la réparation peut tout régler (je m'en suis servi une ou deux fois).
* Optimiser la table : à force d'utiliser une table, surtout si elle est grosse, on finit par avoir des "pertes" qui font que la table n'est plus bien organisée. Un clic là-dessus et hop, c'est ré-arrangé :)



Vider


Vide tout le contenu de la table. Toutes les entrées vont disparaître, seule la structure de la table restera (c'est-à-dire les champs).

Attention ! Il n'est pas possible d'annuler cette opération !


Supprimer


Pour supprimer la totalité de la table (structure + données), cliquez sur cet onglet.
Là encore, réfléchissez-y à deux fois avant de tout supprimer, car vous ne pourrez rien récupérer par la suite.







Nous allons apprendre dans ce chapitre à lire des données dans une BDD. Or, je vous rappelle que PHP doit faire l'intermédiaire entre vous et MySQL.
Problème : PHP ne peut pas dire à MySQL dès le début "Récupère-moi ces valeurs". En effet, MySQL demande d'abord un nom d'utilisateur et un mot de passe. S'il ne faisait pas ça, tout le monde pourrait accéder à votre BDD et lire les informations qu'il y a dedans (parfois confidentielles !).

Il va donc falloir que PHP s'authentifie, on dit qu'il établit une connexion avec MySQL. Une fois que la connexion sera établie, vous pourrez faire n'importe quelle opération sur votre base de données :D

On va pour commencer apprendre 3 étapes :

* La connexion
* Le choix de la base
* La déconnexion



La connexion


Pour vous connecter, vous utiliserez une fonction PHP : mysql_connect.
Cette fonction a besoin de 3 arguments qu'il vous faudra renseigner :

* Le nom de l'hôte : c'est l'IP de l'ordinateur où MySQL est installé. Le plus souvent, MySQL est installé sur le même ordinateur que PHP. Dans ce cas, mettez la valeur "localhost" et ça marchera :)
* Le login : ça permet de vous identifier. Renseignez-vous auprès de votre hébergeur pour le connaître. Le plus souvent (chez un hébergeur gratuit) c'est le même login que vous utilisez pour le FTP.
* Le mot de passe : là encore, il y a 99% de chances pour que le mot de passe soit le même que celui que vous utilisez pour accéder au FTP (ça ne vous coûte rien d'essayer :p)


On va supposer que le nom de l'hôte est "localhost" (c'est valable dans la quasi-totalité des cas), que mon login est "mateo21" et que mon mot de passe est "cFrrI954$sH".
Le code suivant permet d'établir une connexion à MySQL :

Code : PHP
<?php
mysql_connect("localhost", "mateo21", "cFrrI954$sH");
?>


Si vous faites ça, c'est bon vous êtes connectés ! :D
Il vous faudra peut-être rechercher un peu votre login et votre mot de passe (demandez à votre hébergeur), mais il y a des chances que ce soient les mêmes que pour votre FTP.

Pour vous connecter à MySQL avec WAMP (si vous faites des tests sur votre propre ordinateur), vous devez mettre l'hôte "localhost", le login "root", et pas de mot de passe.
C'est-à-dire : mysql_connect("localhost", "root", "");


Le choix de la base


OK, on est connecté, mais il faut maintenant sélectionner la base de données sur laquelle vous allez travailler.
Bien souvent, une seule base de données suffit, je vous le rappelle. D'ailleurs, la plupart des hébergeurs gratuits n'en propose qu'une seule, ce qui n'est pas bien grave.
Demandez à votre hébergeur le nom de la base qui a été créée (souvent c'est le même nom que votre login MySQL).

La fonction qui permet de sélectionner la BDD est : mysql_select_db
En temps normal, vous n'aurez besoin d'indiquer qu'un paramètre : le nom de la base.

Par exemple, si ma base s'appelle "mateo21", voici comment je dois procéder :

Code : PHP
<?php
mysql_connect("localhost", "mateo21", "cFrrI954"); // Connexion à MySQL
mysql_select_db("mateo21"); // Sélection de la base mateo21
?>


La déconnexion


Enfin, dernière chose (après ça c'est bon, promis ;) ).

Une fois que vous vous êtes connectés, que vous avez choisi votre base de données, vous pouvez commencer votre travail. Mais une fois que vous avez fini de travailler sur votre BDD, il faut vous déconnecter :p

Alors, pour se déconnecter, c'est tout bête : mysql_close
Et y'a même pas besoin de paramètre :)

En résumé, voici comment on fait pour se connecter et se déconnecter de MySQL :

Code : PHP
<?php
mysql_connect("localhost", "mateo21", "cFrrI954"); // Connexion à MySQL
mysql_select_db("mateo21"); // Sélection de la base mateo21

// On est connectés, on peut travailler sur la BDD
// ...
// ...

// On a fini de travailler, on ferme la connexion :
mysql_close(); // Déconnexion de MySQL
?>

C'est comme ça qu'on procède quand on utilise une BDD :)

Le code source précédent n'affiche rien à l'écran si tout se passe bien.
Si la connexion a échoué, vous aurez un message d'erreur. Dans ce cas c'est que votre login, mot de passe ou nom d'hôte n'est pas bon. Demandez plus d'infos à votre hébergeur.
Récupérer les données
Normalement, quand on crée un site, on doit d'abord mettre des données, puis après on les lit.
Mais moi, pour que vous appreniez en douceur, je vais d'abord vous apprendre à lire des données, et après je vous apprendrai à écrire des données dans la BDD.

Mais... il nous faudrait une base de données "toute prête" qui servirait de support pour travailler. Heureusement, c'est mon jour de bonté, je vais vous épargner tout ça ;)
Je vous invite à télécharger la table que j'ai créée pour vous :

(2,5 Ko)Télécharger la table


Faites "Fichier / Enregistrer sous" si le téléchargement ne démarre pas automatiquement.

Rien qu'au nom, vous pouvez vous douter que cette table contient quelque chose en rapport avec des jeux vidéos. En effet, vous allez le voir, cette table contient une liste d'une cinquantaine de jeux vidéos.

Pour cet exemple, plusieurs amis ont voulu répertorier tous les jeux vidéos qu'ils possèdent. La base de données est pour eux un moyen très pratique de classer et d'organiser tout cela, vous allez voir pourquoi :)

Euh dis, j'en fais quoi moi de ton fichier jeux_videos.sql ?

Inutile d'essayer de l'ouvrir, ça n'a pas d'intérêt. Il va falloir importer la table dans PHPMyAdmin (c'est le fichier que je vous ai donné).
Voici la procédure à suivre :

1. Rendez-vous dans PhpMyAdmin
2. Sélectionnez la base "test" dans le menu déroulant en haut à gauche, ou bien créez une nouvelle base de données intitulée "coursphp". Dans la suite du cours, je supposerai que votre base s'appelle coursphp.
3. Cliquez ensuite sur l'onglet "Importer".
4. En bas, vous avez un bouton "Parcourir" : cliquez dessus.
5. Dans la boîte de dialogue qui s'ouvre indiquez où se trouve le fichier jeux_videos.sql que je vous ai fait télécharger.
6. Ne touchez pas au reste et cliquez sur "Exécuter".


Petit aperçu :

Image utilisateur


Et voilà ! Vous devriez voir une nouvelle table apparaître à gauche : "jeux_videos". Vous pouvez vous amuser à regarder ce qu'elle contient, pour vous faire une idée.

Si vous n'êtes pas sûr de la marche à suivre, regardez comment je fais dans cette petite animation :

Importer un fichier SQL (2,58 Mo)


Voici les 5 premières entrées qu'elle contient (il y en a une cinquantaine en tout !) :

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 le moment ne modifiez pas cette table.

Bon, et maintenant qu'est-ce qu'on va en faire ?

Notre objectif, c'est de créer une page PHP qui va afficher ce que contient la table "jeux_videos".

Faire une requête


Maintenant arrive le grand moment que vous attendiez tous : on va demander quelque chose à MySQL. On va donc commencer à parler en "SQL" !
Pour cela, on va faire ce qu'on appelle une requête. On va demander poliement à MySQL de nous dire tout ce que contient la table "jeux_videos".

Nous allons nous servir de la fonction PHP : mysql_query

"query" en anglais veut dire "requête"

* Cette fonction prend un paramètre : ce que PHP doit aller dire à MySQL (en langage SQL).
* Cette fonction renvoie une valeur, il faut donc qu'une variable récupère ce que MySQL nous a répondu.


On fera tout le temps comme ça :

Code : PHP - Afficher / masquer les numéros de ligne

1.
<?php
2.
$reponse = mysql_query("Tapez votre requête SQL ici");
3.
?>


$reponse contiendra la réponse de MySQL.
Nous allons voir comment demander à MySQL tout ce qu'il y a dans la table "jeux_videos".

Votre première requête SQL


Comme je vous l'ai dit, le SQL est un langage. C'est lui qui nous permet de communiquer avec MySQL.
Voici votre première requête SQL :

Code : SQL - Afficher / masquer les numéros de ligne

1.
SELECT * FROM jeux_videos



Ceci peut se traduire par : "Prendre tout ce qu'il y a dans la table "jeux_videos".
Analysons chaque terme de cette requête :

* SELECT : en langage SQL, le premier mot indique quel type d'opération doit faire MySQL. Dans ce chapitre, nous ne verrons que SELECT. Ca demande à MySQL d'afficher ce que contient une table.
* * : après le SELECT, on doit indiquer quels champs MySQL doit récupérer dans la table. Si on n'est intéressé que par les champs "nom" et "possesseur", il faudra taper :
SELECT nom, possesseur FROM jeux_videos
Si vous voulez prendre tous les champs, tapez *. Cette petite étoile peut se traduire par "tout" : "Prendre tout ce qu'il y a..."
* FROM : c'est un mot de liaison. Ca se traduit par "dans". FROM fait la liaison entre le nom des champs et le nom de la table
* jeux_videos : c'est le nom de la table dans laquelle il faut aller piocher.


Et voilà le travail !
Maintenant, on n'a plus qu'à mettre cette requête en paramètre de mysql_query :

Code : PHP - Afficher / masquer les numéros de ligne

1.
<?php
2.
$reponse = mysql_query("SELECT * FROM jeux_videos");
3.
?>


Notre variable $reponse contient maintenant la réponse de MySQL :)

Euh ouais, cool, et comment on affiche le résultat ?

Afficher le résultat d'une requête


Le problème, c'est que $reponse contient quelque chose d'inexploitable. MySQL nous renvoie un joyeux bazar pas bien organisé.

Vous imaginez toutes les informations qui sont dedans ? Si c'est une table à 10 champs, avec 200 entrées, ça fait plus de 2000 informations dans une variable !
Dur dur de tout caser... sauf... si on utilisait un array !

Bingo ! :D
PHP dispose d'une fonction toute prête, mysql_fetch_array, qui va créer un array à partir de $reponse. Ce sera un tableau associatif : vous mettrez entre crochets le nom du champ qui vous intéresse.
Par exemple, si vous vous intéressez au champ "console", vous utiliserez l'array $donnees['console'].

Il faudra faire une boucle pour parcourir chaque entrée une à une. A chaque fois que vous utilisez la fonction mysql_fetch_array, vous passez à l'entrée suivante. La boucle est donc répétée autant de fois qu'il n'y a d'entrées dans votre table.

Voici donc comment je fais pour afficher le résultat de la requête :

Code : PHP - Afficher / masquer les numéros de ligne

1.
<?php
2.
mysql_connect("localhost", "mateo21", "mot_de_passe"); // Connexion à MySQL
3.
mysql_select_db("coursphp"); // Sélection de la base coursphp
4.

5.
$reponse = mysql_query("SELECT * FROM jeux_videos"); // Requête SQL
6.

7.

8.
// On fait une boucle pour lister tout ce que contient la table :
9.

10.
while ($donnees = mysql_fetch_array($reponse) )
11.
{
12.
?>
13.

14.
<p>
15.
<strong>Jeu</strong> : <?php echo $donnees['nom']; ?><br />
16.
Le possesseur de ce jeu est : <?php echo $donnees['possesseur']; ?>, et il le vend à <?php echo $donnees['prix']; ?> euros !<br />
17.
Ce jeu fonctionne sur <?php echo $donnees['console']; ?> et on peut y jouer à <?php echo $donnees['nbre_joueurs_max']; ?> au maximum<br />
18.
<?php echo $donnees['possesseur']; ?> a laissé ces commentaires sur <?php echo $donnees['nom']; ?> : <em><?php echo $donnees['commentaires']; ?></em>
19.
</p>
20.

21.
<?php
22.
}
23.

24.
mysql_close(); // Déconnexion de MySQL
25.
?>


Essayer !


Alors, vous avez vu ? o_O
Ca en fait un paquet de texte ! Il faut dire que la table que je vous ai donné contient une cinquantaine d'entrées, donc c'est normal que vous ayez beaucoup de résultats !

Et ceci mis à part, qu'en pensez-vous ? C'est puissant non ?!
Amusez-vous à changer mon script, faites des tests, c'est super important (bien entendu n'oubliez pas d'adapter le login et le mot de passe :p).

Concrètement que se passe-t-il ? On fait une boucle pour chaque entrée de la table. On commence par l'entrée n°1, puis l'entrée n°2 etc... A chaque fois qu'on fait une nouvelle boucle, on passe en revue un autre entrée.

Quelle est la différence entre $reponse et $donnees ?

$reponse contenait la réponse de MySQL en vrac.
$donnees est un array renvoyé par la fonction mysql_fetch_array. A chaque fois qu'on fait une boucle, mysql_fetch_array va chercher dans $reponse l'entrée suivante et organise les champs dans $donnees.

"Fetch" en anglais signifie "va chercher".

Avec ce que je vous ai appris, vous devriez être capable d'afficher ce que vous voulez.
Personne ne vous oblige à afficher tous les champs ! Par exemple, si j'avais voulu lister juste les noms des jeux, j'aurais fait comme ça :

Code : PHP - Afficher / masquer les numéros de ligne

1.
<?php
2.
mysql_connect("localhost", "mateo21", "mot_de_passe"); // Connexion à MySQL
3.
mysql_select_db("coursphp"); // Sélection de la base coursphp
4.

5.
$reponse = mysql_query("SELECT nom FROM jeux_videos"); // Requête SQL
6.

7.

8.
// Avec cette boucle, on liste uniquement le nom des jeux :
9.

10.
while ($donnees = mysql_fetch_array($reponse) )
11.
{
12.
echo $donnees['nom'];
13.
echo "<br />";
14.
}
15.

16.
mysql_close(); // Déconnexion de MySQL
17.
?>


Essayer !

Je sais pas vous, mais moi je trouve que là-dedans il y a quelque chose de merveilleux : ce code source est inintelligible pour Mr-tout-le-monde, et pourtant il permet d'afficher d'un coup d'un seul la liste d'une cinquantaine de jeux vidéos.
Et croyez-moi, vous n'êtes pas au bout de vos suprises avec PHP et MySQL :D


Traquer les erreurs


Lorsqu'une requête SQL "plante", bien souvent PHP vous dira qu'il y a eu une erreur à la ligne du mysql_fetch_array.
Ce n'est pas très précis, je pense que vous êtes d'accord avec moi :D Ce n'est pas la ligne du mysql_fetch_array qui est en cause : c'est souvent vous qui avez mal écrit votre requête quelques lignes plus haut.

Pour afficher des détails sur l'erreur, prenez l'habitude de rajouter le code or die(mysql_error()) sur la même ligne que vos mysql_query.

Si on reprend l'exemple de tout à l'heure, on doit donc écrire :

Code : PHP - Afficher / masquer les numéros de ligne

1.
$reponse = mysql_query("SELECT nom FROM jeux_videos") or die(mysql_error());



Ce code qu'on a rajouté ne fera rien s'il n'y a pas d'erreur.
S'il y a eu une erreur en revanche, il affichera des informations détaillées sur l'erreur qui vous permettront de comprendre ce qui ne va pas dans votre requête.

Vous trouverez plus d'infos à ce sujet dans l'annexe sur les erreurs si ça vous intéresse.

Lorsque vous avez un problème avec une requête et que vous voulez demander de l'aide sur les forums du site, donnez toujours l'erreur renvoyée par le or die(mysql_error()). Cela aidera énormément les gens à comprendre votre erreur.


Les critères de sélection
Ici, nous allons nous occuper uniquement des requêtes SQL.
Vous allez voir qu'en les modifiant, vous pouvez trier et ordonner différemment vos données très facilement :D

Nous allons nous intéresser aux éléments suivants :

* WHERE
* ORDER BY
* LIMIT



WHERE


Grâce au mot-clé WHERE, vous allez pouvoir trier vos données !

Supposons par exemple que je veuille lister uniquement les jeux appartenant à Patrick. La requête au début sera la même qu'avant, mais je rajouterai à la fin "WHERE possesseur='Patrick'".
Ca nous donne la requête :

Code : SQL
SELECT * FROM jeux_videos WHERE possesseur='Patrick'


Traduction : "Sélectionner tous les champs de la table jeux_videos lorsque le champ possesseur est égal à Patrick".

Un petit code pour voir ce que ça donne ?

Code : PHP
<?php
mysql_connect("localhost", "mateo21", "mot_de_passe");
mysql_select_db("coursphp");

// Sélectionnons les champs nom et possesseur de la table "jeux_videos", uniquement lorsque le jeu appartient à Patrick
$reponse = mysql_query("SELECT nom, possesseur FROM jeux_videos WHERE possesseur='Patrick'");

while ($donnees = mysql_fetch_array($reponse) )
{
?>

<?php echo $donnees['nom']; ?> appartient à <?php echo $donnees['possesseur']; ?><br />

<?php
}

mysql_close();
?>

Essayer !


Si vous vous amusez à changer le nom du possesseur (par exemple "WHERE possesseur='Michel'), ça n'affichera que les jeux appartenant à Michel ! Essayez, vous verrez !

Il est par ailleurs possible de mettre deux conditions. Par exemple, si je veux lister les jeux de Patrick qu'il vend à moins de 20 euros, j'utiliserai cette requête SQL :

Code : SQL
SELECT * FROM jeux_videos WHERE possesseur='Patrick' AND prix < 20


Traduction : "Sélectionner tous les champs de jeux_videos lorsque le possesseur est Patrick ET lorsque le prix est inférieur à 20".

ORDER BY


ORDER BY nous permet d'ordonner nos résultats (histoire qu'ils ne soient pas trop en vrac...).
Nous pourrions classer les résultats en fonction de leur prix ! La requête SQL serait :

Code : SQL
SELECT * FROM jeux_videos ORDER BY prix


Traduction : "Sélectionner tous les champs de jeux_videos, et ordonner les résultats par prix croissant.".

Application :

Code : PHP
<?php
mysql_connect("localhost", "mateo21", "mot_de_passe");
mysql_select_db("coursphp");

// Sélectionner les champs "nom" et "prix" de jeux_videos et ordonner les résultats par prix.
$reponse = mysql_query("SELECT nom, prix FROM jeux_videos ORDER BY prix");

while ($donnees = mysql_fetch_array($reponse) )
{
?>

<?php echo $donnees['nom']; ?> coûte <?php echo $donnees['prix']; ?> EUR<br />

<?php
}

mysql_close(); // Déconnexion de MySQL
?>

Essayer !


Et si je veux classer par ordre décroissant ?

Facile : il suffit de rajouter le mot-clé DESC à la fin :

Code : SQL
SELECT * FROM jeux_videos ORDER BY prix DESC


Traduction : "Sélectionner tous les champs de jeux_videos, et ordonner les résultats par prix décroissant.".

A noter : si on avait utilisé ORDER BY sur un champ contenant du texte, le classement aurait été fait par ordre alphabétique.


LIMIT


Dernier mot-clé que nous apprendrons dans ce chapitre, LIMIT nous permet de ne prendre qu'une partie des résultats (par exemple les 20 premiers).

Il faut rajouter à la fin de la requête le mot clé LIMIT, suivi de 2 nombres séparés par une virgule. Par exemple :

Code : SQL
SELECT * FROM jeux_videos LIMIT 0, 20


o_O Mais ils veulent dire quoi ces deux nombres ?

Bonne question :p

* On indique tout d'abord à partir de quelle entrée on commence à lire la table.Ici, j'ai mis 0. Pour MySQL c'est la première entrée (1 c'est la seconde, 2 la troisième etc...).
Attention, n'oubliez jamais que pour MySQL la première entrée est l'entrée n°0 !Par ailleurs, sachez que LIMIT ne se base PAS sur le champ ID (ça fonctionne même s'il n'y a pas de champ ID).
* Ensuite, le deuxième nombre indique combien d'entrées on doit sélectionner. Ici, j'ai mis 20, on prendra donc 20 entrées.


Donc, si on met :

LIMIT 0,20 : ça affiche les 20 premières entrées.
LIMIT 5,10 : ça affiche les entrées n°6 à 15.
LIMIT 10,2 : ça affiche les entrées n°11 et 12.

Compris ? :D

Allez un petit exemple ! Si on veut afficher les 10 premiers jeux de la table, on utilisera le code suivant :

Code : PHP
<?php
mysql_connect("localhost", "mateo21", "mot_de_passe");
mysql_select_db("coursphp");

// Sélectionner les 10 premières entrées de la table jeux_videos
$reponse = mysql_query("SELECT nom FROM jeux_videos LIMIT 0, 10");

echo "Voici les 10 premières entrées de la table jeux_videos :<p>";

while ($donnees = mysql_fetch_array($reponse) )
{
?>

<?php echo $donnees['nom']; ?><br />

<?php
}

mysql_close(); // Déconnexion de MySQL
?>

Essayer !


Et voilà le travail ! :)

Bonjour, je suis masochiste, et avant de terminer cette section je souhaiterais mélanger toutes les requêtes SQL que je viens d'apprendre en une seule. C'est possible ?

Mais bien entendu mon petit :diable:

Voilà de quoi te triturer les méninges :

Code : SQL
SELECT nom, possesseur, console, prix FROM jeux_videos WHERE console='Xbox' OR console='PS2' ORDER BY prix DESC LIMIT 0,10


Il faut utiliser les mots-clés dans l'ordre que j'ai donné : WHERE puis ORDER BY puis LIMIT, sinon MySQL ne comprendra pas votre requête.

Essayez donc de traduire ça en français déjà, pour voir si vous avez compris, puis après testez cette requête chez vous pour voir si c'est bien ce à quoi vous vous attendiez.

Pfiouuu ! Eh bah, si avec ça vous devenez pas des pros du SQL :lol:
Compter le nombre d'entrées
Avant de terminer ce chapitre, on va apprendre à faire quelque chose qui nous sera parfois très utile : demander à mysql le nombre d'entrées dans une table. Cela vous permettra de dire par exemple : Il y a 23 jeux vidéos en vente actuellement !

Pour ce faire, on va utiliser la requête suivante :

Code : PHP
<?php
mysql_connect("localhost", "mateo21", "mot_de_passe");
mysql_select_db("coursphp");

// Combien d'entrées dans jeux_vidéos ?
$retour = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM jeux_videos");
$donnees = mysql_fetch_array($retour);


?>

Il y a <?php echo $donnees['nbre_entrees']; ?> jeux vidéos en vente !

<?php
mysql_close(); // Déconnexion de MySQL
?>

Essayer !


Comme vous pouvez le voir, la requête est un peu différente. Le mot-clé COUNT demande à MySQL de compter le nombre d'entrées, et de renvoyer le résultat dans l'array $donnees['nbre_entrees'].
On ne fait pas de boucle, il n'y en a pas besoin. MySQL a juste renvoyé le nombre de jeux vidéos inscrits dans la table.

Et n'oubliez pas que vous pouvez rajouter à la fin de la requête un WHERE, par exemple pour avoir juste le nombre de jeux vidéo appartenant à Florent !
A vous de jouer ! ;)
Q.C.M.
Quelle fonction permet de choisir la base de données à utiliser ?

* mysql_select_base
* mysql_select_database
* mysql_select_db

Comment traduiriez-vous la requête suivante :
Code : SQL
SELECT utilisateur FROM liste_users

* Sélectionner le champ utilisateur de la table liste_users
* Sélectionner le champ utilisateur de la base liste_users
* Sélectionner tous les champs de la table liste_users

Quelles entrées récupère-t-on avec ce code ?Code : SQL
LIMIT 3, 10

* De la troisième à la dixième entrée
* De la quatrième à la quatorzième entrée
* De la quatrième à la treizième entrée

Que récupère cette requête SQL ?Code : SQL
SELECT * FROM ma_table WHERE prix = 15

* Sélectionner le champ * de ma_table lorsque le prix vaut 15
* Sélectionner tous les champs de ma_table lorsque prix est égal à 15
* Sélectionner tous les champs de ma_table pour un prix inférieur à 15

Que renvoie cette requête ?Code : SQL
SELECT * FROM abonnes WHERE ville='Avignon' LIMIT 0, 15 ORDER BY nom DESC

* Tous les abonnées vivant à Avignon, dans l'ordre alphabétique croissant
* Tous les abonnées vivant à Avignon, dans l'ordre alphabétique décroissant
* Une erreur












Ajouter des données

Votre mission, si vous l'acceptez : ajouter une nouvelle entrée à la table "jeux_videos" (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 ? :euh:

Non non :p
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_videos" :

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 : SQL
INSERT INTO jeux_videos(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_videos"), 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 : SQL
INSERT INTO jeux_videos VALUES('', 'Battlefield 1942', 'Patrick', 'PC', '45', '50', '2nde guerre mondiale')


Du temps que vous respectez le bon ordre des champs, tout ira bien :)

Maintenant, voici le script PHP qui utilise cette requête :

Code : PHP
<?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_videos 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.
Modifier des données
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 :D
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 : SQL
UPDATE jeux_videos 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_videos).
* 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 nous 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 vous voulez, vous pouvez vous baser sur le nom du jeu au lieu de l'ID (pour le WHERE) :
UPDATE jeux_videos SET prix='10', nbre_joueurs_max='32' WHERE nom='Battlefield 1942'


Dernière minute ! Florent vient de racheter tous les jeux de Michel ! Il va falloir modifier ça tout de suite ! :p

:euh: 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 : SQL
UPDATE jeux_videos SET possesseur='Florent' WHERE possesseur='Michel'


Traduction : Dans la table jeux_videos, 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 :waw:

Si c'est pas beau le SQL ^^
Supprimer des données
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 : SQL
DELETE FROM jeux_videos WHERE nom='Battlefield 1942'


Y'a rien de plus facile :

* DELETE FROM : pour dire "supprimer dans"
* jeux_videos : 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 ! :D
Q.C.M.
Quel(s) mot(s)-clé permettent de dire en SQL qu'on veut ajouter une entrée ?

* INSERT INTO
* INSERT
* INSERT TABLE

Que signifie cette requête ?Code : SQL
DELETE FROM jeux_videos WHERE console = 'Megadrive' AND possesseur = 'Patrick'

* Elle supprime tous les jeux de la table
* Elle supprime tous les jeux Megadrive de la table
* Elle supprime tous les jeux de Patrick fonctionnant sur Megadrive

Qu'est-ce qui ne va pas dans cette requête ?Code : SQL
DELETE * FROM jeux_videos

* L'absence de WHERE
* L'étoile
* Les deux

Je m'appelle Florent et je veux changer les commentaires de tous mes jeux qui coûtent moins de 10 euros. Je veux mettre à la place : "En promo, pas cher mon fils"
Comment je peux faire ça en une requête ?

* UPDATE TABLE jeux_videos SET prix < 10 WHERE commentaires = 'En promo, pas cher mon fils'
* UPDATE jeux_videos SET prix='En promo, pas cher mon fils' WHERE prix < 10 OR possesseur='Florent'
* UPDATE jeux_videos SET commentaires='En promo, pas cher mon fils' WHERE prix < 10 AND possesseur='Florent'

Pourquoi on ne précise pas la valeur du champ ID quand on ajoute une entrée avec INSERT INTO ?

* Ca permet d'éviter un bug de MySQL.
* MySQL met une valeur automatiquement.
* C'est l'utilisateur qui doit rentrer la valeur par la suite.

Quel est l'effet de cette requête dans la table jeux_videos ?Code : SQL
INSERT INTO jeux_videos VALUES('Dark age of camelot', 'François', 'PC', '30', '1000', 'MMORPG')

* Ca rajoute le jeu Dark age of camelot dans la BDD
* Ca fait planter MySQL
* Ca déclenche un détonateur situé dans votre microprocesseur qui provoque de lourds dégâts à votre matériel informatique.






.