Вы находитесь на странице: 1из 63

Le langage PHP

Cours/TD PHP 1

Modle
requte

Client

internet rponse

Serveur

appel de la page

Base de donnes MySQL

extraction de donnes

Script PHP

excution

Document Html

Cours/TD PHP

Documentation en ligne
Pour obtenir en ligne toute la documentation officielle (en franais) sur une commande, tapez lURL suivante dans la barre dadresse de votre navigateur Internet : http://fr.php.net/ Et rajouter en fin dURL le nom de la commande. Exemple : http://fr.php.net/echo

Cours/TD PHP

La petite histoire du PHP


Il a t cr en 1994 par Rasmus Lerdorf pour les besoins des pages web personnelles (livre dor, compteurs, etc.). A lpoque, PHP signifiait Personnal Home Page. Cest un langage incrust au HTML et interprt ct serveur. Il drive du C et du Perl dont il reprend la syntaxe. Il est extensible grce de nombreux modules et son code source est ouvert. Comme il supporte tous les standards du web et quil est gratuit, il sest rapidement rpandu sur la toile. En 1997, PHP devient un projet collectif et son interprteur est rcrit par Zeev Suraski et Andi Gutmans pour donner la version 3 qui sappelle dsormais PHP : Hypertext Preprocessor. Il existe par ailleurs des applications web prtes lemploi (PHPNuke, PHP SPIP, PHPSlash) permettant de monter facilement et gratuitement son portail. En juillet 2000 plus de 300.000 sites tournaient dj sous PHP !

Cours/TD PHP

PHP ou HTML ?
Les 2! Les scripts PHP sont encapsuls dans le code HTML. Nanmoins, la page contenant des instructions PHP aura une extension .php Le HTML est pratique mais limit. Le PHP permet de raliser, entre autre : Un forum de discussions, un livre dor, un chat, un compteur de visite ou des application plus spcifiques. Rappel sur le HTML :

Le client (vous) demande voir une page web, le serveur rpond la demande et envoi la page demande.

Cours/TD PHP

PHP ou HTML ?
En PHP :

Le client souhaite voir une page PHP. Il fait la demande au serveur. Le serveur na pas la page en stock , il la gnre spcialement pour le client, ce dernier ntant pas capable de lire (et surtout comprendre) directement le PHP. Le serveur transforme donc la page PHP en HTML ayant au pralable excut les commandes (et script) de la page PHP. Le serveur peut alors envoy la page (html) au client. La page gnre est donc UNIQUE !
Cours/TD PHP 6

Intgration dun script dans une page


Les pages web sont au format html. Les pages web dynamiques gnres avec PHP4 sont au format php. Le code source php est directement insr dans le fichier html laide de la balise : <?php ?> Exemple: <html> <body> <?php echo Bonjour; ?> </body> </html>

Autres syntaxes dintgration : <? ?> <script language=php> </script> <% %>
7

Cours/TD PHP

Exemple de script
Exemple de script, code source (ct serveur) :
<html> <body> <h1>Mon premier script</h1> <?php echo Bonjour; ?> </body> </html>

Autre criture du mme script :


<?php echo <html><body>; echo <h1>Mon premier script</h1>; echo Bonjour; echo </body></html>; ?>

Rsultat affich par le navigateur :

Code source (ct client) de la page essai.php rsultant du script

Cours/TD PHP

De quoi avons-nous besoin ?


Pour dvelopper en PHP, il est ncessaire dinstaller plusieurs outils : un diteur de texte, Bloc Note ou Notepad++ (qui reconnat le PHP) pour taper les codes du langage, un serveur PHP, qui va interprter le langage, un navigateur pour afficher les pages. Comme serveur PHP, nous utiliserons EasyPHP (www.easyphp.org). Ce dernier va installer : Apache : c'est le programme qu'utilisent les serveurs. Il permet au serveur de distribuer des pages web... mais il ne connat que le HTML ! PHP : PHP est comme un "plugin" de Apache. Il a besoin d'Apache pour fonctionner, et grce lui Apache saura travailler sur des pages PHP. En clair, Apache + PHP = un serveur PHP MySQL : c'est un programme qui permet d'utiliser des bases de donnes. PHPmyAdmin : cest une interface dadministration des BDD.
Cours/TD PHP 9

Installons EasyPHP
Tlcharger et installer EasyPHP v1.7 Lancer EasyPHP. Licne apparat dans la barre des tches. Cliquer avec le bouton droit de la souris sur licne. Cest le menu Administration qui nous intresse.

(1) (2)

Dfinition des sites web. Gestion de la base de donnes.

Cours/TD PHP

10

Configurons EasyPHP
Dans le menu Apache , cliquer sur Ajouter Indiquer les informations : Nom (1) et emplacement (2) du site crer. (3) NE RIEN TOUCHER!!!

