PHP et MySQL
Introduction
Or il se trouve qu’internet et les intranets
sont de plus en plus utilisés pour des applications, dont la plupart mettent
en jeu des bases de données. Ces sites et leurs applications sont dynamiques,
car le contenu est modifié selon les données impliquées et les actions de l’utilisateur. C’est bien là
que PHP entre en scène : en exécutant un programme PHP sur le serveur,
vous pouvez créer de puissantes applications agissant de façon interactive
avec une base de données, et générant un contenu dynamique.
-facilite la modification du contenu d’une
page web, intervenant sur les données d’une base et non
-crée des pages personnalisées afin de n’afficher
que ce qui intéresse un utilisateur particulier.
-crée des pages qui effectuent un cycle parmi
différentes images.
-obtient une réponse de l’utilisateur, puis
renvoie l’information en fonction de cette réponse.
-peut faire bien d’autres choses encore…
Ce cours n’est 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 qu’une compréhension,
au moins intuitive, des notions informatiques de base (qu’est ce qu’un réseau,
un fichier, un éditeur de texte, un langage de programmation, une compilation
etc.) est préférable. Nous supposons en outre que vous disposez au moins
de l’un des environnements suivants :
•un ordinateur
sous Linux ou Windows, disposant en local d’un environnement complet Apache/MySql/PHP.
C’est un langage de programmation très proche
du C, dont il reprend une grande partie de la syntaxe, et destiné à être
intégré dans des pages HTML.
Après diverses évolutions, PHP est à sa version
5.
Le code PHP est un script inscrit dans une
page HTML.
II.
La programmation en PHP
Tout code PHP doit être inclus dans une balise
< ?php … ?>. Des balises « courtes »
< ?>
sont parfois acceptées, mais ne sont pas recommandées, car elles risquent
d’entrer en conflit avec d’autres langages tel que XML.
Comme en C, le séparateur d’instruction est
le point-virgule « ; »
Bien entendu, on peut mixer les deux styles
de commentaires dans un même script.
Un nom de variable
commence toujours par un « $ », suivi d’au moins un caractère
non numérique (le « _ » est autorisé), puis de n’importe
quelle combinaison de chiffres et de caractères.
En PHP, il n’est pas nécessaire de déclarer
les variables ni de définir le type de données qu’elles doivent contenir
avant de pouvoir les utiliser; PHP crée automatiquement une variable dès
qu’un symbole nouveau préfixé par « $ » apparaît dans le script. Le
type d’une variable peut changer si l’on modifie son contenu.
PHP distingue les majuscules et minuscules
dans le nom des variables ; ainsi « $mavariable » et « maVariable »
désignent deux variables différentes ; par contre les noms de fonction
sont insensibles à la casse.
• Les données
Entier : utilise 4
octets de mémoire et sert à représenter un chiffre ordinaire dépourvu de
décimales.
< ?php
echo « texte généré par PHP » ;
?>
</HTML>
Exercice 2
<FORM>
Veuillez saisir votre nom ici :
<BR>
<INPUT TYPE = TEXT NAME = utilisateur>
<BR><BR>
<INPUT TYPE = SUBMIT VALUE = « soumettre »>
</FORM>
Vous avez saisi :
echo ($utilisateur) ;
?>
</HTML>
« - »
: soustraction
« * »
: multiplication
« / »
: division
« % » :
modulo
b. les opérateurs de comparaison
« < »
: est inférieur à
« > »
: est supérieur à
« <= » :
est inférieur ou égal à
« >= » :
est supérieur ou égal à
« != »
: différent de
« <> » :
différent de
c. les opérateurs logiques
« || »
: ou
« and » :
et
« or »
: ou
« xor »
: ou exclusif
« ! » :
non
a. les
instructions conditionnelles
• l’instruction if
if (condition)
{instruction1;}
[else
{instruction2;}]
• l’instruction switch
switch (variable) {
case valeur1 ;
instruction1 ;
break ;
case valeur2 ;
instruction2 ;
break ;
instruction_n ;
break ;
default :
instruction ;
}
// instructions
endfor ;
// instructions
}
• la boucle do … while
do {
instructions;
} while (condition);
4. incorporer
un fichier dans une page PHP
Les fonctions sont déclarées à l’aide de l’instruction
function.
a. syntaxe de la déclaration
function nom_fonction (paramètres) {
corps de la fonction
}
Exemple
// déclaration et définition d’une fonction
function calculCube ($nombre) {
return $nombre * $nombre * $nombre ; // renvoie $nombre à la
puissance 3
}
echo (cube (9)) ; // doit afficher à l’écran 729
1. utilité
des bases de données
PHP à lui seul, c'est-à-dire
pris de façon isolée, ne constitue pas une solution miracle au manque de
dynamisme des pages HTML. Les variables de ce langage ne peuvent retenir
les données qui y sont stockées, que pendant la durée d’exécution d’un programme.
Comment alors introduire plus de souplesse
dans l’affichage du contenu, selon les besoins et les goûts des utilisateurs ?
Comment n’afficher que les informations auxquelles l’utilisateur s’intéresse,
ou a choisi de recevoir, comme des nouvelles ou des communiqués ? Le
stockage de données structurées devient nécessaire lorsque ces besoins doivent
être satisfaits.
Pour bénéficier des avantages d’un site dynamique
et performant, les données doivent être stockées, et groupées si nécessaire
dans des tables, qui constitueront une base de données.
Création d’une base
de données :
CREATE DATABASE nom_base_de_donnees
Creation d’une 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 PRIMARY
KEY (nomAttribut, …)
ou KEY [nomIndex]
(nomAttribut, …)
ou INDEX [nomIndex] (nomAttribut, …)
ou UNIQUE [INDEX] [nomIndex] (nomAttribut,
…)
ou [CONSTRAINT contrainte] FOREIGN KEY nomIndex
(nomAttribut, …) [reference]
ou CHECK (expression)
optionsTable :
TYPE = {ISAM | MYISAM | HEAP}
ou AUTO_INCREMENT = #
ou AVG_ROW_LENGTH = #
ou CHECKSUM = {0 | 1}
ou COMMENT = « commentaires »
ou MAX_ROWS = #
ou MIN_ROWS = #
ou PACK_KEYS = {0 | 1}
ou PASSWORD = « motDePasse »
ou DELAY_KEY_WRITE = {0 | 1}
optionSelect:
reference:
[MATCH
FULL | MATCH PARTIAL]
[ON
DELETE optionRef]
[ON
UPDATE optionRef]
optionRef
RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
Le nom d’un index est optionnel.
CREATE DATABASE universite
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));
[WHERE clauseWhere] [LIMIT nbLignes]
Cette commande détruit toutes les lignes vérifiant
les critères de la clause WHERE.
L’option LOW_PRIORITY indique à
MySQL que les destructions sont moins prioritaires que toutes les requêtes
courantes qui accèdent à la table.
Cette requête efface tous les enregistrements
de la table etudiant.
DELETE FROM TABLE etudiant WHERE faculte =
‘sciences de la santé’ AND
option = ‘médécine’ ;
Cette requête efface de la table etudiant tous les étudiants inscrits dans
l’option « médecine » de la faculté « science de la santé ».
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 nomTable [CROSS] JOIN nomTable
ou nomTable INNER JOIN nomTable
ou nomTable STRAIGHT_ JOIN nomTable
ou nomTable LEFT [OUTER] JOIN nomTable ON
expression
ou nomTable LEFT [OUTER] JOIN nomTable USING
(listeAttributs)
ou nomTable NATURAL LEFT [OUTER] JOIN nomTable
ou nomTable LEFT OUTER JOIN nomTable ON expression
Cette commande extrait d’une ou plusieurs
tables les lignes qui satisfont la clause
WHERE. ListeAttributs est
une liste d’attributs provenant des tables du FROM,
ou d’expressions impliquant des fonctions. On peut faire référence à 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
désigne l’attribut nom de la table etudiant
de la base universite.
L’option :
-STRAIGHT_JOIN
indique que la jointure doit accéder aux tables dans l’ordre indiqué.
-SQL_SMALL_RESULT
prévient MySQL que le résultat contiendra peu de lignes, ce qui permet d’optimiser
l’exécution de la requête.
-SQL_BIG_RESULT indique l’inverse.
-HIGH_PRIORITY
demande l’exécution de la requête en priorité par rapport à celles qui effectuent
des modifications.
Attention : ces options sont
réservées aux utilisateurs avertis et doivent être utilisées en connaissance
de cause.
INSERT [LOW_PRIORITY
| DELAYED] [IGNORE]
[INTO] nomTable [(nomAttribut, …)] VALUES (expression,
…), (…), …
ou INSERT
[LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] nomTable [(nomAttribut,
…)] SELECT…
ou INSERT
[LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] nomTable SET
nomAttribut = expression, …
Exemple d’utilisation 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 appliquées’, ‘mathématiques linéaires’, ‘rien à signaler’) ;
La commande INSERT insère une ou plusieurs lignes dans une table.
syntaxe :
USE nomBase
La commande USE permet d’accéder à une base.
USE universite
Les fonctions suivantes peuvent être utilisées
dans les requêtes :
•ASCII (char) :
renvoie le code ASCII du caractère char.
•CONCAT (chaîne1, [chaîne2,
…]) : renvoie la concaténation 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 (décimal) :
renvoie la valeur binaire d’un nombre décimal.
•CURDATE () :
renvoie la date courante au format AAAAMMJJ ou AAAA-MM-JJ selon
que le contexte est
numérique ou alphanumérique.
•CURTIME () :
renvoie l’heure courante au format HHMMSS ou HH :MM :SS selon
que le
contexte est numérique
ou alphanumérique.
•DATABASE () renvoie
le nom de la base de données courante.
•DAYNAME (date) :
renvoie le nom du jour en anglais.
•DAYOFMONTH (date):
renvoie le numéro du mois.
•DAYOFWEEK (date):
renvoie le numéro du jour dans la semaine.
•DAYOFYEAR (date):
renvoie le numéro du jour dans l’année.
•LTRIM (chaîne) :
retire tous les caractères blancs au début de chaîne.
•MONTHNAME (date) :
renvoie le nom du mois de date en anglais.
•NOW () : renvoie
la date et l’heure courante.
•PASSWORD (chaîne) :
cryptage de chaîne avec la fonction utilisée pour les mots de passe
MySQL.
•UCASE (chaîne) :
renvoie chaîne en majuscule.
PHP communique avec
MySQL par l’intermédiaire d’un ensemble de fonctions qui permettent de récupérer,
modifier, ou créer à peu près toutes les informations relatives à une base
de données. Parmi ces informations, il faut compter bien entendu le contenu
des tables, mais également leur description, c’est à dire le schéma de la
base.
Exemple : accès à MySQL avec PHP
Pour accéder à une base de données MySQL, un script PHP doit :
•Envoyer la requête SQL au serveur de
bases de données MySQL, puis récupérer le
résultat
•Générer la page HTML affichant les
données.
<HTML>
<HEAD>
<TITLE> connection
à MySQL </TITLE>
</HEAD>
<BODY>
<H1>interrogation
de la table etudiant</H1>
< ?php
// connexion au serveur de bases de données MySQL
require (‘‘connect.php’’) ;
$connexion = mysql_pconnect (serveur, nom, motDePasse) ;
if ( !$connexion)
{
echo ‘‘Désolé, connexion à ’’ . serveur . ‘‘ impossible\n’’;
exit ;
}
if ( !mysql_select_db (nomBase, $connexion))
{
echo “Désolé, accès à la base ” . nomBase . ‘‘impossible\n’’;
exit ;
}
/* Envoyer la requête SQL au serveur de bases de données MySQL, puis
récupérer le
résultat*/
/* Extraire les données
du résultat à l’aide des fonctions et
Générer la page HTML affichant les données*/
if ($resultat)
{
while
($Etudiant = mysql_fetch_object ($resultat))
{
echo “$Etudiant ->matricule,
de l’étudiant’’
. ‘‘ $Etudiant->nom $Etudiant->prenom’’ <BR>\n’’ ;
}
}
else
{
echo ‘‘<B>Erreur dans l’exécution de la requête.</B><BR>’’ ;
echo ‘‘<B>Message de MySQL : </B>’’ . mysql_error
($connexion) ;
}
?>
</BODY>
</HTML>
La commande require permet d’inclure le contenu d’un fichier dans le script. Certaines
informations sont communes à beaucoup de scripts, et les répéter systématiquement
est à la fois une perte de temps et une grosse source d’ennui le jour où
il faut effectuer une modification dans n
versions dupliquées. 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 données et le compte d’accès à la base
de données.
< ?php
// connect.php
$serveur = ‘‘www.le_serveur_hote.com’’; // hôte d’exécution de
la base de
// données
MySQL
$nom =
‘‘php’’
// nom de l’utilisateur de la
//base
de données
$motDePasse = ‘‘php’’
// mot de passe de l’utilisateur
$nomBase = ‘‘universite’’
// nom de la base de données
?>
Conclusion
Ce travail est le fruit d’une part
de longues recherches sur le net et dans plusieurs ouvrages, et d’autre
part de notre expérience en la matière.
Il n’est certes pas exhaustif, mais permet
au programmeur qui souhaite faire ses premiers pas en PHP et/ou en MySQL
de comprendre les éléments de base de ces langages, en des termes simplifiés.
PHP ne représente en fait qu’une technologie parmi celles pouvant
être utilisées pour créer des pages web plus dynamiques et plus interactives.
Parmi les autres technologies permettant de réaliser des sites web dynamiques
nous pouvons citer :
-Active
Server Pages (ASP) : il est similaire à PHP ; l’inconvénient
fondamental de cette technique est qu’elle ne peut être utilisée qu’avec
un serveur web Microsoft (IIS, PWS), ou avec un système d’exploitation Microsoft.
-JavaScript
côté serveur (SSJS) : il se combine avec HTML comme les deux précédents ;
l’inconvénient de cette technique est qu’elle nécessite la compilation des
applications SSJS avant de pouvoir les exécuter ; de plus, SSJS n’est
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
présente l’avantage d’être performante, et portable sur les plate-forme
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 », O’Reilly, édition
originale, 2001
Webographie