Etudions dans un premier cours la déclaration des différents types de
variables.
Pour simplifier les choses, nous allons admettre qu'une variable
correspond à un espace de la mémoire où l'on peut stocker une
information.
Or, afin de pouvoir récupérer cette information lorsque l'on en a
besoin, nous allons attribuer un nom à notre variable (si mes prof
m'entendaient parler, ils me zapperaient tous mes diplômes).
En PHP, les variables sont représentées par une chaîne de caractères,
ayant toujours comme premier caractère, le caractère dollar ($).
Les variables peuvent avoir n'importe quelle lettre en deuxième caractère
du moment qu'il ne s'agit pas d'un chiffre.
De plus, on ne peut mettre d'espace dans le nom d'une variable.
Puis, pour assigner une valeur à une variable, on tachera d'utiliser
l'opérateur =, tout en prenant soin de
toujours placer la variable qui reçoit le résultat d'une opération à
gauche du signe =.
Démonstration :
- Lorsque l'on désire affecter une chaîne de caractères à une
variable, il faut placer cette chaîne de caractères entre deux ".
- Lorsque l'on désire affecter une valeur numérique à une variable,
il ne faut pas placer de " autour cette
valeur (en fait, c'est possible de mettre des "
autour d'une valeur numérique, mais ensuite, il faut être vraiment
vigilent, car on pourrait faire la confusion entre une valeur numérique
et une chaîne de caractères).
Voici quelques exemples de déclarations de variables :
<?phpphp
$nom = "LA GLOBULE";
// $nom contient alors la chaîne de caractères LA GLOBULE.
$mon_chiffre = 12;
// $mon_chiffre contient la valeur numérique 12.
$5toto = "test";
// Cette déclaration n'est pas valide car le nom de la variable commence par un chiffre
?>
Voyons maintenant la déclaration des variables de type tableau (array).
Pour ceux qui sont débutants en programmation, nous allons prendre un
exemple plutôt simplet afin de comprendre ce qu'est un tableau.
Imaginons un classeur d'écolier (ce sera notre tableau) contenant différentes
feuilles (qui seront les indices du tableau).
Imaginons également que ces feuilles soient numérotées, et chaque
feuille contienne un texte particulier. Dés lors, on peut chercher le
contenu d'une feuille de ce classeur grâce à son numéro (on cherche
donc l'information contenu dans le classeur à la page numéro x).
En informatique, un tableau, c'est exactement la même chose que notre
classeur. Il s'agit d'une variable contenant différentes informations
(les textes) et ces informations sont classées suivant le numéro de
l'indice (c'est à dire le numéro de la feuille).
Par exemple, supposons que l'on ai la variable $fruit de type array.
On pourrait alors avoir le code suivant :
<?php
$fruit[0] = "fraise";
$fruit[1] = "banane";
$fruit[2] = "abricot";
?>
En reprenant l'exemple du classeur, c'est comme si nous avions un
classeur de nom fruit, ayant 3 pages :
- sur la page 0, on aurait l'information fraise
- sur la page 1, on aurait l'information banane
- sur la page 2, on aurait l'information abricot
Nous venons, dans ce bout de code, de déclarer une variable de type array
qui comporte 3 éléments (les pages).
Nous aurions eu le même résultat en exécutant le bout de code suivant
:
<?php
$fruit[] = "fraise";
$fruit[] = "banane";
$fruit[] = "abricot";
?>
En revanche, cette syntaxe est moins lisible, vu que souvent, on
n'arrive plus vraiment à savoir à quelle page se trouve l'information
recherchée (on s'emmêle dans les indices).
Aparté !
- Au lieu d'utiliser des chiffres pour les indices (comme dans notre
exemple où nous avons utilisé les indices 0, 1 et 2) nous pouvons très
bien utiliser des chaînes de caractères.
Ce qui pourrait alors donner :
<?php
$fruit['le_meilleur'] = "fraise";
$fruit['le_prefere_de_Julien'] = "banane";
$fruit['mon_prefere'] = "abricot";
?>
Or dans ce cas, il faut évidement utiliser pour chaque indice du
tableau, une chaîne de caractère unique.
- nous pouvons également déclarer des tableaux à plusieurs éléments.
Pour ceux qui désirent vraiment exploiter cette possibilité, je vous
invite à aller consulter la documentation officielle PHP.
Lors de cet exercice, nous allons mettre en pratique notre premier bout
de code en PHP.
Il faut également savoir que toutes les variables en
PHP commencent par le signe dollar ($), et il faut également ne
pas oublier de placer un ; à chaque fin
d'instruction PHP.
Etudions le code suivant :
<?php
$nom = "LA GLOBULE";
echo 'Bonjour ';
echo $nom;
echo ' !';
?>
Ce qui affichera à l'écran :
Bonjour LA GLOBULE !
En effet, nous avons placé la chaîne de caractères LA GLOBULE dans la
variable $nom, puis nous avons demander à PHP
d'écrire la chaîne de caractères Bonjour, puis le contenu de la
variable $nom (qui contient donc la chaîne LA
GLOBULE), et enfin, nous affichons un !.
Ce qui donne bien comme résultat "Bonjour LA GLOBULE !"
(Remarquons au passage qu'une variable contenant une chaîne de caractères
se déclare en mettant le nom de la variable puis un signe = et enfin,
la chaîne de caractères entre deux ").
Au passage, remarquons également que nous venons d'apprendre notre
première commande PHP, la commande echo().
Cette fonction nous permet d'afficher à l'écran des chaînes de caractères,
qui peuvent être définies directement par l'utilisateur (comme lorsque
l'on fait un echo 'Bonjour ';) ou qui peuvent être des contenus de
variables (lorsque l'on fait echo $nom;).
Attention !!!
En effet, si nous avions écris le code suivant :
<?php
$nom = "LA GLOBULE";
echo 'Bonjour ';
echo '$nom';
echo ' !';
?>
Nous aurions eu à l'écran :
Bonjour $nom !
Attention donc à bien utiliser les ' qui ne
servent qu'à délimiter les chaînes de caractères, et donc, il ne
faut surtout pas les utiliser pour afficher le contenu d'une variable.
En effet, lorsque l'on tape echo '$nom'; PHP
pense que l'on désire afficher la chaîne de caractères $nom et non le
contenu de la variable $nom.
Prenons un autre exemple où nous allons afficher la date et l'heure du
jour.
On a le code suivant :
<?php
$date_du_jour = date ("d-m-Y");
$heure_courante = date ("H:i");
echo 'Nous sommes le : ';
echo $date_du_jour;
echo ' Et il est : ';
echo $heure_courante;
?>
Ce qui affichera à l'écran :
Nous sommes le 17-09-2002 Et il est 12:10
Dans ce cas, nous venons d'utiliser la fonction date()
qui nous permet d'afficher la date du jour ainsi que l'heure courante
(en fait, la date du serveur). Dans un premier temps, nous avons affecté
à la variable $date_du_jour le contenu que retourne la fonction date()
munie des paramètres "d-m-Y", soit 17-09-2002, puis nous
avons affecté à la variable $heure_courante le contenu que retourne la
fonction date() munie des paramètres
"H:i", soit 12:10.
Voici la liste des paramètres possibles pour la fonction date() :
- a : "am" (matin) ou "pm"
(après-midi)
- A : "AM" (matin) ou "PM"
(après-midi)
- d : Jour du mois, sur deux chiffres (éventuellement
avec un zéros) : "01" à "31"
- D : Jour de la semaine, en trois lettres (et
en anglais) : par exemple "Fri" (pour Vendredi)
- F : Mois, textuel, version longue; en
anglais, i.e. "January" (pour Janvier)
- h : Heure, au format 12h, "01" à
"12"
- H : heure, au format 24h, "00" à
"23"
- g : Heure, au format 12h sans les zéros
initiaux, "1" à "12"
- G : Heure, au format 24h sans les zéros
initiaux, "0" à "23"
- i : Minutes; "00" à
"59"
- j : Jour du mois sans les zéros initiaux:
"1" à "31"
- l : Jour de la semaine, textuel, version
longue; en anglais, i.e. "Friday" (pour Vendredi)
- L : Booléen pour savoir si l'année est
bissextile ("1") ou pas ("0")
- m : Mois; i.e. "01" à
"12"
- n : Mois sans les zéros initiaux; i.e.
"1" à "12"
- M : Mois, en trois lettres (et en anglais) :
par exemple "Jan" (pour Janvier)
- s : Secondes; i.e. "00" à
"59"
- S : Suffixe ordinal d'un nom
Voyons maintenant les variables d'environnements.
En effet, PHP propose toute une série de variables qui sont déjà présentes
dans le langage sans que vous n'ayez à les déclarer. Ces variables s'écrivent
toujours en majuscules et nous fournissent divers renseignements.
Voici la liste des variables d'environnement existantes :
Nous allons maintenant illustrer toutes ces structures de contrôles.
- if, else, elesif
:
Nous allons initialiser une variable numérique $nombre à la valeur 11
par exemple, et faire différent tests dessus.
<?php
$nombre = 11 ;
if ($nombre >= 0 && $nombre < 10) {
// on teste si la valeur de notre variable est comprise entre 0 et 9
echo $nombre.' est compris entre 0 et 9';
}
elseif ($nombre >= 10 && $nombre < 20) {
// on teste si la valeur de notre variable est comprise entre 10 et 19
echo $nombre.' est compris entre 10 et 19';
}
else {
// si les deux tests précédents n'ont pas aboutis, alors on tombe dans ce cas
echo $nombre.' est plus grand que 19';
}
?>
A l'affichage on aura :
11 est compris entre 10 et 19
(Remarquons déjà que les instructions qui doivent être exécutées
lorsqu'un test est validé sont systématiquement comprises entre des
crochets { }).
En effet, résumons ce qui vient de se passer.
Dans un premier temps, on teste si $nombre est supérieur ou égal à 0
et strictement inférieur à 10, et dans ce cas, et seulement dans ce
cas, on écrira alors sur l'écran, $nombre est compris entre 0 et 9.
Or vu que $nombre est égal à 11, on se rend compte que ce test ne sera
pas satisfait.
On a alors deux solutions. Soit on écrit directement le cas Sinon (else),
soit on peut faire un autres test, ce qui correspond à un SinonSi (elseif).
Nous avons choisis de faire un second test (elseif).
La, on teste si $nombre est supérieur ou égal à 10 et strictement inférieur
à 20 (ce qui est notre cas car $nombre est égal à 11).
Le test est donc validé, et l'on exécute alors les instructions présentes
entre les crochets { } du elseif.
On affichera donc à l'écran : 11 est compris entre 10 et 19
Viens ensuite le cas else qui est exécuté
seulement si aucunes des conditions définies par les if
et les elseif n'est vérifiées.
- switch :
Le switch représente exactement la même
chose qu'une succession d'un if et de
plusieurs elseif. En revanche, utiliser un switch
à un certain avantage comparé à un if et à
plusieurs elesif, c'est que sa structure est
beaucoup moins lourde et nettement plus agréable à lire.
Prenons un exemple simple. Nous allons déclarer une variable contenant
une chaîne de caractères, puis nous allons tester cette chaîne grâce
au switch.
On aura alors le code suivant :
<?php
$nom = "LA GLOBULE";
switch ($nom) {
case 'Jean' :
echo 'Votre nom est Jean.';
break;
case 'Benoît' :
echo 'Votre nom est Benoît.';
break;
case 'LA GLOBULE' :
echo 'Votre nom est LA GLOBULE.';
break;
default :
echo 'Je ne sais pas qui vous êtes !!!';
}
?>
Dans notre cas, vu que $nom contient la chaîne de caractère LA
GLOBULE, on verra alors s'afficher à l'écran la phrase suivante :
Votre nom est LA GLOBULE.
En revanche, si la variable $nom avait contenu la chaîne de caractère
"toto", ce même code aurait affiché à l'écran :
Je ne sais pas qui vous êtes !!!
En utilisant un if puis une succession de elseif,
le code suivant aurait exactement eu le même affichage sur l'écran :
<?php
$nom = "LA GLOBULE";
if ($nom == "Jean") {
echo 'Votre nom est Jean.';
}
elseif ($nom == "Benoît") {
echo 'Votre nom est Benoît.';
}
elseif ($nom == "LA GLOBULE") {
echo 'Votre nom est LA GLOBULE.';
}
else {
echo 'Je ne sais pas qui vous êtes !!!';
}
?>
Attention !
Notez bien l'utilisation de break dans chaque
cas de votre switch. Si celui-ci est omis, tous les messages
s'afficheront.
- for (pour chaque) :
La structure de contrôle for nous permet d'écrire
des boucles. En clair, cela veut dire que nous allons exécuter une série
d'instructions un nombre de fois bien déterminé.
Prenons l'exemple suivant :
<?php
$chiffre = 5;
// Début de la boucle
for ($i=0; $i < $chiffre; $i++) {
echo 'Notre chiffre est différent de '.$i.'<br />';
}
// Fin de la boucle
echo 'Notre chiffre est égal à '.$i;
?>
Ce qui affichera à l'écran :
Notre chiffre est différent de 0
Notre chiffre est différent de 1
Notre chiffre est différent de 2
Notre chiffre est différent de 3
Notre chiffre est différent de 4
Notre chiffre est égal à 5
En effet, on initialise notre variable $chiffre à 5. On démarre la
boucle for qui dit que l'on va exécuter les
instructions situées entre les crochets de la boucle ({
}) pour i variant de 0 à $chiffre-1 (donc jusqu'à 4), i étant
incrémenter à chaque passage de boucle ($i++).
($i varie de 0 à $hiffre-1 car on impose que $i soit strictement inférieur
à $chiffre).
On exécute alors 4 fois les instructions présentes dans la boucle, et
à chaque passage, $i verra sa valeur augmentée de 1.
Aparté :
L'utilisation des boucles est extrêmement importante (et indispensable)
en programmation. La compréhension de ce passage est capital.
- while (tant que)
Voyons maintenant l'autre boucle, la boucle while
(dite boucle tant que). Il faut déjà savoir que la boucle while
n'est pas vraiment d'une nécessité absolue (elle est absente dans
certains langages de programmation) vu qu'elle est toujours remplaçable
par une boucle for.
Reprenons l'exemple précédent, et écrivons le à l'aide de la boucle while,
on a :
<?php
$chiffre = 5;
$i = 0;
// Début de la boucle
while ($i < $chiffre) {
echo 'Notre chiffre est différent de '.$i.'<br />';
$i = $i + 1;
}
// Fin de la boucle
echo 'Notre chiffre est égal à '.$i;
?>
Ce qui affichera à l'écran exactement la même chose que ce qu'affiche
le code que l'on a utilise pour la boucle for.
Ici, on initialise notre variable $chiffre à 5, puis la variable $i à
0.
Ensuite, nous faisons le test suivant : "tant que $i < $chiffre,
alors afficher Notre chiffre est différent de '.$i.'
et augmenter la valeur de $i de 1"
Puis dès que la condition $i < $chiffre n'est plus vérifiée, nous
sortons de la boucle pour finir l'exécution des instructions qui
suivent.
Tentons maintenant de lire et d'écrire dans un fichier texte, fichier
se trouvant sur votre serveur FTP. Afin de mettre en pratique cet
exercice, vous allez créer un fichier donnees.txt que vous allez placer
dans le même répertoire que le script PHP.
Supposons que ce fichier texte contienne la ligne suivante :
"Salut à tous :)".
Soit alors, le code PHP suivant :
<?php
// Instruction 1
$fp = fopen ("donnees.txt", "r");
// Instruction 2
$contenu_du_fichier = fgets ($fp, 255);
// Instruction 3
fclose ($fp);
// Instruction 4
echo 'Notre fichier contient : '.$contenu_du_fichier;
?>
Ce qui affichera à l'écran :
Notre fichier contient : Salut à tous :)
Détaillons alors ce qui se passe :
- Instruction 1 : on ouvre le fichier
donnees.txt en lecture seule à l'aide de la fonction fopen()
(la lecture seule est obtenue à l'aide du paramètre r
; nous détaillerons plus loin tous les paramètres possibles de cette
fonction).
- Instruction 2 : on lit le contenu du fichier
à l'aide de la fonction fgets() et l'on place
le contenu de ce fichier dans la variable $contenu_du_fichier (le paramètre
255 passé à la fonction fgets() correspond
au nombre de caractères à lire : ici, on a donné 255, ce qui
correspond a un choix totalement arbitraire. En effet, vous pouvez
mettre n'importe quel nombre. En revanche, si vous mettez 20 et que
votre fichier comporte 128 caractères, seuls les 20 premiers seront
lus).
- Instruction 3 : on referme le fichier
donnees.txt à l'aide de la fonction fclose().
En effet, nous avons déjà le contenu du fichier dans la variable $contenu_du_fichier,
alors le fichier ne nous intéresse plus.
- Instruction 4 : on affiche donc le contenu
du fichier donnees.txt (notez encore une fois l'utilité de la concaténation
des chaînes de caractères).
Aparté
Vous n'êtes absolument pas oblige de mettre ce fichier texte dans le même
répertoire que le script PHP. En effet, si votre script PHP est à la
racine de votre site et que le fichier à lire se trouve dans le répertoire
/toto, vous écrirez alors votre script de la manière suivante :
<?php
$fp = fopen ("toto/donnees.txt", "r");
$contenu_du_fichier = fgets ($fp, 255);
fclose ($fp);
echo 'Notre fichier contient : '.$contenu_du_fichier;
?>
Ce qui produira un résultat tout a fait identique.
Etudions maintenant tous les paramètres possibles de la fonction fopen()
:
- r : ouvre en lecture seule, et place le
pointeur de fichier au début du fichier.
- r+ : ouvre en lecture et écriture, et place
le pointeur de fichier au début du fichier.
- w : ouvre en écriture seule; place le
pointeur de fichier au début du fichier et réduit la taille du fichier
à 0. Si le fichier n'existe pas, on tente de le créer.
- w+ : ouvre en lecture et écriture; place le
pointeur de fichier au début du fichier et réduit la taille du fichier
à 0. Si le fichier n'existe pas, on tente de le créer.
- a : ouvre en écriture seule; place le
pointeur de fichier à la fin du fichier file. Si le fichier n'existe
pas, on tente de le créer.
- a+ : ouvre en lecture et écriture; place le
pointeur de fichier à la fin du fichier. Si le fichier n'existe pas, on
tente de le créer.
Un exemple concret : un mini compteur du
nombre de visites.
Tachons maintenant de voir un exemple concret de lecture et d'écriture
dans un fichier texte. En effet, nous allons réaliser un mini compteur
de visites fait grâce à PHP et aux lecture/écriture dans un fichier
texte.
Tout d'abord vous allez créer un fichier compteur.txt que vous allez
placer dans le même répertoire que le script qui va suivre. Placez le
chiffre "0" dans ce fichier.
Soit alors le bout de code PHP suivant :
<?php
// Instruction 1
$fp = fopen ("compteur.txt", "r+");
// Instruction 2
$nb_visites = fgets ($fp, 11);
// Instruction 3
$nb_visites = $nb_visites + 1;
// Instruction 4
fseek ($fp, 0);
// Instruction 5
fputs ($fp, $nb_visites);
// Instrcution 6
fclose ($fp);
// Instrcution 7
echo 'Ce site compte '.$nb_visites.' visiteurs !';
?>
On a alors :
- Instruction 1 : on ouvre le fichier
compteur.txt en lecture et en ecriture.
- Instruction 2 : on lit le contenu du fichier
et on place ce contenu (qui est donc le nombre de visiteurs de notre
page) dans la variable $nb_visites.
- Instruction 3 : on augmente le nombre de
visites de 1.
- Instruction 4 : on place le pointeur du
fichier à l'offset 0 grâce à l'instruction fseek().
En clair, on se positionne au tout début de notre fichier.
- Instruction 5 : grâce à l'instruction fputs(),
on écrit dans notre fichier la nouvelle valeur correspondant au nombre
de visites.
- Instruction 6 : on ferme le fichier.
- Instruction 7 : on affiche le nombre de
visites de notre page !!!
Voyons maintenant comment créer des formulaires, et surtout comment
bien les utiliser. Les formulaires vont permettre à vos visiteurs de
soumettre des informations, que ce soit un nom, un prénom, un chiffre,
etc...
Prenons le code suivant :
<html>
<head>
<title>Ma page de test</title>
</head>
<body>
<form action = "traitement.php" method="post">
Votre nom : <input type = "text" name = "nom"><br />
Votre fonction : <input type = "text" name = "fonction"><br />
<input type = "submit" value = "Envoyer">
</form>
</body>
</html>
Ce qui donnera à l'écran :
Puis, lorsque l'utilisateur cliquera sur le bouton "Envoyer",
les données du formulaire seront envoyées sur la page traitement.php.
Et dans la page traitement.php, nous allons récupérer une variable de
type tableau ($_POST : car notre formulaire a comme method la valeur
post).
En clair, dans la page traitement.php, on aura une variable
$_POST['nom'] qui contiendra la chaîne de caractères qu'aura saisi le
visiteur dans le champ "Votre nom : " (on a la variable
$_POST['nom'], car dans l'attribut name de notre formulaire pour le
champ concernant le nom).
De même, on aura une variable $_POST['fonction'] qui contiendra la chaîne
de caractères qu'aura saisi le visiteur dans la champ "Votre
fonction : " (encore une fois, on a la variable $_POST['fonction']
car l'attribut name du champ prend la valeur fonction).
Prenons ensuite le code suivant pour la page traitement.php :
<html>
<head>
<title>Ma page de traitement</title>
</head>
<body>
<?
// on teste la déclaration de nos variables
if (isset($_POST['nom']) && isset($_POST['fonction'])) {
// on affiche nos résultats
echo 'Votre nom est '.$_POST['nom'].' et votre fonction est '.$_POST['fonction'];
}
?>
</body>
</html>
En supposant que l'on écrive "LA GLOBULE" dans le champ
"Votre nom" et "Webmaster" dans le champ "Votre
fonction", on verra alors s'afficher à l'écran :
Votre nom est LA GLOBULE et votre fonction est
Webmaster
PS : dans le cas où le formulaire utilise une méthode get, nous
utilisons la variable tableau $_GET.
Voyons maintenant le cas des formulaires munis d'un champ de type file
(formulaire permettant le téléchargement de fichiers sur votre site).
Imaginons que l'on ai le formulaire suivant :
<html>
<head>
<title>Ma page de test</title>
</head>
<body>
<form action = "traitement.php" method="post">
Votre fichier : <input type = "file" name = "mon_fichier"><br />
<input type = "hidden" name="MAX_FILE_SIZE" value="20000">
<input type = "submit" value = "Envoyer">
</form>
</body>
</html>
Pour récupérer votre fichier, vous avez à votre disposition le
tableau $_FILES qui aura plusieurs entrées :
- $_FILES['mon_fichier']['tmp_name'] : le nom temporaire du fichier sur
le serveur
- $_FILES['mon_fichier']['name'] : le nom original du fichier sur la
machine cliente
- $_FILES['mon_fichier']['type'] : le type MIME du fichier
- $_FILES['mon_fichier']['size'] : la taille du fichier
Naturellement, vous pourrez utiliser ces valeurs pour tester votre
fichier.
Si il correspond à vos attentes, vous pourrez finaliser votre téléchargement
à l'aides des fonctions copy ou move_uploaded_file (afin de copier le
fichier téléchargé sur le disque dur du serveur).
Vous savez tous que PHP comprend, de base, une liste assez
impressionnante de fonctions mises à votre disposition. En revanche,
vous aussi, vous pouvez très bien écrire vos propres fonctions.
Nous allons donc écrire une fonction qui va nous permettre d'écrire un
texte en gras, tout en spécifiant la couleur de ce texte, ainsi que sa
taille.
On a alors le code suivant :
<?php
function affichage_texte ($taille, $couleur, $texte) {
echo '<font size = "'.$taille.'" color = "'.$couleur.'">'.$texte.'</font>';
}
?>
Placons ce code dans un fichier nommé fonctions.php.
Attention !!!
Placer juste et SEULEMENT ce bout de code dans
le fichier fonctions.php.
Soit ensuite le code du fichier index.php :
<?php
// on inclut le code de fonctions.php, donc le code de notre fonction
include ('fonctions.php');
// on affiche un texte
affichage_texte ("2", "red", "Mon texte");
?>
Ce qui affichera à l'écran :
Mon texte