Si le serveur est en fonctionnement, ladresse locale devient : http://localhost ou http://128.0.0.1 En tapant une des ces deux adresses dans le navigateur, on atteint la racine de site. Il est alors possible dexcuter les page PHP. Mais passons aux choses srieuses
Cours/TD PHP 11

Commentaires
Un script php se commente : Exemple : <?php // commentaire de fin de ligne /* commentaire sur plusieurs lignes */ # commentaire de fin de ligne comme en Shell ?> Tout ce qui se trouve dans un commentaire est ignor. Il est conseill de commenter largement ses scripts.

Cours/TD PHP

12

Afficher du texte
Taper le code suivant : <html> <head> <title>Notre premire instruction : echo</title> </head> <body> <h2>Affichage de texte avec PHP</h2> <p> Cette ligne a t crite entirement en HTML.<br> <? echo "Celle-ci a t crite entirement en PHP."; ?> </p> </body> </html>

ECHO est linstruction qui donne lordre dafficher du texte. Attention ne pas oublier le ; la fin de la ligne! Note : pour afficher des " il convient de les faire prcder de \
Cours/TD PHP 13

Variables, types et oprateurs (I)


Une variable est une information stocke en mmoire temporairement. Elle n'a pas une grande dure de vie. En PHP, la variable (l'information) existe tant que la page est en cours de gnration. Ds que la page PHP est gnre, toutes les variables sont supprimes de la mmoire. C'est donc au codeur crer des variables, autant que ncessaire. Une variable est toujours constitue de 2 lments : Son nom : pour pouvoir la reconnatre, par exemple "jour". Sa valeur : c'est l'information qu'elle contient, qui peut changer. Par exemple "jeudi". Affectation dune valeur une variable : <? $votrenom = "Jean-Claude"; ?> IMPORTANT : Le signe $ prcde toujours la variable.
Cours/TD PHP 14

Variables, types et oprateurs (II)


Il existe plusieurs type de donnes : le texte : suite de caractres alphanumrique entre guillemets. le numraire : chiffres et nombres sans guillemet. les boolens : expression logique, vrai (true) ou faux (false). Exemples : <? $nombre_de_stagiaires = 12; ?> <? $je_recherche_un_stage = true; $je_suis_bon_en_php = false; ?>

Cours/TD PHP

15

Variables, types et oprateurs (III)


Afficher la valeur dune variable : <? $pseudo_du_stagiaire = "Jean Brasse"; echo "Bonjour $pseudo_du_stagiaire !"; ?> Les oprateurs :

Oprateurs arithmtiques : + (addition), - (soustraction), * (multipli), / (divis), ++ (incrment), --(dcrment).


Oprateurs logiques : and, && (et), or, || (ou), xor (ou exclusif), ! (non) Oprateurs de comparaison : == (galit), < (infrieur strict), <= (infrieur large), >, >=, != (diffrence)
Cours/TD PHP 16

Variables, types et oprateurs (IV)


Faire des calculs simples : <? $nombre1 = 2 + 4; // $nombre prend la valeur 6 $nombre2 = 5 - 1; // $nombre prend la valeur 4 $nombre3 = 3 * 5; // $nombre prend la valeur 15 $nombre4 = 10 / 2; // $nombre prend la valeur 5 // Allez on rajoute un peu de difficult $nombre5 = 3 * 5 + 1; // $nombre prend la valeur 16 $nombre6 = (1 + 2) * 2; // $nombre prend la valeur 6 ?> OU :

<? $nombre = 10; $resultat = ($nombre + 5) * $nombre; // $resultat prend la valeur 150 ?>
Cours/TD PHP 17

Variables, types et oprateurs (V)


Transmettre des variables : 1) Il est possible de transmettre des variables vers une autre page par lintermdiaire de lURL :
http://www.monsite.com/infos.php?jour=01&mois=01&annee=2005&titre=Informations

Les variables sont : jour, mois, annee, titre.


Lcriture de cette URL va crer les variables suivantes : $_GET['jour'] = 01; $_GET['mois'] = 01; $_GET['annee'] = 2005; $_GET['titre'] = "Informations"; quil suffira de rappeler dans le script PHP. Note : plusieurs variables dans lURL seront sparer par &amp; (code de & )
Cours/TD PHP 18

Variables, types et oprateurs (VI)


Exercice :
PAGE appel.php :

<html>
Cette page ne contient que du HTML.<br> Voici 3 liens vers la page cible.php, avec des variables aux valeurs diffrentes :<br> <a href="cible.php?nom=Brasse&prenom=Jean">Lien de Jean Brasse</a><br> <a href="cible.php?nom=Proviste&prenom=Alain">Lien vers Alain Proviste</a><br> <a href="cible.php?nom=Huaire&prenom=Anne">Lien vers Anne Huaire</a>

</html>

PAGE cible.php <html> Bonjour ! Votre nom est <? echo $_GET['nom']; ?> , et votre prnom est <? echo $_GET['prenom']; ?>.<br> Faites un autre essai, <a href="appel.php">cliquez ici</a> pour revenir appel.php. <html>

