Vous êtes sur la page 1sur 18

PHP et MySQL

Introduction
Gnralits Le langage HTML (HyperText Markup Language), ainsi que dcrit dans le cours HTML, permet de crer des documents indpendants de toute plate-forme, et donc particulirement bien adapts des changes d'informations dans un environnement htrogne comme le web. Cest une mthode prouve de cration de pages web. Pourquoi donc faudrait il programmer en PHP ? Pourquoi faudrait-il des pages web dynamiques ? Limites du HTML La plupart des sites web sont ralis laide du HTML et offrent un contenu statique comme les publications, les articles etc Les pages de ces sites consistent en du texte simple agrment de quelques images et de liens hypertextes menant vers dautres pages, javaScript permettant dy ajouter une touche plus sophistique si ncessaire. Or il se trouve quinternet et les intranets sont de plus en plus utiliss pour des applications, dont la plupart mettent en jeu des bases de donnes. Ces sites et leurs applications sont dynamiques, car le contenu est modifi selon les donnes impliques et les actions de lutilisateur. Cest bien l que PHP entre en scne : en excutant un programme PHP sur le serveur, vous pouvez crer de puissantes applications agissant de faon interactive avec une base de donnes, et gnrant un contenu dynamique. Ce que PHP peut faire et que HTML ne peut pas faire PHP : -facilite la modification du contenu dune page web, intervenant sur les donnes dune base et non directement dans le code HTML. -cre des pages personnalises afin de nafficher que ce qui intresse un utilisateur particulier. -affiche et actualise une base de donnes incluse dans la page web, peut y manipuler les donnes, par exemple en effectuant un tri ou en naffichant quun sous-ensemble de la base. -cre des pages qui effectuent un cycle parmi diffrentes images. -obtient une rponse de lutilisateur, puis renvoie linformation en fonction de cette rponse. -peut faire bien dautres choses encore Ce cours nest pas exaustif. Il permet de donner des notions de base tout programmeur qui souhaiterait faire ses premiers pas en PHP et en MySql. Cela tant, il est clair quune comprhension, au moins intuitive, des notions informatiques de base (quest ce quun rseau, un fichier, un diteur de

texte, un langage de programmation, une compilation etc.) est prfrable. Nous supposons en outre que vous disposez au moins de lun des environnements suivants : ! un ordinateur, connect linternet par lintermdiaire dun fournisseur daccs proposant lenvironnement MySql/PHP. ! un ordinateur sous Linux ou Windows, disposant en local dun environnement complet Apache/MySql/PHP.

A. PHP
I. Les bases du PHP
a. Dfinition Le langage PHP (Personal Home Page Tools - Hypertext Preprocessor) a t cre par Rasmus Lerdorf vers la fin de lanne 1994, pour ses besoins personnels. La mise disposition du langage sur internet fera passer son dveloppement dun individu un noyau de programmeurs compos de Andi Gutmans, Zeev Suraski, Stig Bakken, Shane Caraveo Jim Winstead, et bien sr de Rasmus Lerdorf. Cest un langage de programmation trs proche du C, dont il reprend une grande partie de la syntaxe, et destin tre intgr dans des pages HTML. Aprs diverses volutions, PHP est sa version 5. b. le fichier PHP et sa structure Le fichier PHP est enregistr au format ASCII, si bien que vous pouvez crire une page PHP laide de pratiquement nimporte quel diteur de texte : notepad, wordpad, vi, emacs Le code PHP est un script inscrit dans une page HTML.

II. La programmation en PHP


1. syntaxe a. gnralits Elle est trs simple. Tout code PHP doit tre inclus dans une balise < ?php ?>. Des balises courtes < ?> sont parfois acceptes, mais ne sont pas recommandes, car elles risquent dentrer en conflit avec dautres langages tel que XML. Comme en C, le sparateur dinstruction est le point-virgule ; b. Les commentaires Si le commentaire tient sur une seule ligne, il peut commencer par les signes // ou # . Sil sagit dun commentaire stalant sur plusieurs lignes, il faut le placer entre les signes /* et */ . Bien entendu, on peut mixer les deux styles de commentaires dans un mme script. c. Les variables et les donnes " Les variables Un nom de variable commence toujours par un $ , suivi dau moins un caractre non numrique (le _ est autoris), puis de nimporte quelle combinaison de chiffres et de caractres. En PHP, il nest pas ncessaire de dclarer les variables ni de dfinir le type de donnes quelles doivent contenir avant de pouvoir les utiliser; PHP cre automatiquement une variable ds quun symbole nouveau prfix par $ apparat dans le script. Le type dune variable peut changer si lon modifie son contenu. PHP distingue les majuscules et minuscules dans le nom des variables ; ainsi $mavariable et maVariable dsignent deux variables diffrentes ; par contre les noms de fonction sont insensibles la casse. " Les donnes Les types de base sont : Entier : utilise 4 octets de mmoire et sert reprsenter un chiffre ordinaire dpourvu de dcimales. Double : galement connu sous le nom de nombre rel ou virgule flottante, sert reprsenter une valeur possdant des dcimales et un exposant.

