Vous êtes sur la page 1sur 28

Site Web dynamique (PHP)

Pages Web dynamiques dont le contenu change indirectement


Un site Web dynamique est un site Web dont le contenu change En effet, les bases de données constituent les sources de données les
automatiquement. Autrement dit, le contenu visible sur la page n'est plus populaires pour différentes raisons. J'en cite:
pas toujours intégré directement en HTML par le Webmaster, mais * Les bases de données (dites relationnelles) sont structurées sous

peut être généré à la volée suite à des conditions particulières formes de tables. Chacune des tables contient des données jugées
comme l'historique de navigation, la localisation géographique du cohérentes, mais complémentées par les données qui figurent dans
visiteur, les privilèges accordés à celui-ci... Cependant, le contenu d'autres tables via des relations.
des sites web dynamiques provient souvent de sources de données.
Ces sources peuvent être des fichiers texte, fichiers XML, sources  *Les bases de données sont faciles à parcourir et interroger, et c'est
Json, et par dessous tout, il y a les bases de données. principalement grâce au langage de requêtes SQL (Structured Query
Language).

Qu'est ce que PHP?


Un peu d'histoire
En 1994, et suite à un projet personnel, Rasmus Lerdorf a créé le langage PHP qui désignait à l'époque Personnal Home Page. Ce projet a été
animé par son besoin de suivre en ligne les visiteurs de son CV sur son site Web.

En 1997 Zeev Suraski et Andi Gutmans ont entamé des travaux d'amélioration du langage PHP. La première version officielle est alors
nommée PHP3 dont l'acronyme récursif désigne désormais PHP Hypertext Preprocessor.

Peu de temps après, ils ont développé le moteur Zend Engine suite auquel, la version 4 de PHP est née.

En 2004, PHP5 a été créé. Il s'agit d'une version du langage qui supporte la Programmation Orientée Objet (POO) d'une manière très avancée.
Cette version a été utilisée durant longtemps sur les serveurs Web des hébergeurs,

Et aujourd'hui encore la version 5.6 est encore disponible sur la plupart des serveurs d'hébergement mutualisé.

Le successeur de PHP5 est PHP7 qui est finalisé en décembre 2015 au dépend de PHP6 qui n'a jamais été officialisé.

16
Remarque : À partir de sa version 4, PHP est un langage compilé, c'est à dire que le code source est d'abord
traduit en langage machine puis exécuté. Contrairement aux langages interprétés comme JavaScript, une
fois une erreur (*) est présente dans le code PHP, celui ci sera condamné en entier. Par conséquent, aucun
code de la page ne sera exécuté qu'il soit PHP, HTML ou autre.

Particularités du PHP
PHP est un langage de programmation coté serveur. Inversement au Javascript qui s’exécute sur le client (navigateur),
PHP s’exécute entièrement sur le serveur qui héberge le site Web. Bien que son exécution est moins rapide que celle
du Javascript en raison du temps que prend la requête pour parvenir au serveur et la réponse pour arriver jusqu'au
navigateur, PHP dispose de plusieurs atouts que je vais résumer dans les points suivants:

 Code source confidentiel: Puisque PHP est un langage CGI qui s'exécute sur le serveur, alors son code source
n'est jamais visible par le client, ce qui permet de manipuler des données confidentielles.
 Open source: PHP est un langage de programmation libre de droit.
 Multi-plateform: PHP s’exécute sur des serveurs d'applications que l'on peut installer sur de nombreux systèmes
d'exploitation (Unix/Linux, Windows, Mac OS, BSD...)
 Syntaxe simple et intuitive: Les personnes ayant déjà programmé en C ou en Javascript trouvent PHP facile à
manipuler.
 Interfaçage simple avec les bases de données: Bien que PHP est souvent associé au SGBD MySQL, il peut
cependant interagir avec presque tous les SGDB connus, d'autant plus à l'aide de l'interface PDO.
 Richesse fonctionnelle: PHP prend en charge de nombreuses bibliothèques qui permettent de réussir des
traitements de nature différente comme la manipulation du DOM, la programmation réseau ou le traitement
d'images...
 Modes d’exécution diversifiés: PHP peut s’exécuter en mode CGI qui est le plus courant ou le mode CLI qui
utilise la ligne de commande comme les scripts Shell.
 Supports disponibles: La documentation de PHP est très abondante et diversifiée surtout grâce aux posts de la très
large communauté qui s'est formée autour de lui. Cependant le support PHP officiel est disponible sur le
site www.php.net. 

Les commentaires
En PHP on peut intégrer des commentaires qui seront ignorés lors de l’exécution du script par le serveur. Comme pour JavaScript
(ou pour le langage C) les commentaires en PHP peuvent avoir deux formes:

16
 Commentaire de fin de ligne: il s'agit d'un commentaire qui s'étend jusqu'à la fin de la ligne à partir du symbole double slash