Cours/TD PHP

19

Variables, types et oprateurs (VII)


2) Il est possible de transmettre des variables par formulaire. On cre dans le fichier appel.php une zone de texte dans lequel sera inscrit du texte :
<html> Cette page, elle aussi, ne contient que du HTML.<br> Veuillez taper votre prnom : <form action="cible.php" method="post"> <input type="text" name="prenom"><input type="submit" value="Valider"> </form> </html>

On rcupre la variable dans le fichier cible.php laide de la variable $_POST[variable] :


<html> Bonjour ! Tu t'appelles <? echo $_POST['prenom']; ?> !<br> Si tu veux changer de prnom, <a href="appel.php">clique ici</a> pour revenir appel.php. </html>
20

Cours/TD PHP

Les fonctions (I)


Une fonction est une srie d'instructions qui retourne une valeur. Il est intressant dutiliser les fonctions lors de lutilisation complexe, longue ou rptitive dinstructions PHP.
<? $nom = "Sandra"; echo "Bonjour, $nom !<br>"; $nom = "Patrick"; echo "Bonjour, $nom !<br>";

<? function DireBonjour($nom) { echo "Bonjour $nom !<br>"; }

DireBonjour("Marie"); DireBonjour("Patrice"); $nom = "Claude"; DireBonjour("Edouard"); echo "Bonjour, $nom !"; DireBonjour("Pascale"); DireBonjour("Franois"); Etc DireBonjour("Benot"); ?> DireBonjour("Pre Nol"); ?> Note : Les { } dfinissent les limites de la fonction. La ligne comportant function ne se termine pas par ; !
Cours/TD PHP 21

Les fonctions (II)


On souhaite dfinir une fonction qui calcul le volume dun cne. Les variables seront le rayon et la hauteur. La fonction retournera le rsultat du calcul. La formule du volume dun cne est la suivante : V = 2 * PI * R * H * (1/3)

<? // calcul du volume d'un cne de rayon 5 et de hauteur 2 $volume = 5 * 5 * 3.14 * 2 * (1/3); echo "Le volume du cne de rayon 5 et de hauteur 2 est : $volume cm<sup>3</sup><br>"; // calcul du volume d'un cne de rayon 3 et de hauteur 4 $volume = 3 * 3 * 3.14 * 4 * (1/3); echo "Le volume du cne de rayon 3 et de hauteur 4 est : $volume cm<sup>3</sup><br>"; ?>

Note : Utilisation du . la place de la , !


Cours/TD PHP 22

Les fonctions (III)


Cration de la fonction :
<? // Ci-dessous, la fonction qui calcule le volume du cne function VolumeCone($rayon, $hauteur) { $volume = $rayon * $rayon * 3.14 * $hauteur * (1/3); // calcul du volume return $volume; // indique la valeur renvoyer, ici le volume } $volume = VolumeCone(3, 1); echo "Le volume d'un cne de rayon 3 et de hauteur 1 est de $volume"; ?> Linstruction RETURN indique que la fonction doit renvoyer le rsultat du calcul dans la variable $volume.

Cours/TD PHP

23

Les fonctions (IV)


Exercice : Sur la base des exercices prcdents, on souhaite raliser la fonction partir de donnes envoyes par formulaire. Le formulaire permettra dinscrire les donnes ncessaire au calcul :

Une page de rsultat sera affiche :

Cours/TD PHP

24

Les fonctions (V)


PHP intgre dinnombrables fonctions. Il est alors utile de sen servir pour raliser des calculs ou commandes particulires. Il y a deux type de fonctions : - celles qui effectuent des actions et ne renvoient aucune valeur, - celles,qui aprs calculs, renvoient une valeur. Les fonctions le plus courantes permettent : - de rechercher et de remplacer des mots dans une variable - denvoyer un fichier sur un serveur - de crer des images miniatures (aussi appeles thumbnails) - denvoyer un mail avec PHP (trs pratique pour faire une newsletter !) - de modifier des images, y crire du texte, tracer des lignes, des rectangles etc... - de crypter des mots de passe. - de renvoyer l'heure, la date... - etc
Cours/TD PHP 25

Les fonctions (V)


Application dune fonction : date <? $annee = date("Y"); echo "$annee"; ?> Exemple : <? // Enregistrons les informations de date dans des variables $jour = date("d"); $mois = date("m"); $annee = date("Y"); $heure = date("H"); $minute = date("i"); // Maintenant on peut afficher ce qu'on a recueilli echo "Bonjour ! Nous sommes le $jour/$mois/$annee et il est $heure h $minute."; ?>
Cours/TD PHP 26

Paramtre H i

Description Heure Minute

d
m Y

Jour
Mois Anne

Les conditions (I)


La structure IF . ELSE
<? if ($age <= 12) { echo "Salut gamin !"; } ?> Symbole == > < >= <= Signification Est gal Est suprieur Est infrieur Est suprieur ou gal Est infrieur ou gal