Chane : une chane reprsente des valeurs non numriques, comme des lettres, des signes de ponctuation mais galement des caractres numriques. Exercice 1 : mon premier programme en PHP <HTML> < ?php echo texte gnr par PHP ; ?> </HTML>

Exercice 2 <HTML> <FORM> Veuillez saisir votre nom ici : <BR> <INPUT TYPE = TEXT NAME = utilisateur> <BR><BR> <INPUT TYPE = SUBMIT VALUE = soumettre > </FORM> <BR><BR> Vous avez saisi : < ?php echo ($utilisateur) ; ?> </HTML>

2. les oprateurs a. les oprateurs arithmtiques ! + : addition ! - : soustraction ! * : multiplication ! / : division ! % : modulo

b. les oprateurs de comparaison ! == : gal ! < : est infrieur ! > : est suprieur ! <= : est infrieur ou gal ! >= : est suprieur ou gal ! != : diffrent de ! <> : diffrent de c. les oprateurs logiques ! && : et ! || ! or : ou : ou ! and : et ! xor : ou exclusif ! ! : non

3. les structures de contrle a. les instructions conditionnelles " linstruction if if (condition) {instruction1;} [else {instruction2;}]

" linstruction switch switch (variable) { case valeur1 ; instruction1 ; break ; case valeur2 ; instruction2 ; break ;

case valeur_n ; instruction_n ; break ; default : instruction ; }