(//).
 Commentaire sur plusieurs lignes: il s'agit d'un bloc qui peut contenir plusieurs lignes comprises entre les symboles /* et */.

Exemple:
<?php
   // Commentaire de fin de ligne
   /*    
      Bloc entier
      vu comme un
      commentaire    
   */
?>

Serveur Web
Un serveur Web et un serveur informatique qui héberge le contenu d'un site Web et publie celui ci en ligne sur
Internet

Où faut-il placer nos documents PHP?


Tout d'abord, il faut noter qu'un document PHP est toujours suffixé par l'extension .php. C'est de cette manière que le
serveur Web sait qu'il doit faire exécuter le document PHP par le serveur d'application, qui renferme le moteur PHP,
avant de le renvoyer au client. Cependant, il faut placer nos documents PHP (et les autres documents du site Web
d'ailleurs) dans un endroit bien précis. Cet endroit s'appelle le Document Root (littéralement la racine du serveur
Web).

C:\Program Files\EasyPHP\www\

C'est quoi PHP en vidéo


https://youtu.be/iZ1h_E_Zn7I

16
A quoi ressemble un document PHP?
Une page PHP est suffixée par l'extension .php, mais cela ne veut pas dire qu'elle contient
uniquement du code PHP. En effet, elle peut renfermer toutes les syntaxes que nous avons vu
jusqu'ici à savoir: HTML, CSS et Javascript.

Il est donc tout à fait possible que votre page PHP contienne 4 langages différents à la fois.

Exemple:
<!DOCTYPE html>
<html>
   <head>
      <meta charset="UTF-8" />
      <style>
      *{
         /* Code CSS */
         font-family:verdana;
         font-size:10pt;
      }
      </style>
   </head>
   <body>
      <div>C'est du HTML.</div>
      <script language="javascript">
         document.write("C'est du Javascript.");
      </script><br />
      <?php
         echo "Et là, du PHP!";
      ?>
   </body>
</html>

16
Les bases du PHP - Les variables, constantes et opérateurs
Variables PHP
Comme pour les autres langages de programmation, en PHP les variables servent à stocker des valeurs qui
peuvent changer au cours du programme.

En PHP, les noms de variables sont préfixées par le symbole dollar ($) et commencent par une lettre
minuscule, majuscule ou le cratère souligné (_). Cependant, ils peuvent contenir des chiffres au milieu ou à
la fin. Les espaces ne sont pas autorisés.

Exemple:
<?php
   $a=10;   // Juste
   $_a9=true;   // Juste
   $9a="Bonjour";   // Faux (le chiffre ne doit pas figurer au début)
   $a b=5.3;  // Faux (le nom de la variable ne doit pas contenir d'espaces)
?>

Variables scalaires
En PHP, il existe des variables scalaires et des variables tableau (que l'on va traiter plus loin dans ce cours). Les
variables scalaires peuvent être:

 Des nombres entiers (nombres sans virgule positifs ou négatifs).


 Des nombres décimaux (de type double).
 Des chaines de caractères (des suites de caractères quelconques).
 Des booléens (qui peuvent avoir les valeurs true ou false).

Exemple:
<?php
   $a=5;
   $b=$a+1;   // $b vaut 6
   $d=$c+1;   // $d vaut 1
?>

Les constantes PHP


Les constantes servent aussi à stocker des valeurs dans un programme, mais à l'inverse des variables, leurs valeurs ne
changent pas.

Fonction define()
Pour définir un constante on utilise la fonction define(cte,val). cte représente l'identifiant de la constante à définir
et val sa valeur.

Exemple:

<?php
   define(cte,"Bonjour");
   echo cte; // Affiche Bonjour
   define(cte,"Bonsoir");
   echo cte; // Affiche Bonjour
?>

16
La fonction echo permet d'afficher une chaîne de caractères sur le navigateur.

Comme vous l'avez constaté, même si on a redéfini une nouvelle valeur (Bonsoir) pour la constante cte, c'est la
première valeur (Bonjour) qui est conservée. C'est normal car une constante ne change pas au cours du programme.

Les opérateurs
Les opérateurs sont des symboles qui permettent de faire des opérations sur les variables. Les opérateurs sont souvent
les mêmes dans la plupart des langages de programmation et ils sont représentés par des symboles similaires dans la
plupart des cas.

En PHP on distingue 5 familles d'opérateurs:

 Opérateurs arithmétiques.
 Opérateurs d'incrémentation.
 Opérateurs d’affectation (assignement).
 Opérateurs de comparaison.
 Opérateurs logiques.

Opérateurs arithmétiques
Ce sont des opérateurs qui effectuent des calculs mathématiques classiques à savoir: l'addition (+), la soustraction (-),
la multiplication (*), la division (/) et le modulo (qui signifie le reste de la division) (%).

Exemple:

$a=10;
$b=20;
$c=$a+$b; // $c vaut 30
$d=$a-$b; // $d vaut -10
$e=$a*$b; // $e vaut 200
$f=$a/$b; // $f vaut 0.5
$g=$a%$b; // $g vaut 10

Opérateurs d'incrémentation
Ce sont des opérateurs qui permettent de modifier la valeur d'une variable en l'augmentant ou la diminuant de 1. Deux
opérateurs sont utilisés: incrémentation (++) et décrémentation (--).
Exemple:

$a=10;
$a++; // $a vaut donc 11
$a--; // $a vaut à nouveau 10

Parfois on préfère regrouper les opérations d'incrémentation dans la troisième famille qui constitue les opérateurs
d'assignement.

Opérateurs d’affectation

16
Ce sont les opérateurs qui permettent d'affecter une valeur à une variable directement ou à travers une opération
(comme l'incrémentation ou la décrémentation). Les opérateurs disponibles pour cette famille sont: l'affectation
directe (=), l'affectation avec addition (+=), l’affectation avec soustraction (-=), l'affectation avec multiplication (*=),
l'affectation avec division (/=) et l'affectation avec modulo (%=).

Exemple:
$a=10;
$b=$a; // $b vaut 10
$a+=5; // $a vaut 15
$a-=3; // $a devient 12

On peut écrire l'instruction $a++ comme ceci: $a+=1 ou encore: $a=$a+1.

Opérateurs de comparaison
Ce sont les opérateurs qui testent une condition si elle est vraie ou fausse. Les opérateurs disponibles sont: égal (==),
strictement inférieur (<), inférieur ou égal (<=), strictement supérieur (>), supérieur ou égal (>=), différent (!=),
identique (===), non identique (!==).

Exemple:

$a=10;
if($a%2==0)
   $res="Nombre pair";

La structure de contrôle if sera vue en détail par la suite, mais sachez que pour cet exemple, elle permet de vérifier si
le reste de la division de la variable $a par 2 est égal à 0, ce qui signifierait que $a est pair.

L'opérateur identique (===) vérifie si deux variables sont égales et de même type. Non identique (!==) vérifie si ce
n'est pas le cas.

Opérateurs logiques
Ce sont des opérateurs qui regroupent logiquement plusieurs conditions. Les trois opérateurs utilisés sont: ET logique
(&&), OU logique (||) et NON logique (!).

Exemple:

$a=10;
$b=5;
if($a%2==0 || $b%2==0)
   $res="Le résultat de la multiplication des deux nombres sera pair";

On vérifie si l'une des conditions $a est pair ou $b est pair est vraie.

Les bases du PHP(Les variables, constantes et opérateurs) en vidéo


https://youtu.be/-70jyWQwnfA

16
Les structures de contrôle - Conditions et boucles
Les structures de contrôle PHP sont presque identiques à celle de JS.(avec quelques structures en plus sur ce
dernier).

Structure if else
La structure if else permet de vérifier si une condition est vraie pour exécuter un traitement. Si la condition n'est pas
vraie on peut exécuter un traitement alternatif.
Exemple:

<?php
   $a=1;
   if($a==1)
      echo "Un";
   else{
      if($a==2)
         echo "Deux";
      else
         echo "Autre";
   }
?>

Das ce cas on aura le résultat: Un

Si le bloc de traitement après if ou else contient plusieurs instructions, alors il est obligatoire de le mettre entre des
accolades.

Le code précédent peut être écrit comme ceci:

<?php
   $a=1;
   if($a==1)
      echo "Un";
   elseif($a==2)
      echo "Deux";
   else
      echo "Autre";
?>

Le mot clé elseif remplace la séquence else suivie de if. L'utilisation des accolades n'est donc pas nécessaire et le code
devient plus court.

L'opérateur ternaire
L'opérateur ternaire permet de raccourcir la syntaxe de la structure de contrôle if else comme ceci:

(condition) ? (traitement1) : (traitement2)

Si la condition est vraie alors on fait le traitement1, sinon (la condition n'est pas vraie) alors on fait le traitement2.

Exemple:

16
<?php
   $a=1;
   echo ($a%2==0)?('$a est paire'):('$a est impaire');
?>

Dans ce cas on aura: $a est impaire

Dans cet exemple, on affiche avec la fonction echo soit le message '$a est paire' ou '$a est impaire' suivant si la
condition ($a%2==0) est vraie ou non.

Structure switch case


Si la structure if else permet, à la base, de tester deux cas pour une condition, la structure swith case, quant-à-elle,
permet de tester autant de cas que l'on souhaite.

Si on reprend le premier exemple de cette page avec la structure swtich case le code devient:

<?php
   $a=1;
   switch($a){
      case 1 : echo "Un"; break;
      case 2 : echo "Deux"; break;
      default: echo "Autre";
   }
?>

On obtient toujours le résultat: Un

switch($a) indique qu'on s’intéresse à la valeur de la variable $a. case 1 signifie: si $a vaut 1, suivie de deux points
(:)puis le bloc d'instruction à exécuter si la condition est vraie. Le mot clé break signifie qu'on doit mettre fin à la
structure une fois la condition satisfaite.

Le mot clé default signifie si aucun des teste précédent n'a abouti. Dans ce cas on procédera à un traitement par
défaut.

Boucle for
La boucle for permet de faire un traitement d'une manière répétitif tant que la condition associée est vraie. En PHP
elle est déclarée de la même manière qu'en Javascript.

Exemple:

<?php
   for($i=0;$i<10;$i++){
      echo "Bonjour<br />";
   }
?>

Dans ce cas, le traitement est fait 10 fois. En effet, la variable $i qui sert de compteur de la boucle, commence à 0
($i=0) et fini à 9 ($i<10) en s'incrémentant de 1 à chaque fois ($i++). Les accolades sont là pour entourer le bloc
d'instructions qui sera bouclé. Dans ce cas, ils sont facultatifs car nous n'avons déclaré qu'une seule instruction. Celle
ci affichera le texte "Bonjour" suivi de la balise <br />. Bien entendu la balise <br /> sera exécutée par le navigateur
ce qui engendrera un retour à la ligne après chaque message "Bonjour".

16
Le code précédent donne le ce résultat:

Bonjour
Bonjour
Bonjour
Bonjour
Bonjour
Bonjour
Bonjour
Bonjour
Bonjour
Bonjour

Jetons maintenant un coup d’œil sur le code source reçu par le navigateur:

Bonjour<br />Bonjour<br />Bonjour<br />Bonjour<br />Bonjour<br />Bonjour<br


/>Bonjour<br />Bonjour<br />Bonjour<br />Bonjour<br />

Et oui, bien sûr le code PHP a disparu mais il a généré un résultat qui contient aussi du code HTML.

Il est même possible de générer une page entière (ou une grande partie de celle ci) avec toutes ses balises HTML et
styles CSS à l'aide de PHP.

Structure while
A l'instar de la boucle for, la boucle while permet de faire un traitement répétitif. En se servant de cette structure, le
code précédent peut devenir:

<?php
   $i=0;
   while($i<10){
      echo "Bonjour<br />";
      $i++;
   }
?>

Le résultat sera le même que l'exemple précédent, ainsi que le code source vu par le client (reçu par le navigateur).

Tout d'abord, on initialise le compteur $i à 0 ($i=0). Tant que $i est inférieur à 10 (while($i<10)), alors on affiche le
message "Bonjour" suivi d'un retour à la ligne. Mais il ne faut pas oublier d'incrémenter le compteur ($i++) pour ne
pas tomber dans une boucle infinie.

Structure do while
La structure do while ressemble beaucoup à la structure while sauf que le test de la condition est placé après le
traitement et non pas avant. Par conséquent, la première itération est toujours exécutée.
Avec la structure do While le code précédent devient:

<?php
   $i=0;
   do{
      echo "Bonjour<br />";
      $i++;

16
   }
   while($i<10);
?>

Mots-clés break et continue


Le mot clé break permet de mettre fin à une boucle prématurément. Si la boucle doit normalement exécuter toutes les
itérations qui satisfont la condition décrite, l'arrêt prématuré survient avant la sa fin normale.

Exemple:

<?php
   for($i=0;$i<10;$i++){
      if($i==5)
         break;
      echo "Bonjour<br />";
   }
?>

Le résultat escompté est:


Bonjour
Bonjour
Bonjour
Bonjour
Bonjour

Dans ce cas, la boucle est censée afficher le message "Bonjour" 10 fois, mais le fait de placer le mot clé break après la
condition if($i==5), arrête le programme au bout de 5 premières itérations.
Le mot-clé continue permet d'ignorer l'itération courante est passer immédiatement à l'itération suivante.

Exemple:

<?php
   for($i=0;$i<10;$i++){
      if($i==5)
         continue;
      echo "$i<br />";
   }
?>

16
Ce qui donne:
0
1
2
3
4
6
7
8
9

Vous avez certainement remarqué l'absence du nombre 5. Le mot-clé continue cesse l'itération en cours (qui
correspond à $i=5) et passe immédiatement à l'itération suivante ($i=6).

Notez qu'il existe une autre structure de contrôle qui agit sur les tableaux. On aura l'occasion de la voir dans la page
qui traite ce sujet.

Les structures de contrôle en PHP en vidéo


https://youtu.be/zJczEjh0RDs

16
Formulaires et fonctions agissant sur les variables
Récupération des champs de formulaire
Supposons que nous disposons d'un formulaire déclaré comme ceci:
<form method="post" action="">
   <input type="text" name="prenom" /><br />
   <input type="submit" name="valider" value="Vérifier" />
</form>

Bien entendu, c'est ce qu'il y a de plus simple en HTML. Il s'agit d'un formulaire qui contient deux champs, une zone
de texte au nom de prenom et un bouton d'envoi du nom de valider. Le formulaire utilise la méthode POST et envoie
ses valeurs à la page courante une fois le bouton d'envoi actionné.

Sur la page qui est sensée traiter le formulaire (la page courante dans ce cas), on doit d'abord récupérer les valeurs
postées par celui-ci. Pour ce faire, on recourt aux variables (tableaux) superglobales $_POST et $_GET.

Variables $_POST et $_GET


La variables $_POST est en réalité un tableau associatif, c'est à dire un tableau qui utilise des clés au lieux d'indexes
(on verra en détail les variables tableau en PHP plus loin dans ce cours).

La variables $_POST contient la valeur du champ de formulaire dont le nom est passé en tant que clé. Par exemple,
pour récupérer la valeur que le client a saisi dans la zone de texte nommée prenom, on fait appel à la
variable $_POST["prenom"].

La variable $_POST est appelée si le formulaire en question utilise la méthode POST. Si le formulaire utilise la


méthode GET alors on appelle la variable $_GET. Tout comme le tableau $_POST, le tableau $_GET utilise comme
clé, les noms des champs de formulaires.

$_POST et $_GET sont des variables superglobales, c'est à dire qu'elles sont reconnues dans n'importe quel contexte
(à l'intérieur des fonctions comme à l'extérieur, voir même à l'intérieur des méthodes d'une classe dans le cas de PHP5
par exemple).

Fonctions agissant sur les variables


Il existe une multitude de fonctions qui agissent sur les variables en PHP. Mais les plus pratiques sont généralement:

 empty(): permet de vérifier si la variable passée en paramètre est vide ou non. Si la variable est vide (elle ne contient
aucune valeur) alors la fonction empty() retourne la valeur booléenne true, et si la variable testée n'est pas vide
(contient une valeur de type quelconque) alors elle retourne false.
 isset(): permet de vérifier si la variable passée en paramètre existe ou non. Si la variable est déjà évoquée avant la
fonction isset(), alors elle existe et cette dernière retourne true, sinon elle retourne false.
 unset(): permet de supprimer la variable passée en paramètre. Si après la fonction unset() on appelle la
fonction isset() en leur passant la même variable, alors celle ci retournera false.
 gettype(): permet de retourner le type de la variable passée en paramtère
 is_numeric(): vérifie si la variable passée an paramètre ne contient qu'une suite de caractères numériques. Si oui elle
retourne true sinon elle retourne false.
 is_int(): vérifie si la variable passée an paramètre est de type entier ou non. Si oui, elle retourne true sinon elle
retourne false

16
On trouve aussi les fonctions is_float(), is_long(), is_double(), is_string() et is_bool() qui vérifient chacune le type
de variable associée de la même manière que is_int().

Exemple d'application
Pour faire simple, on suppose qu'on veut vérifier si le champ prénom du formulaire précédent n'est pas vide. Une fois
le client validera le formulaire en cliquant sur le bouton d'envoi, si le prénom est vide, le message "Prénom invalide"
sera affiché en rouge. Sinon (le prénom n'est pas laissé vide quelque soit le texte qu'il contient), alors le message
"Prénom valide" sera affiché en vert. Quelque soit le message généré, il sera affiché en bas du formulaire.

Il est tout à fait logique de penser que le traitement entier sera placé en bas du formulaire puisque c'est là où l'un des
deux messages "Prénom valide" ou "Prénom invalide" sera affiché. Cependant, je préfère toujours mettre les scripts
importants avant même la balise <html>, voir avant le DOCTYPE, s'il s'agit d'un document HTML5. Ce choix est
tout à fait justifié, mais je préfère en parler quand le moment sera venu.

Dans ce cas, comment écrire l'un des deux messages voulu en bas du formulaire. La réponse est simple, il suffit d'y
afficher une variable que l'on aurait déjà initialisé avant.

Pour ne pas perdre de temps, voilà ma version de code qui permet de réussir le traitement souhaité:

<?php
   @$prenom=$_POST["prenom"];
   @$valider=$_POST["valider"];
   $message="";
   if(isset($valider)){
      if(empty($prenom))
         $message='<font color="#FF0000">Prénom invalide.</font>';
      else
         $message='<font color="#00FF00">Prénom valide.</font>';
   }
?>   
<!DOCYPT html>
<html>
   <head>
      <meta charset="UTF-8" />
   </head>
   <body>
      <form method="post" action="">
         <input type="text" name="prenom" /><br />
         <input type="submit" name="valider" value="Vérifier" />
      </form>
      <?php
         echo $message;
      ?>
   </body>
</html>

Expliquons un peu ce code:


Les deux première lignes du code PHP permettent de créer deux variables $prenom et $valider à partir des champs de
formulaires respectifs, zone de texte et bouton d'envoi. La présence de l'arobas mis au début de chacune de ces deux
lignes sera expliquée après. Ensuite j'ai initialisé la variable $message avec une chaîne de caractères vide. C'est cette
variable qui sera affichée en bas du formulaire (echo $message).

16
la condition if(isset($valider)) signifie si la variable $valider associée au bouton d'envoi existe. En effet, avant de
poster le formulaire, aucune des variables $prenom et $valider n'existe encore, car les variables $_POST qu'on leur a
affecté ne seront créés qu'une fois le formulaire (utilisant la méthode POST) est envoyé en cliquant le bouton submit.
Donc, ce n'est qu'après avoir posté le formulaire que le bloc d'instructions entre les accolades sera exécuté. Ce bloc
contient une autre condition qui consiste à vérifier si la variable $prenom, associée à la zone de texte, est vide. Dans ce
cas, le message "Prénom invalide" qu'on a mis dans la balise <font> pour le colorer en rouge sera affecté à la variable
$message. Si $prenom n'est pas vide alors la chaîne "Prénom valide" coloré en vert sera affecté à la variable
$message.

Masquage des messages d'erreur


Revenons maintenant aux arobas (@). Comme je l'ai précisé dans le paragraphe précédent, aucune des deux variables
(tableaux) $_POST n'existe avant de poster le formulaire. Dans ce cas, au premier chargement de la page, les clés
"prenom" et "valider" que contiennent les crochés ne seront pas reconnus par le compilateur PHP qui générera des
erreurs de notification disant "Indefined index prenom" et "Indefined index valider". Ces erreurs n'interrompent pas
l’exécution du script, mais la présence de ces deux messages d'erreur dans la page ne sera pas appréciée. Il existe donc
deux solution, soit interdire l'affichage des erreurs en manipulant le fameux fichier php.ini (chose fortement
déconseillée lors de la phase développement) ou bien masquer les messages d'erreur en utilisant le symbole arobas
(@) avant l'instruction qui la cause. C'est cette deuxième méthode qui me parait plus appropriée dans ce cas.

Manipulation des formulaires avec PHP en vidéo


https://youtu.be/Lyhgawy0H5g

16
Fonctions mathématiques
Fonctions mathématiques standards
 abs($x): retourne la valeur absolue de $x.
 ceil($x): retourne l'arrondi supérieur de $x. Il s'agit du nombre entier immédiatement supérieur ou égal $ x.
 floor($x): retourne l'arrondi inférieur de $x. Il s'agit du nombre entier immédiatement inférieur ou égal $ x.
 round($x,$i): retourne l'arrondi le plus proche de $x avec la précision $i. Le nombre retourné aura $i chiffres
après la virgule.
 pow($x,$y): retourne $x à la puissance $y.
 max($a,$b,$c,...): retourne le nombre le plus grand parmi $a, $b, $c...
 min($a,$b,$c,...): retourne le nombre le plus petit parmi $a, $b, $c...
 log($x): retourne le logarithme naturel (népérien) de $x.
 log10($x): retourne le logarithme en base 10 de $x.
 exp($x): retourne l'exponentiel de $x.
 sqrt($x): retourne la racine carré de $x.
 hexdec($x): converti $x de la base hexadécimale à la base décimale.
 dechex($x): converti $x de la base décimale à la base hexadécimale.
 bindec($x): converti $x de la base binaire à la base décimale.
 decbin($x): converti $x de la base décimale à la base binaire.

Exemple:
<?php
   $x=-1.6;
   echo abs($x); // Affiche 1.6;
   echo ceil($x); // Affiche -1;
   $nbr=A2F5;
   echo hexdec($nbr); // Affiche 41717;
?>

Fonctions trigonométriques
 pi(): retourne la valeur approximative de PI (3,14159265359).
 sin($x): retourne le sinus de $x.
 cos($x): retourne le cosinus de $x.
 tan($x): retourne la tangente de $x.
 asin($x): retourne l'arc sinus de $x.
 acos($x): retourne l'arc cosinus de $x.
 atan($x): retourne l'arc tangente de $x.

Notez qu'il existe des constantes prédéfinies en PHP comme M_PI qui retourne la valeur de PI
(3,14159265359)et M_E qui retourne la valeur du nombre d'Euler (2.71828182846).

Nombres aléatoires
En PHP (comme en d'autres langages de programmation) il est parfois utile de pouvoir générer des nombres aléatoires
pour certaines applications. Par exemple, pour développer un jeu de chance comme la loterie en ligne, l'affichage de

16
contenu publicitaire d'une manière aléatoire, la génération de mot de passe en cas d'oubli de celui-ci par le client ou la
génération des CAPTCHA...

Le terme CAPTCHA désigne "Completely Automated Public Turing test to tell Computers and Humans Apart". Sur
une page Web qui contient des formulaires, il est parfois utile de savoir si c'est un humain qui le manipule ou un robot
(logiciel automatisé qui remplit et poste le formulaire au serveur). Pour faire la distinction entre les deux, on affiche
généralement une suite de caractères déformés (ou peu flous) qu'on demande au client de reproduire, ou on propose
une opération arithmétique simple (addition ou soustraction) et on lui demande de saisir le résultat escompté...
Généralement, les robots ne parviennent pas à outrepasser le CAPTCHA.

Les fonctions qui traitent les nombres aléatoires sont:

 mt_rand(): La fonction mt_rand() permet de générer un nombre aléatoire entier compris entre 0 et RANDMAX
(qui représente la valeur maximale pouvant être générée). Si on désigne des paramètres entre les parenthèses, par
exemple mt_rand(1,4), alors l'un des nombre 1, 2, 3 ou 4 sera généré aléatoirement.
 mt_srand(): Cette fonction permet d'initialiser le moteur de génération des nombres aléatoires. Il est conseillé de
toujours faire suivre mt_rand() par mt_srand() pour garantir un meilleur résultat aléatoire la prochaine fois.
 mt_getrandmax(): Cette fonction permet de retourner le RANDMAX qui représente la valeur maximale que le
moteur de génération des nombres aléatoires peut générer. Sa valeur vaut 2147483647. Si la fonction mt_rand()
est déclarée sans paramètres, alors elle peut générer un nombre compris entre 0 et RANDMAX.

Exemple:
<?php
   for($i=1;$i<=8;$i++){
      $nbr=mt_rand();
      echo "$i - <b>$nbr</b><br>";
      mt_srand();
   }
?>

Quand j'ai exécuté le code chez moi, cela a donné:

1 - 337518718
2 - 1863857086
3 - 1582335841
4 - 1253525569
5 - 1332647592
6 - 1891861769
7 - 232857778
8 - 1548570121

Formatage des nombres


Souvent, quand on veut afficher de grands nombres on fait en sorte de placer un séparateur de milliers afin que sa
lecture soit facile. C'est généralement le cas sur les sites E-commerce qui proposent en vente des articles de valeur
élevée comme l'immobilier ou les voitures.

En PHP il existe une fonction qui permet de faciliter le formatage des nombres, il s'agit de number_format(). Sa
syntaxe complète ressemble à ceci:

number_format($nbr,$dec,$vir,$sep)

16
 $nbr désigne le nombre à formater.
 $dec précise le nombre de chiffres à conserver après la virgule.
 $vir désigne le symbole qui fait office de la virgule.
 $sep désigne le symbole qui fait office de séparateur de milliers.

Exemple:
<?php
   $nbr=123456789.0123;
   echo number_format($nbr,2,","," ");
?>

ce qui donne: 123 456 789,01

Fonctions mathématiques en vidéo


https://youtu.be/YQh8XPHcyjk

16
Chaînes de caractères
Une chaîne de caractères est une suite de caractères dont le nombre maximal n'est pas limité. Elle est toujours
délimitée par des simples cotes ou des doubles cotes.

Exemple:

$str1="Bonjour";
$str2='Bonsoir';

Les deux variables $str1 et $str2 sont des chaînes de caractères vues de la même manière par le compilateur PHP.
Cependant il y a une nette différence entre les simples cotes et les doubles cotes, surtout quand il s'agit d'évaluer les
variables scalaires. En effet, si on place une variable scalaire (nombre ou chaîne de caractères) dans des doubles cotes
dans une chaîne de caractères, elle sera évaluée et replacée par sa valeur. Par contre si on la place entre les simples
cotes, elle sera imprimée telle qu'elle est.

Exemple:

$str="Bonjour";
echo "$str à tous"; // Affiche: Bonjour à tous
echo '$str à tous'; // Affiche: $str à tous

Concaténation de chaînes de caractères


Pour concaténer les chaînes de caractères on utilise l'opérateur point (.). Cet opérateur permet d'unir deux chaînes de
caractères en une seule.

Exemple:

<?php
   $nbr=2.3;
   echo "L'arrondi supérieur de $nbr est ".ceil($nbr);
?>

Ce qui donne: L'arrondi supérieur de 2.3 est 3

Puisque les variables sont évaluées entre les doubles cotes d'une chaîne de caractères alors il est possible de les y
placer directement (cas de la variable $nbr dans cet exemple). Par contre, les fonctions et les variables tableau ne sont
pas évaluées dans une chaîne, c'est ce qui m'a emmené à placer la fonction ceil($nbr) en dehors de la chaîne de
caractères et la concaténer avec celle ci.

Fonctions agissant sur les chaînes de caractères


PHP dispose d'une panoplie de fonctions qui permettent de manipuler les chaînes de caractères. Elles sont tellement
nombreuses qu'il faut des pages et des pages pour toutes les énumérer. Je me contente donc des fonctions les plus
fréquentes et les plus utiles. Bien entendu vous pouvez les combiner ou créer vos propres fonctions PHP à partir de
celles que nous allons soir pour réussir des traitement plus diversifiés.

Voici la liste des fonctions les plus utiles:

 strlen($str): retourne un entier qui représente le nombre de caractères que contient la chaîne $str.
 strtoupper($str): convertir la chaîne $str en majuscule.
 strtolower($str): convertir la chaîne $str en minuscule.

16
 ucfirst($str): convertit le premier caractère de la chaîne $str en majuscules.
 trim($str): supprime les espaces de début de de fin de la chaîne $str.
 rtrim($str) ou chop($str): supprime les espaces de fin de la chaîne $str.
 substr($str,$deb,$nbr): extrait une partie de la chaîne de caractères en commençant de la position $deb et en
retournant $nbr caractères (Notez que la position du premier caractère de la chaîne est 0).
 ord($car): retourne le code ASCII du caractère $car.
 chr($int): retourne le caractère correspondant au code ASCII $int.
 addslashes($str): ajoute des antislashs avant les caractères spéciaux comme l'antislash, simple cote ou double
cote qui se trouvent dans la chaîne de caractères $str.
 stripslashes($str): supprime les antislashs qui se trouvent dans la chaîne de caractères $str.
 strip_tags($str): supprime les balises HTML qui se trouvent dans la chaîne de caractères $str.
 htmlentities($str): convertit certains caractères de $str en mot clés HTML.
 md5($str): calcule le MD5 de la chaîne $str. MD5 est une fonction de hachage et signifie Message Digest 5. En
cryptographie, le hachage désigne chiffrer sans avoir la possibilité de déchiffrer après. Le résultat de la fonction
MD5 contient toujours 32 cratères hexadécimaux (16 octets), quelque soit la longueur de la chaîne $str. Elle est
très utile surtout quand on souhaite stocker des données confidentielles comme des mots de passe (dans une
base de données ou un fichier par exemple).
 sha1($str): calcule le SHA1 de la chaîne $str. SHA1 est une fonction de hachage et signifie Secure Hash
Algorythm. Elle agit comme la fonction md5() mais son résultat est constitué de 40 caractères (20 octes).
 str_replace($occ,$rem,$str): retourne une chaîne de caractères où toutes les occurrences définies par $occ sont
remplacées une à une par l'entrée respectives définie en $remp au sein de la chaîne de caractères $str.

Exemple:
<?php
   $str="Bonjour";
   echo strlen($str); // Affiche: 7
   echo strtoupper($str); // Affiche: BONJOUR
   echo substr($str,0,3); // Affiche: Bon
   echo htmlentities("<font>"); // Affiche: &lt;font&gt;
   for($i=0;$i<strlen($str);$i++){
      echo substr($str,$i,1)." : ".ord(substr($str,$i,1))."<br />";
   }
   /*
   La dernière boucle affiche:
   B : 66
   o : 111
   n : 110
   j : 106
   o : 111
   u : 117
   r : 114
   */
   echo md5($str); // Affiche: ebc58ab2cb4848d04ec23d83f7ddf985
   echo str_replace(
       array("o","n","u"),
       array("x","y","z"),
       "Bonjour"
       );
   // Affiche: Bxyjxzr
?>

16
Afficher les chaînes de caractères
Jusqu'ici nous nous sommes servis de la fonction echo pour afficher nos chaînes de caractères. Cependant, echo n'est
pas une fonction proprement parlant car elle n'exige pas les parenthèses. Mais c'est le moyen le plus utilisé pour
exporter nos chaînes de caractères sur l'écran.

Syntaxe:

<?php    echo "Bonjour"; ?>


<?="Bonjour"?>

Les deux instructions sont identiques. La première affiche "Bonjour" à l'aide de echo dans un script PHP (<?php ?>).
Quant-à la deuxième, elle s'agit d'un raccourcis de la fonction echo qui consiste à ouvrir le délimiteur court de PHP
(<?) suivi de = suivi de la chaîne à écrire, puis le délimiteur de fermeture du script (?>).

Il existe aussi la structure print qui permet d'afficher un message de la même manière que la structure echo. Notez
que print n'est pas une fonction non plus car elle n'exige pas les parenthèses.

Syntaxe:

<?php
   print "Bonjour"; // Affiche: Bonjour
?>

Si vous avez déjà codé en C alors vous êtes certainement habitué à la fonction printf(). Cette fonction existe aussi en
PHP. Elle permet d'afficher des chaînes de caractères formatées. Elle est rarement utilisée mais il est toujours utile de
savoir qu'elle est prise en charge.

Syntaxe:

<?php
   printf("Salut à %s","tous"); // Affiche: Salut à tous
?>

Les chaînes de caractères en vidéo


https://youtu.be/cVdn6ZvJBtk

Exercice : Vérification des champs de formulaire en PHP


Enoncé
On souhaite créer un formulaire d'inscription des visiteurs qui contient les champs suivants:

 Civilité: liste de sélection qui contient les options Mlle, Mme et M.


 Nom: zone de texte
 Prénom: zone de texte
 Email: zone de texte

16
 Mot de passe: zone de mot de passe
 Confirmation du mot de passe: zone de mot de passe
 Bouton d'envoi pour valider l'inscription

Correction
Pour aller doucement, je vous propose d'abord le code coté client auquel je n'ai pas encore intégré le PHP. En effet,
c'est comme ça qu'il faut procéder: commencer d'abord par la création du contenu statique (formulaires et autres objets
HTML), mettre en forme le contenu avec CSS, déclarer du Javascript si vous en avez besoin, puis à la fin, intégrer du
PHP. Mais les choses ne se déroulent pas toujours comme prévu dès le premier coup, alors il est possible de sauter
d'un code à un autre afin de régler le problème. Mais dans le cas général, il faut procéder étape par étape.

Voici les code HTML et CSS qui permettent de présenter la page Web.
<!DOCTYPE html>
<html>
   <head>
      <meta charset="ISO-8859-1" />
      <style>
         fieldset{
            border:solid 1px #EE6600;
            border-radius:10px;
            padding:20px;
         }
         legend{
            font:bold 16pt arial;
            color:#EE6600;
         }
         input,select{
            border:solid 1px #AAAAAA;
            padding:10px;
            font:10pt verdana;
            color:#EE6600;
            outline:none;
            border-radius:6px;
         }
         input[type="submit"]{
            border:none;
            background-color:#EE6600;
            color:#FFFFFF;
            width:200px;
            cursor:pointer;
         }
         .label{
            margin-bottom:4px;
            font:10pt arial;
            color:#AAAAAA;
         }
         .champ{
            margin-bottom:20px;
         }
         .erreur{
            font:10pt arial;
            color:#DD0000;
            background-color:#EEEEEE;
            padding:10px;
            border-radius:10px;

16
            margin-bottom:10px;
         }
         .rappel{
            font:10pt arial;
            color:#888888;
            background-color:#EEEEEE;
            padding:10px;
            border-radius:10px;
            margin-bottom:10px;
         }
      </style>
   </head>
   <body>
      <form name="fo" method="post" action="">
         <fieldset>
            <legend>Nouvel utilisateur</legend>
            <div class="label">Civilité</div>
            <div class="champ">
               <select name="civilite">
                  <option>Mme</option>
                  <option>Mlle</option>
                  <option>M.</option>
               </select>
            </div>
            <div class="label">Nom</div>
            <div class="champ">
               <input type="text" name="nom" />
            </div>
            <div class="label">Prénom</div>
            <div class="champ">
               <input type="text" name="prenom" />
            </div>
            <div class="label">Email</div>
            <div class="champ">
               <input type="text" name="email" />
            </div>
            <div class="label">Mot de passe</div>
            <div class="champ">
               <input type="password" name="pass" />
            </div>
            <div class="label">Confirmer le mot de passe</div>
            <div class="champ">
               <input type="password" name="repass" />
            </div>
            <div class="champ">
               <input type="submit" name="valider" value="Valider
l'inscription" />
            </div>
         </fieldset>
      </form>
   </body>
</html>

(Vous nommez votre page comme bon vous semble à condition qu'elle soit suffixée par .php)

Nous allons d'abord commencer par récupérer les $_POST comme ceci:
<?php
   @$civilite=$_POST["civilite"];
   @$nom=$_POST["nom"];
16
   @$prenom=$_POST["prenom"];
   @$email=$_POST["email"];
   @$pass=$_POST["pass"];
   @$repass=$_POST["repass"];
   @$valider=$_POST["valider"];
?>
Les arobas servent à ignorer les messages de notification du genre "Indefined index civilite".

J'ai précisé dans l'énoncé qu'il faut garder les champs déjà saisis. Par défaut, si la page est rechargée suite au clic sur le
bouton d'envoi, tous les champs seront vidés. On y placera donc l’attribut value auquel on donnera comme valeur
celle de la variable associée, comme ceci:

<input type="text" name="nom" value="<?php echo $nom?>" />

Dans le cas de la liste de sélection on fera plutôt:


<select name="civilite">
   <option <?php if($civilite=="Mme") echo "selected";?>>Mme</option>
   <option <?php if($civilite=="Mlle") echo "selected";?>>Mlle</option>
   <option <?php if($civilite=="M.") echo "selected";?>>M.</option>
</select>

Maintenant, il faut prévoir une zone où afficher les messages prévus sur la page suite à l'envoi du formulaire. J'ai
prévu deux styles CSS associés aux classes erreur et rappel. Ces deux styles servent à colorer le message selon sa
nature. S'il s'agit d'une erreur il sera rouge et s'il s'agit du rappel des informations du client il sera coloré en gris.

Dans ce cas je n'ai pas utilisé la balise <font> pour colorer les messages car elle est devenue obsolète en HTML5.

Avant le formulaire (la zone destinée à accueillir les messages) on va placer le code suivant:
<?php echo $message ?>

C'est la variable $message qui accueillera les notifications générées par le serveur suite au contrôle du formulaire. Il
ne faut pas oublier de l'initialiser au début du document en lui affectant la chaîne vide ($message="";).

Voyons maintenant à quoi ressemble le traitement demandé:


<?php
   @$civilite=$_POST["civilite"];
   @$nom=$_POST["nom"];
   @$prenom=$_POST["prenom"];
   @$email=$_POST["email"];
   @$pass=$_POST["pass"];
   @$repass=$_POST["repass"];
   @$valider=$_POST["valider"];
   
   if(isset($valider)){
      if(empty($nom))
         $message='<div class="erreur">Nom laissé vide.</div>';
      elseif(empty($prenom))
         $message='<div class="erreur">Prénom laissé vide.</div>';
      elseif(empty($email))
         $message='<div class="erreur">Email laissé vide.</div>';
      elseif(empty($pass))
         $message='<div class="erreur">Mot de passe laissé vide.</div>';
      elseif($pass!=$repass)
         $message='<div class="erreur">Les mots de passe ne sont pas
identiques.</div>';
      else{
         $message='<div class="rappel"><b>Rappel:</b><br />';
         $message.=$civilite.' '.ucfirst(strtolower($prenom)).'
'.strtoupper($nom).'<br />';

16
         $message.='Email: '.$email;
         $message.='</div>';
      }
   }
?>

Le code précédent et placé en entier avant le Doctype.

Dans le bloc else j'ai procédé à la création de la variable $message (qui contient le rappel) petit à petit en concaténant
son ancien contenu avec le nouveau.

16
Maintenant que vous avez compris comment procéder, voilà le code complet:
<?php
   @$civilite=$_POST["civilite"];
   @$nom=$_POST["nom"];
   @$prenom=$_POST["prenom"];
   @$email=$_POST["email"];
   @$pass=$_POST["pass"];
   @$repass=$_POST["repass"];
   @$valider=$_POST["valider"];
   
   if(isset($valider)){
      if(empty($nom))
         $message='<div class="erreur">Nom laissé vide.</div>';
      elseif(empty($prenom))
         $message='<div class="erreur">Prénom laissé vide.</div>';
      elseif(empty($email))
         $message='<div class="erreur">Email laissé vide.</div>';
      elseif(empty($pass))
         $message='<div class="erreur">Mot de passe laissé vide.</div>';
      elseif($pass!=$repass)
         $message='<div class="erreur">Les mots de passe ne sont pas
identiques.</div>';
      else{
         $message='<div class="rappel"><b>Rappel:</b><br />';
         $message.=$civilite.' '.ucfirst(strtolower($prenom)).' '.strtoupper($nom).'<br
/>';
         $message.='Email: '.$email;
         $message.='</div>';
      }
   }
?>

<!DOCTYPE html>
<html>
   <head>
      <meta charset="ISO-8859-1" />
      <style>
         body{
            padding:10px;
         }
         fieldset{
            border:solid 1px #EE6600;
            border-radius:10px;
            padding:20px;
         }
         legend{
            font:bold 16pt arial;
            color:#EE6600;
         }
         input,select{
            border:solid 1px #AAAAAA;
            padding:10px;
            font:10pt verdana;
            color:#EE6600;
            outline:none;
            border-radius:6px;
         }
         input[type="submit"]{
            border:none;
            background-color:#EE6600;
            color:#FFFFFF;
            width:200px;
            cursor:pointer;
         }
         .label{

16
            margin-bottom:4px;
            font:10pt arial;
            color:#AAAAAA;
         }
         .champ{
            margin-bottom:20px;
         }
         .erreur{
            font:10pt arial;
            color:#DD0000;
            background-color:#EEEEEE;
            padding:10px;
            border-radius:10px;
            margin-bottom:10px;
         }
         .rappel{
            font:10pt arial;
            color:#888888;
            background-color:#EEEEEE;
            padding:10px;
            border-radius:10px;
            margin-bottom:10px;
         }
      </style>
   </head>
   <body>
      <?php echo $message ?>
      <form name="fo" method="post" action="">
         <fieldset>
            <legend>Nouvel utilisateur</legend>
            <div class="label">Civilité</div>
            <div class="champ">
               <select name="civilite">
                  <option <?php if($civilite=="Mme") echo "selected";?>>Mme</option>
                  <option <?php if($civilite=="Mlle") echo "selected";?>>Mlle</option>

                  <option <?php if($civilite=="M.") echo "selected";?>>M.</option>


               </select>
            </div>
            <div class="label">Nom</div>
            <div class="champ">
               <input type="text" name="nom" value="<?php echo $nom?>" />
            </div>
            <div class="label">Prénom</div>
            <div class="champ">
               <input type="text" name="prenom" value="<?php echo $prenom?>" />
            </div>
            <div class="label">Email</div>
            <div class="champ">
               <input type="text" name="email" value="<?php echo $email?>" />
            </div>
            <div class="label">Mot de passe</div>
            <div class="champ">
               <input type="password" name="pass" value="<?php echo $pass?>" />
            </div>
            <div class="label">Confirmer le mot de passe</div>
            <div class="champ">
               <input type="password" name="repass" value="<?php echo $repass?>" />
            </div>
            <div class="champ">
               <input type="submit" name="valider" value="Valider l'inscription" />
16
            </div>
         </fieldset>
      </form>
   </body>
</html>

16

Vous aimerez peut-être aussi