!= Est diffrent de IF introduit la condition. Elle sexprime entre (). Si la condition est remplie, les instructions entre accolades seront excutes. On ajoute ELSE (si la condition nest pas remplie) : <? $age = 8; if ($age <= 12) // Si l'ge est infrieur ou gal 12 { echo "Salut gamin ! Bienvenue sur mon site !<br>"; $autorisation_entrer = "Oui"; } else // SINON { echo "Ceci est un site pour enfants, vous tes trop vieux pour pouvoir entrer. Au revoir !<br>"; $autorisation_entrer = "Non"; } echo "Avez-vous l'autorisation d'entrer ? La rponse est : $autorisation_entrer"; ?>
Cours/TD PHP 27

Les conditions (II)


On peut alors utiliser la variable boolenne pour dautres conditions :
<? if ($autorisation_entrer == "Oui") // SI on a l'autorisation d'entrer { // instructions excuter quand on est autoris entrer } elseif ($autorisation_entrer == "Non") // SINON SI on n'a pas l'autorisation d'entrer { // instructions excuter quand on n'est pas autoris entrer } else // SINON (la variable ne contient ni Oui ni Non, on ne peut pas agir) { echo "Euh, je ne connais pas ton ge, tu peux me le rappeler s'il te plat ?"; } ?>

Else if signifie Sinon si . 1. Si $autorisation_entrer est gal "Oui", tu excutes ces instructions... 2. Sinon si $autorisation_entrer est gal "Non", tu excutes ces autres instructions... 3. Sinon, tu redemandes l'ge pour savoir si on a ou non l'autorisation d'entrer. Note : au dpart une variable est vide! Pour vrifier : if ($variable == NULL)
Cours/TD PHP 28

Les conditions multiples


Mot-cl Signification Symbole quivalent && || AND Et <? if ($age <= 12 AND $sexe == "garon") OR Ou { echo "Bienvenue sur le site de Captain Mgakill !"; } elseif ($age <= 12 AND $sexe == "fille") { echo "C'est pas un site pour les filles ici, retourne jouer la Barbie !"; } ?>