b. les boucles " la boucle for for (expr1 ; expr2 ; expr3) : // instructions endfor ; " la boucle while while (condition) { // instructions } " la boucle do while do { instructions; } while (condition);

4. incorporer un fichier dans une page PHP insrez le code suivant : require ( nomDuFichier_A_insrer.extensionDuFichier ) ; 5. les fonctions Les fonctions rendent possible lcriture de code modulaire et rutilisable. Une fonction peut recevoir des arguments (des variables transmises celle-ci afin dtre utilises lintrieur de la fonction) et renvoyer une valeur. Une variable lintrieur dune fonction possde en principe une porte locale, ce qui signifie quelle nexiste qu lintrieur de la fonction et ninterfre pas avec toute variable situe lextrieur de la fonction, quand bien mme elle porterait le mme nom. Une fonction peut accder une variable globale laide de linstruction global. Les variables locales situes lintrieur dune fonction sont rinitialises chaque invocation de la fonction, moins que linstruction static ne soit utilise : dans ce cas, elle conservera la valeur quelle possdait lissue de linvocation prcdente. Les fonctions sont dclares laide de linstruction function. a. syntaxe de la dclaration function nom_fonction (paramtres) { corps de la fonction }

Exemple // dclaration et dfinition dune fonction function calculCube ($nombre) { return $nombre * $nombre * $nombre ; // renvoie $nombre la puissance 3 }

// appel de la fonction calculCube echo (cube (9)) ; // doit afficher lcran 729

B. MySql
1. utilit des bases de donnes PHP lui seul, c'est--dire pris de faon isole, ne constitue pas une solution miracle au manque de dynamisme des pages HTML. Les variables de ce langage ne peuvent retenir les donnes qui y sont stockes, que pendant la dure dexcution dun programme. Comment alors introduire plus de souplesse dans laffichage du contenu, selon les besoins et les gots des utilisateurs ? Comment nafficher que les informations auxquelles lutilisateur sintresse, ou a choisi de recevoir, comme des nouvelles ou des communiqus ? Le stockage de donnes structures devient ncessaire lorsque ces besoins doivent tre satisfaits. Pour bnficier des avantages dun site dynamique et performant, les donnes doivent tre stockes, et groupes si ncessaire dans des tables, qui constitueront une base de donnes. Il existe plusieurs systmes stables et prouvs comportant un ensemble de techniques performantes permettant aux dveloppeurs de crer des applications de bases de donnes rpondant leurs besoins : les Systmes de Gestion de Bases de Donnes (SGBD), au nombre desquels Access, Oracle, SQL Server, Sybase, InterBase, MySQL. Nous nous intresserons dans ce paragraphe au SGBD MySQL, car la solution que forme le couple (MySQL, PHP) est dune part dune popularit croissante pour la gestion de sites web dynamiques ; ensuite parce que ces deux outils constituent une solution complte aux problmes voqus cidessus, tout en restant dune grande simplicit dutilisation, et enfin parce que le tandem form par MySQL et PHP a lavantage de sassocier facilement au serveur Apache, et ce, aussi bien sous Linux que sous Windows. 2. Les instructions de dfinition de donnes Egalement appeles requtes, ou commandes, ces instructions du langage MySQL permettent de modifier le schma de la base de donnes en crant ou en modifiant des objets dans cette dernire.

# CREATE
Cette instruction permet de crer une base de donnes ou une table dans une base de donnes existante. La syntaxe de lopration de cration dune base de donnes est simple, tandis que celle de cration dune table est plus complexe car il faut y inclure la description des champs.

! Cration dune base de donnes : CREATE DATABASE nom_base_de_donnees ! Creation dune table : CREATE [TEMPORARY] TABLE [IF NOT EXISTS] nom_table (definitionCreation, ) [optionsTable] [optionSelect] definitionCreation: nomAttribut type [NOT NULL | NULL] [DEFAULT literal] [AUTO_INCREMENT] [PRIMARY KEY] [definitionReference] ou ou ou ou ou ou PRIMARY KEY (nomAttribut, ) KEY [nomIndex] (nomAttribut, ) INDEX [nomIndex] (nomAttribut, ) UNIQUE [INDEX] [nomIndex] (nomAttribut, ) [CONSTRAINT contrainte] FOREIGN KEY nomIndex (nomAttribut, ) [reference] CHECK (expression)

optionsTable :

TYPE = {ISAM | MYISAM | HEAP} ou ou ou ou ou ou ou ou ou AUTO_INCREMENT = # AVG_ROW_LENGTH = # CHECKSUM = {0 | 1} COMMENT = commentaires MAX_ROWS = # MIN_ROWS = # PACK_KEYS = {0 | 1} PASSWORD = motDePasse DELAY_KEY_WRITE = {0 | 1} optionSelect: [IGNORE | REPLACE] SELECT (requte SQL) reference: REFERENCES nomTable [(nomAttribut, )]

[MATCH FULL | MATCH PARTIAL] [ON DELETE optionRef] [ON UPDATE optionRef] optionRef RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT

La commande CREATE table cre une table dans la base de donnes courante. Loption TEMPORARY indique que la table est cre pour la connection courante uniquement. Loption optionTable permet de choisir le type de table. Le nom dun index est optionnel. Exemple dutilisation de la commande CREATE dans la cration dune base de donnes et dune table : CREATE DATABASE universite

10

Crons lintrieur de la base de donnes universite, la table etudiant : CREATE TABLE etudiant (matricule VARCHAR (40) NOT NULL, nom VARCHAR (30) NOT NULL, prenom VARCHAR (30) NOT NULL, sexe CHAR (1), anneeNaiss INTEGER, faculte VARCHAR (30), option VARCHAR (30), remarque TEXT, PRIMARY KEY (matricule));

# DELETE
syntaxe DELETE [LOW_PRIORITY] FROM nomTable [WHERE clauseWhere] [LIMIT nbLignes] Cette commande dtruit toutes les lignes vrifiant les critres de la clause WHERE. Loption LOW_PRIORITY indique MySQL que les destructions sont moins prioritaires que toutes les requtes courantes qui accdent la table. Exemple dutilisation de la commande DELETE : DELETE FROM TABLE etudiant ; Cette requte efface tous les enregistrements de la table etudiant. DELETE FROM TABLE etudiant WHERE faculte = sciences de la sant AND option = mdcine ; Cette requte efface de la table etudiant tous les tudiants inscrits dans loption mdecine de la facult science de la sant .

11

# SELECT

SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY] [DISTINCT | DISTINCTROW | ALL] listeAttributs [INTO {OUTFILE | DUMPFILE} nomFichier optionExport] [FROM clauseFROM [WHERE clauseWHERE] [GROUP BY nomAttribut, ] [HAVING clauseWHERE] [ORDER BY {entire | nomAttribut | formule} [ASC | DESC], ] [LIMIT [debut,] nbLignes] [PROCEDURES]] clauseFROM: nomTable, nomTable ou ou ou ou ou ou ou nomTable [CROSS] JOIN nomTable nomTable INNER JOIN nomTable nomTable STRAIGHT_ JOIN nomTable nomTable LEFT [OUTER] JOIN nomTable ON expression nomTable LEFT [OUTER] JOIN nomTable USING (listeAttributs) nomTable NATURAL LEFT [OUTER] JOIN nomTable nomTable LEFT OUTER JOIN nomTable ON expression

Cette commande extrait dune ou plusieurs tables les lignes qui satisfont la clause WHERE. ListeAttributs est une liste dattributs provenant des tables du FROM, ou dexpressions impliquant des fonctions. On peut faire rfrence un attribut par son nom, par le nom de sa table et son nom, ou par le nom de sa base, le nom de sa table et son nom : universite.etudiant.nom dsigne lattribut nom de la table etudiant de la base universite. Loption : -STRAIGHT_JOIN indique que la jointure doit accder aux tables dans lordre indiqu. -SQL_SMALL_RESULT prvient MySQL que le rsultat contiendra peu de lignes, ce qui permet doptimiser lexcution de la requte. -SQL_BIG_RESULT indique linverse. -HIGH_PRIORITY demande lexcution de la requte en priorit par rapport celles qui effectuent des modifications. Attention : ces options sont rserves aux utilisateurs avertis et doivent tre utilises en connaissance de cause.

12

# INSERT

INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] nomTable [(nomAttribut, )] VALUES (expression, ), (), ou ou INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] nomTable [(nomAttribut, )] SELECT INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] nomTable SET nomAttribut = expression, Exemple dutilisation de la commande INSERT INSERT INTO etudiant (matricule, nom, prenom, sexe, anneNaiss, faculte, option, remarque) VALUES (20194, GUINKO, Tonguim Ferdinand, M, 1979, sciences exactes et appliques, mathmatiques linaires, rien signaler) ; La commande INSERT insre une ou plusieurs lignes dans une table.

# USE

syntaxe : USE nomBase La commande USE permet daccder une base. Exemple dutilisation de la commande USE USE universite

13

3. Les fonctions Les fonctions suivantes peuvent tre utilises dans les requtes : ! ABS (nombre) : renvoie la valeur absolue de nombre. ! ASCII (char) : renvoie le code ASCII du caractre char. ! CONCAT (chane1, [chane2, ]) : renvoie la concatnation de tous les arguments ! CONV (nombre, base1, base2) : renvoie la conversion de nombre, de base1 en base2 ; la base est un chiffre entre 2 et 36. ! BIN (dcimal) : renvoie la valeur binaire dun nombre dcimal. ! CURDATE () : renvoie la date courante au format AAAAMMJJ ou AAAA-MM-JJ selon que le contexte est numrique ou alphanumrique. ! CURTIME () : renvoie lheure courante au format HHMMSS ou HH :MM :SS selon que le contexte est numrique ou alphanumrique. ! DATABASE () renvoie le nom de la base de donnes courante. ! DAYNAME (date) : renvoie le nom du jour en anglais. ! DAYOFMONTH (date): renvoie le numro du mois. ! DAYOFWEEK (date): renvoie le numro du jour dans la semaine. ! DAYOFYEAR (date): renvoie le numro du jour dans lanne. ! LTRIM (chane) : retire tous les caractres blancs au dbut de chane. ! MONTHNAME (date) : renvoie le nom du mois de date en anglais. ! NOW () : renvoie la date et lheure courante. ! PASSWORD (chane) : cryptage de chane avec la fonction utilise pour les mots de passe MySQL. ! UCASE (chane) : renvoie chane en majuscule.

C. Accs MySQL avec PHP

PHP communique avec MySQL par lintermdiaire dun ensemble de fonctions qui permettent de rcuprer, modifier, ou crer peu prs toutes les informations relatives une base de donnes. Parmi ces informations, il faut compter bien entendu le contenu des tables, mais galement leur description, cest dire le schma de la base. Ces fonctions sont :

14