<? if ($sexe == "fille" OR $sexe == "garon") { echo "Salut Terrien !"; } else { echo Si t'es ni une fille ni un garon, t'es quoi alors ?"; } ?>
Cours/TD PHP 29

Les conditions boolennes


<? if ($autorisation_entrer == true) { echo "Bienvenue petit Zr0 :o)"; } elseif ($autorisation_entrer == false) { echo "T'as pas le droit d'entrer !"; } ?> En omettant le rsultat " == true " , la condition est tout de mme ralise. Remarque : if ($variable == false) quivaut if (NOT $variable)

Ce sont les variables qui valent vrai (true) ou faux (false).

<? if ($autorisation_entrer) { echo "Bienvenue petit Zr0 :o)"; } else { echo "T'as pas le droit d'entrer !"; } ?>

Cours/TD PHP

30

Lastuce sur les conditions


<? if ($variable == 23) { echo "<strong>Bravo !</strong> Vous avez trouv le nombre mystre !"; } ?> EQUIVAUT A : <? if ($variable == 23) { ?> <strong>Bravo !</strong> Vous avez trouv le nombre mystre ! <? } ?> Si la condition remplie ncessite lexcution dun (long) code HTML, il savre pratique douvrir laccolade juste aprs la condition puis de fermer la balise PHP (?>) et dinsrer le code HTML souhait. Penser enfin rouvrir la balise PHP, refermer laccolade puis refermer PHP.
Cours/TD PHP 31

TP n1 : protection par mot de passe (I)


Ce premier TP va permettre de mettre en pratique les quelques instructions PHP vue jusqu prsent et de vrifier lefficacit du langage. Notions requises : Afficher du texte avec echo Utiliser les variables (affectation, affichage...) Transmettre des variables via une zone de texte Utiliser des conditions simples (if, else) Problme pos : vous avez cr une page web qui contient des informations confidentielles et vous voulez la protger par mot de passe pour que seuls ceux possdant le mot de passe puissent y accder. Sans ce mot de passe, on ne doit pas pouvoir afficher la page. Schma du code : On ne doit travailler que sur une seule page. Cette page affiche au dpart une zone de texte pour rentrer le mot de passe. Si le mot de passe est bon, on affiche les informations confidentielles. Sinon, on propose nouveau de rentrer le mot de passe.
Cours/TD PHP 32

TP n1 : protection par mot de passe (II)


Quelques indices : - une seule variable est ncessaire pour le code, celle correspondant au mot de passe : $mot_de_passe - Rcuprer le mot de passe entr par formulaire : $_POST['mot_de_passe'] - Puisquau premier affichage, aucun mot de passe na t entre, la variable $_POST['mot_de_passe'] est donc vide : inutile de vrifier si le mot de passe est bon! Cest seulement lorsque le visiteur clique sur Envoyer pour valider le mot de passe que la variable est cre. La fonction PHP isset sera vraie si la variable existe : autant lutiliser! Cela donne :
(isset($_POST['mot_de_passe'])) { // on peut vrifier le mot de passe }

A VOUS DE JOUER !
Cours/TD PHP 33

Les boucles (I)


1. Comme d'habitude, les instructions sont d'abord excuts dans l'ordre, de haut en bas (flche rouge) 2. A la fin des instructions, on retourne la premire (flche verte) 3. Et on recommence lire les instructions dans l'ordre (flche rouge) 4. Et on retourne la premire (flche verte) 5. etc etc... Sans instruction supplmentaire, cette boucle se ralise indfiniement. Il faut donc ajouter une condition : WHILE (tant que)
<? while ($continuer_boucle == "oui") { // instructions excuter dans la boucle } ?>
34

Cours/TD PHP

Les boucles (II)


Essayer ce code :
<? $nombre_de_lignes = 1; while ($nombre_de_lignes <= 100) { echo "Je ne dois pas regarder les mouches voler quand j'apprends le PHP.<br>"; $nombre_de_lignes++; // $nombre_de_lignes = $nombre_de_lignes + 1 } ?> La boucle pose la condition : tant que le nombre de ligne est infrieur 100 Si la condition esr remplie on affiche un message puis on incrmente (valeur = valeur +1) la variable $nombre_de_lignes.

Important : Il faut TOUJOURS s'assurer que la condition soit au moins remplie une fois. Si elle ne l'est jamais, alors la boucle s'excutera l'infini !
Note : Lastuce concernant les conditions est aussi valable pour les boucles!
Cours/TD PHP 35

Les boucles (III)


Linstruction FOR. <? for ($nombre_de_lignes = 1; $nombre_de_lignes <= 100; $nombre_de_lignes++) { echo "Ceci est la ligne n$nombre_de_lignes<br />"; } ?>

On dfinit en une seule ligne trois lments, spars par des ; : Le premier sert l'initialisation. C'est la valeur que l'on donne au dpart la variable (ici elle vaut 1). Le second, c'est la condition. Comme pour le While, tant que la condition est remplie, la boucle est rexcute. Ds que la condition ne l'est plus, la boucle s'arrte. Enfin, le troisime c'est l'incrmentation, qui vous permet d'ajouter 1 la variable.

Cours/TD PHP

36

Les tableaux (array) (I)


Un array est une variable tableau un peu spciale. Elle peut prendre plusieurs valeurs. Prenons un exemple : <? $prenom = "Nicole"; echo "Bonjour $prenom !"; // Cela affichera : Bonjour Nicole ! ?>

Nom

Valeur

$prenom

Nicole

$prenoms Numro 0 1 Valeur Franois Michel

2
3 4 ...

Nicole
Vronique Benot ...

Il est pourtant possible de donner la variable $prenom plusieurs valeurs. $prenom est une array. Les valeurs sont ranges dans des cases diffrentes, et sont numrotes dans ce cas. Pour afficher Benot, il faut faudra pas appeler la variable $prenom mais lui indiquer dafficher le contenu de la case n4 de la varialbe $prenom : <? echo $prenoms[3]; ?>

Cours/TD PHP

37

Les tableaux (array) (II)


Crer un tableau : la fonction ARRAY : <? // La fonction array permet de crer un array $prenoms = array ("Franois", "Michel", "Nicole", "Vronique", "Benot"); ?> Attention, lordre a beaucoup dimportance. Il va dterminer le n des cases . Exercice : Crer un script qui cre un tableau avec 5 prnoms et qui affiche sur des lignes spare : Le prnom n $numero est : $prenom[$numero] La variable $numero pendra les valeurs 0 4 (incrment).
38

Cours/TD PHP

Les tableaux (array) (III)


Solution : <? // On cre notre array $prenoms $prenoms = array ("Franois", "Michel", "Nicole", "Vronique", "Benot"); // Puis on fait une boucle pour tout afficher : for ($numero = 0; $numero < 5; $numero++) { echo $prenoms[$numero]; // affichera $prenoms[0], $prenoms[1] etc... echo "<br />"; // pour aller la ligne } ?>

Cours/TD PHP

39

Les tableaux (array) (IV)


Problme du tableau numrot : supposons que je veuille, dans un seul array, enregistrer les coordonnes de quelqu'un (nom, prnom, adresse, ville, etc...). Si l'array est numrot, comment savoir que le n0 c'est le nom, le n2 l'adresse ? Etc Solution : Les tableaux associatifs : plutt que dutiliser des numros pour les cases du tableau, on va utiliser des tiquettes :
<? // On cre notre array $coordonnees $coordonnees = array ( "Prnom" => "Franois", "Nom" => "Dupont", "Adresse" => "3, rue du Paradis", "Ville" => "Marseille"); ?>

Note : une seule instruction, un seul ; , => pour faire lassociation. Pour afficher le contenu de cet array : echo $coordonnees['Ville']
Cours/TD PHP 40

Partie 2 : MySQL

Cours/TD PHP

41

Prsentation
MySQL est une base de donnes implmentant le langage de requte SQL un langage trs connu. Il existe un outil libre et gratuit dvelopp par la communaut des programmeurs libres : phpMyAdmin qui permet ladministration aise des bases de donnes MySQL avec PHP. phpMyAdmin est inclus dans EasyPHP. Avec MySQL on peut crer plusieurs bases de donnes sur un serveur. Une base est compose de tables contenant des enregistrements.
1. 2. Le serveur utilise toujours PHP, il lui fait donc passer le message. PHP effectue les actions demandes 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. MySQL fait le travail que PHP lui avait soumis et lui rpond "OK, c'est bon !" PHP renvoie au serveur que MySQL a bien fait ce qu'il tait demand.

3. 4.

Cours/TD PHP

42

Structure dune base de donnes


La base de donne utilise un vocabulaire prcis :
La base, c'est l'armoire. C'est le gros meuble dans lequel les secrtaires 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 donnes diffrentes. Par exemple, on peut imaginer un tiroir qui contient les pseudonymes et infos sur vos visiteurs, un autre qui contient les messages posts sur un forum... Mais que contient une table ? C'est l que sont enregistres les donnes, sous la forme d'un tableau. Dans ce tableau, les colonnes sont appeles des champs, et les lignes sont appeles des entres. Par exemple, voici quoi peut ressembler le contenu d'une table appele "visiteurs" : champs

La table visiteurs
entres

Numro
1 2 3 4 ...

Pseudonyme
Kryptonic Serial_Killer M@teo21 Bibou ...

E-mail
kryptonic@free.fr serialkiller@unitedgamers.com top_secret@siteduzero.com bibou557@laposte.net ...

Age
24 16 18 29 ...
43

Cours/TD PHP

phpMyAdmin
Pour effectuer des manipulations sur les bases de donnes, nous utiliserons un ensemble de pages PHP qui dialogue avec la base de donnes : phpMyAdmin.

1. 2.

Liste des bases : dans ce menu droulant sont listes vos bases de donnes. Le nombre entre parenthses, c'est le nombre de tables qu'il y a dans la base. Crer une base : tapez un nom pour votre base de donnes, cliquez sur "Crer" et hop ! C'est fait.
44

Cours/TD PHP

Cration dune base


Nous allons travailler sur la base test , et crer une table news :

Et crer trois champs :


id : comme bien souvent, vous allez devoir crer un champ appel "id". C'est le numro d'identification. Grce lui, toutes vos entres seront numrotes, ce qui est bien pratique. Il y aura ainsi la news n1, n2, n3 etc... titre : ce champ contiendra le titre de la news. contenu : enfin, ce champ contiendra la news en elle-mme.

Cours/TD PHP

45

Les champs
Un champ peut contenir du texte, des nombres, des dates etc... Il faut donc dfinir quel type de donnes contiendra le champ. Voici les principaux types de donnes :
INT : nombre entier. Il y a plusieurs variantes, selon la grandeur des nombres que a peut comporter. Dans l'ordre, il y a TINYINT (trs 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 mme manire. A vous de choisir celui qui vous parat le plus adapt. DATE : date de la forme "YYYY-MM-DD", "YY-MM-DD" ou "YYMMDD" (c'est le format amricain, eh oui !) TIME : l'heure, de la forme "HH:MM:SS" ou "HHMMSS" ou "HHMM" ou "HH". DATETIME : mlange 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 donnes.

Options du champ id :
- auto_increment pour incrmenter automatiquement la valeur de id - index pour acclerer les recherches.

Cours/TD PHP

46

Modification dune base (I)


La table news est visible sous la base test . Affichage de la structure de la base :

Cours/TD PHP

47

Modification dune base (II)


On clique sur Insrer

Remplir titre et contenu puis Excuter , ceci plusieurs fois.


Cours/TD PHP 48

Modification dune base (III)


On affiche le contenu de la base : Afficher

1. Afficher tout le texte : en cliquant sur le T majuscule, cela affiche la totalit du texte. 2. Modifier l'entre : cette petite image permet de modifier l'entre slectionne (pour apporter des modifications une news par exemple). 3. Supprimer l'entre : ce bouton supprime l'entre slectionne. 4. Afficher X lignes partir de l'enregistrement n X : s'il y a beaucoup d'entres dans la table, PhpMyAdmin n'en affichera qu'une slection (les 30 premires lignes normalement). Pour en afficher plus, il suffit de modifier ces valeurs puis de cliquer sur "Afficher".
Cours/TD PHP 49

Autres oprations
SQL : Pour effectuer des requtes dans la base. Exporter : Pour rcuprer le contenu et/ou la structure de la base de donnes sur le disque dur (sous forme de fichier). Utile pour la sauvegarde! Oprations : changer le nom de la table, dplacer, copier, rparer et optimiser la table. Vider : Pour supprimer tout le contenu (les champs) de la table. La structure est maintenue. Supprimer : Pour supprimer la totalit de la base : structure + donnes.

Cours/TD PHP

50

Connexion
Pour lire des donnes dans une base de donnes, il faut sy connecter. Problme : PHP ne peut pas dire MySQL ds le dbut "Rcupre-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 accder votre BDD et lire les informations sy trouvant (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, il sera possible deffectuer nimporte quelle opration sur la base de donnes. Utilisation de la fonction : mysql_connect Cette fonction a besoin de trois arguments :
Le nom de l'hte : c'est l'IP de l'ordinateur o MySQL est install. Le plus souvent, MySQL est install sur le mme ordinateur que PHP. Dans ce cas, mettez la valeur "localhost". Le login : cest lidentifiant de connexion. Avec EasyPHP : root Le mot de passe. Avec EasyPHP : aucun mot de passe. <? mysql_connect("localhost", "monlogin", "monmotdepasse"); ?>

Cours/TD PHP

51

Choix de la base
Une fois connect, il faut slectionner la base de donnes sur laquelle on veut travailler. Cest la fonction : mysql_select_db
<? mysql_connect("localhost", "monlogin", "monmotdepasse"); // Connexion MySQL mysql_select_db("mabase"); // Slection de la base mabase ?> Une fois le travail termin, il convient de se dconnecter de la base : mysql_close

<? mysql_connect("localhost", "monlogin", "monmotdepasse"); // Connexion MySQL mysql_select_db("mabase"); // Slection de la base mabase
// connect, on peut travailler sur la BDD // ... // ... // On a fini de travailler, on ferme la connexion : mysql_close(); // Dconnexion de MySQL ?>

Cours/TD PHP

52

Lire des donnes


Lobjectif est de crer un page PHP pour afficher le contenu dune table dans une base de donnes. Faire une requte : mysql_query
<? $reponse = mysql_query("Tapez votre requte SQL ici"); ?> $reponse contiendra la rponse de MySQL. La requte doit tre faite avec un langage reconnu par MySQL : le SQL! La premire requte : SELECT * FROM matable
SELECT : en langage SQL, le premier mot indique quel type d'opration doit faire

MySQL. SELECT demande MySQL d'afficher ce que contient une table. * : indique quels champs MySQL doit rcuprer dans la table. * = tous les champs ; pour des champs particuliers : SELECT champ1, champ2 FROM matable FROM : c'est un mot de liaison. Il se traduit par "dans". FROM fait la liaison entre le nom des champs et le nom de la table. matable : c'est le nom de la table dans laquelle il faut aller chercher.

Cours/TD PHP

53

Afficher les donnes


Le problme, c'est que $reponse contient quelque chose d'inexploitable. La table pouvant contenir dinnombrables champs avec une multitude dentres! Il faudrait pouvoir ranger les rsultats dans une tableau. Le ARRAY ! PHP dispose dune fonction qui permet deffectuer cette tche : elle cre un array partir de la variable $reponse : mysql_fetch_array Pour crr cet array il suffit dutiliser : $donnees = mysql_fetch_array($reponse) Le fait dutiliser la fonction mysql_fetch_array fait passer la table lentre suivante. Si la table contient trois champs : champ1, champ2 et champ3, on pourrait les afficher : - le contenu du champ n1 : <? echo $donnees['champ1']; ?> - le contenu du champ n2 : <? echo $donnees['champ2']; ?> - le contenu du champ n3 : <? echo $donnees['champ2']; ?> En utilisant un WHILE, la boucle daffichage serait excute tant quil y a des donnes dans la table.
Cours/TD PHP 54

Afficher les donnes : Exemple


<? mysql_connect("localhost", "monlogin", "monmotdepasse"); // Connexion MySQL mysql_select_db("mabase"); // Slection de la base mabase $reponse = mysql_query("SELECT nom FROM matable"); // Requte SQL // Avec cette boucle, on liste uniquement le champ1 de toutes les entres :

while ($donnees = mysql_fetch_array($reponse) ) { echo $donnees[champ1']; echo "<br />"; } mysql_close(); // Dconnexion de MySQL ?>

Cours/TD PHP

55

Les critres de slection


Heureusement, il est possible de trier et dordonner les donnes renvoyes par MySQL laide des lments : WHERE, ORDER BY et LIMIT. - SELECT * FROM matable WHERE nomduchamp=jackpot' Traduction : "Slectionner tous les champs de la table matable lorsque le champ nomduchamp est gal jackpot. - SELECT * FROM matable ORDER BY nomduchamp Traduction : "Slectionner tous les champs de matable, et afficher les rsultats par ordre croissant du champ nomduchamp." Ajouter DESC pour un tri dcroissant. - SELECT * FROM matable LIMIT 0, 20 Traduction : On indique tout d'abord partir de quelle entre on commence lire la table.Ensuite, le deuxime nombre indique combien d'entres on doit slectionner. Ici : 20 entres.
LIMIT 0,20 : a affiche les 20 premires entres, LIMIT 5,10 : a affiche les entres n6 15, LIMIT 10,2 : a affiche les entres n11 et 12.

Cours/TD PHP

56

Les critres de slection : Exemple


<? mysql_connect("localhost", "monlogin", "monmotdepasse"); mysql_select_db("mabase"); // Slectionner les 10 premires entres de la table matable // pour lesquel le champ1= texte et le champ2 > 10, tries selon le champ3 $reponse = mysql_query("SELECT * FROM matable WHERE champ1='texte' AND champ2>10 ORDER BY champ3 LIMIT 0, 10"); echo "Voici les 10 entres de la table avec les conditions souhaites :<p>"; while ($donnees = mysql_fetch_array($reponse) ) { ?> <? echo $donnees['champ1']; ?><br>

<? }
mysql_close(); // Dconnexion de MySQL ?>
Cours/TD PHP 57

Le comptage
Demandons MySQL de compter le nombre dentre dune table :
<? mysql_connect("localhost", "monlogin", "monmotdepasse"); mysql_select_db("mabase"); // Combien d'entres dans matable ? $retour = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM matable"); $donnees = mysql_fetch_array($retour); ?> Il y a <? echo $donnees['nbre_entrees']; ?> entres dans la table matable ! <? mysql_close(); // Dconnexion de MySQL ?>

Cours/TD PHP

58

Exercice
Vous disposez du fichier table.sql qui va crer une table personnel . Cette table contient le carnet dadresse du personnel dune entreprise. Les champs sont le suivants :
id
INT

nom
TEXT

prenom
TEXT

naissance
DATE

sexe
TEXT

salaire
INT

1. Crer la table partir de phpMyAdmin : outil SQL. 2. Crer une page qui permette dafficher :
- le nombre de personnes travaillant dans cette entreprise, - tous le personnel, du salaire le plus lev au moins lev, - le pourcentage dhommes et de femmes, - le nombre et le nom des femmes gagnant moins de 1250, - le nombre et le nom des hommes ayant plus de 30 ans - la moyenne dge de lentreprise.

Cours/TD PHP

59

Ecrire des donnes


On souhaite ajouter un nouvel employ lentreprise, en PHP.
id
1 2

nom
Brasse Proviste

prenom
Jean Alain

naissance
1976-01-27 1971-10-02

sexe
M M

salaire
1524 1253

La requte SQL est la suivante : INSERT INTO personnel(ID, nom, prenom, naissance, sexe, salaire, commentaires) VALUES('', 'Impique', 'Jean-Paul', '1959-08-08', 'M', '963') - garder dans VALUES lordre dfini dans INSERT INTO, - le premier champ ID est vide puisquen auto_increment, - le nom des champs aprs matable est facultatif.

Cours/TD PHP

60

Modifier et supprimer des donnes


Pour modifier le champ dune entre, la requte est la suivante : UPDATE personnel SET nom='Brasse-Huaire', salaire='1831' WHERE ID='3' mot-cl qui dtermine les champs modifier Mise jour Nom de la table Indique quelle entre subit la modification. Ici, cest lentre o le champ ID vaut 3

Pour supprimer des donnes : DELETE FROM personnel WHERE prenom='Jean Note : Ne pas prciser de champ pars WHERE quivaut vider la table!

Cours/TD PHP

61

TP n2 : Un Tchat (I)
Notions requises : Transmission de variables via un formulaire Lire dans une table Ecrire dans une table

On souhaite avoir, sur la mme page, deux zones de texte en haut : une pour crire votre pseudo, une autre pour crire votre petit message. Ensuite, un bouton "Envoyer" permettra d'envoyer les donnes MySQL, pour qu'il les enregistre dans une table de la Base de Donnes. En-dessous, le script devra afficher les 10 derniers messages qui ont t enregistrs

Sens des messages

Cours/TD PHP

62

TP n2 : Un Tchat (II)
Ce quil faut : - une table appele minichat - un champ ID de type INT en auto_increment, - deux champs (PSEUDO et MESSAGE) de type VARCHAR (limit 255 caractres) Quelques indices : - si un message a t entr, alors on enregistre dans la table et on affiche les 2 zones de texte et les 10 derniers messages. Champs inexistants (isset) ou vide (NULL) : on ne fait rien! - le formulaire doit renvoyer sur la mme page. Si votre page s'appelle "minichat.php", alors votre balise de formulaire sera : <form action="minichat.php" method="post">

Facultatif : pour viter dcrire du code HTML dans la BDD, utiliser : $message = htmlentities ($_POST['message']); (de mme pour $pseudo)

A VOUS DE JOUER !
Cours/TD PHP 63

Вам также может понравиться