Mysql_connect : sert tablir une connexion avec MySQL, pour un compte utilisateur, et un serveur de donnes ; renvoie une valeur qui peut tre utilise ensuite pour dialoguer avec le serveur. Mysql_pconnect: Idem, mais avec une connexion persistante. Cette deuxime version est plus performante quand linterprteur PHP est inclus dans Apache. Mysql_select_db: permet de se placer dans une base de donnes. Cest lquivalent de la commande USE base sous mysql. Mysql_query: sert excuter une requte SQL ; renvoie une variable reprsentant le rsultat de la requte. Mysql_fetch_object: permet de rcuprer une des lignes du rsultat, et positionne le curseur sur la ligne suivante. La ligne est reprsente sous forme dun objet (un groupe de valeurs). Mysql_fetch_row: permet de rcuprer une des lignes du rsultat, et positionne le curseur sur la ligne suivante ; la ligne est reprsente sous forme dun tableau (une liste de valeurs). Mysql_error : renvoie le message de la dernire erreur rencontre.

Exemple : accs MySQL avec PHP Pour accder une base de donnes MySQL, un script PHP doit : " Se connecter au serveur de bases de donnes MySQL. " Envoyer la requte SQL au serveur de bases de donnes MySQL, puis rcuprer le rsultat " Extraire les donnes du rsultat laide des fonctions " Gnrer la page HTML affichant les donnes.

<HTML> <HEAD> <TITLE> connection MySQL </TITLE> </HEAD> <BODY> <H1>interrogation de la table etudiant</H1> < ?php // connexion au serveur de bases de donnes MySQL

15

require (connect.php) ; $connexion = mysql_pconnect (serveur, nom, motDePasse) ; if ( !$connexion) { echo Dsol, connexion . serveur . impossible\n; exit ; } if ( !mysql_select_db (nomBase, $connexion)) { echo Dsol, accs la base . nomBase . impossible\n; exit ; } /* Envoyer la requte SQL au serveur de bases de donnes MySQL, puis rcuprer le rsultat*/

$resultat = myquery ( SELECT * FROM etudiant , $connexion) ; /* Extraire les donnes du rsultat laide des fonctions et Gnrer la page HTML affichant les donnes*/ if ($resultat) { while ($Etudiant = mysql_fetch_object ($resultat)) { echo $Etudiant ->matricule, de ltudiant . $Etudiant->nom $Etudiant->prenom <BR>\n ; } } else { echo <B>Erreur dans lexcution de la requte.</B><BR> ; echo <B>Message de MySQL : </B> . mysql_error

16

($connexion) ; } ?> </BODY> </HTML> La commande require permet dinclure le contenu dun fichier dans le script. Certaines informations sont communes beaucoup de scripts, et les rpter systmatiquement est la fois une perte de temps et une grosse source dennui le jour o il faut effectuer une modification dans n versions dupliques. Ici on a plac dans le fichier connect.php quelques informations de base sur le site : le nom du serveur, le nom de la base de donnes et le compte daccs la base de donnes. < ?php // connect.php $serveur = www.le_serveur_hote.com; // hte dexcution de la base de // donnes MySQL $nom = php $motDePasse = php $nomBase = universite ?> // nom de lutilisateur de la //base de donnes // mot de passe de lutilisateur // nom de la base de donnes

Conclusion Ce travail est le fruit dune part de longues recherches sur le net et dans plusieurs ouvrages, et dautre part de notre exprience en la matire. Il nest certes pas exhaustif, mais permet au programmeur qui souhaite faire ses premiers pas en PHP et/ou en MySQL de comprendre les lments de base de ces langages, en des termes simplifis. PHP ne reprsente en fait quune technologie parmi celles pouvant tre utilises pour crer des pages web plus dynamiques et plus interactives. Parmi les autres technologies permettant de raliser des sites web dynamiques nous pouvons citer :

17

-Active Server Pages (ASP) : il est similaire PHP ; linconvnient fondamental de cette technique est quelle ne peut tre utilise quavec un serveur web Microsoft (IIS, PWS), ou avec un systme dexploitation Microsoft. -JavaScript ct serveur (SSJS) : il se combine avec HTML comme les deux prcdents ; linconvnient de cette technique est quelle ncessite la compilation des applications SSJS avant de pouvoir les excuter ; de plus, SSJS nest pris en charge que par Netscape Entreprise Server. Quand aux SGBD, ils sont nombreux : Access, Oracle, SQL Server, Sybase, InterBase, MySQL La solution MySQL/PHP prsente lavantage dtre performante, et portable sur les plateforme linux et windows.

Pour aller plus loin Bibliographie J. Castagnetto, H. Rawat, S. Schumann, C. Scollo, D. Veliath, PHP professionel, Eyrolles, 2001 Philippe Riguaux, MySQL et PHP , OReilly, dition originale, 2001 Webographie http://www.wrox.fr http://www.php.net http://www.mysql.com

18