Vous êtes sur la page 1sur 70

PHP

Support de Cours

Web Dynamique 2 : PHP

1, JPA Web Dynamique 2 PHP


PHP
Support de Cours 1

Introduction 4

Le Langage PHP 5

I. Généralités et définitions 5

II. Structure du code PHP 5

III. Apprentissage du code 9

1. Les variables 9

2. Les types de données 13

3. Récupération de données en PHP: Méthode GET 19

4. Récupération de données en PHP : Méthode POST 24

5. Exercices d’applications 36

Bases de données MySQL 37

I. Notions générales sur les SGBD 37

II. Création de bases de données et de tables 37

III. Interaction depuis PHP 47

4. Exercices d’applications en PHP-MySQL 50

Approfondissement 51

I. Notions générales sur les CMS et Framework 51

1. Système de Gestion de Contenus (SGC ou CMS) 51

2. Framework 54

3. WordPress : Un CMS populaire 56

II. Publication du site 62

Conclusion générale 69

Bibliographie 70

2, JPA Web Dynamique 2 PHP


PHP

3, JPA Web Dynamique 2 PHP


PHP

Introduction
PHP  (officiellement, ce sigle est un acronyme récursif pour  PHP Hypertext
Preprocessor) est un langage de scripts généraliste et Open Source, spécialement
conçu pour le développement d'applications web. Il peut être intégré facilement au
HTML. PHP est principalement conçu pour servir de langage de script coté serveur,
ce qui fait qu'il est capable de réaliser tout ce qu'un script CGI (Common Gateway
Interface ou Interface de passerelle commune en français) 1 quelconque peut faire,
comme collecter des données de formulaire, générer du contenu dynamique, ou
gérer des cookies. Mais PHP peut en faire bien plus.

PHP a été inventé à l'origine pour le développement d'applications web


dynamiques qui constituent encore le cas d'utilisation le plus courant et son point
fort. Cependant, les évolutions qui lui ont été apportées jusqu'à aujourd'hui
assurent à PHP une polyvalence non négligeable. PHP est par exemple capable
d'interagir avec Java, de générer des fichiers PDF, d'exécuter des commandes
Shell, de gérer des objets (au sens programmation   orientée objet), de créer des
images ou bien de fournir des interfaces graphiques au moyen de PHP GTK.

Dans ce cours du langage, nous introduirons tout d'abord les caractéristiques de


PHP, puis nous verrons en pratique comment se font les développements
d'applications web dynamique. Nous aborderons ensuite le Système de Gestion de
Bases de Données MySQL afin d’explorer les autres types d'applications possibles
avec le couple PHP/MySQL.

1Interface utilisée par les serveurs HTTP.

4, JPA Web Dynamique 2 PHP


PHP

Le Langage PHP
I. Généralités et définitions
Autrefois abbréviation de Personal Home Page devenue aujourd'hui Hypertext
Preprocessor, PHP s'impose comme un standard dans le monde de la
programmation web par ses performances, sa fiabilité, sa souplesse et sa rapidité.

PHP est un langage interprété orienté Web. Syntaxiquement, c'est un mélange de C


et de Perl. Les scripts PHP sont lus et interprétés par le moteur PHP. PHP comporte
plus de 500 fonctions. Il est fournit avec des librairies offrant des fonctionnalités
diverses :

• accès aux bases de données,

• fonctions d'images,

• sockets,

• protocoles Internet divers…

Le code php s’écrit entre les éléments <?php ?>.

II. Structure du code PHP

Attention !  Chaque instruction de code php doit être terminée par un point
virgule. Son absence entraînera automatiquement une erreur de type "parse error".

Par contre, plusieurs instructions peuvent être présentes sur une ligne, tout comme
une instruction peut chevaucher plusieurs lignes. Pour plus de lisibilité, il est
préférable d'éviter de mettre plusieurs instructions sur une même ligne.

Les commentaires
Les commentaires,  essentiels dans votre code, peuvent être intégrés de deux
façons :

1. sur une ligne vous pouvez le faire précéder par deux slashs // ou par un dièse
#. Nous privilégierons ici les deux slashs

2. sur plusieurs lignes /* pour le début et */ pour la fin.

5, JPA Web Dynamique 2 PHP


PHP

Exemple d'une page HTML contenant du code PHP

<html>

<head>

<title>Mes premiers scripts en PHP</title>

</head>

<body>

<?php

/* mon premier script, au menu :

- première chaîne de caractères

- date et heure du jour

*/

echo  'Texte  généré  par  PHP.  La DEI est une direction technique de la Police
Républicaine'; // chaîne à écrire via PHP

echo  '<br  />Date  du  jour  =  <font  color="red"><strong>'.date("d/m/y  -  H:i:s").'</
strong></font>';

?>

</body>

</html>

Lorsque l'on visualisera le résultat via le navigateur web, nous obtiendrons :

Texte généré par PHP. La DEI est une direction technique de la Police Républicaine

Date du jour = 04/04/18 - 15:14:05

On remarquera que :

1. du HTML a donc été généré via le code PHP comme l'atteste l'affichage de la
source de la page web

2. différentes façons de commenter sont employées et les commentaires ne


sont pas visibles

3. la commande echo a été utilisée pour écrire du texte dans la page HTML, sa
syntaxe est la suivante :

<?php echo "mon texte"; ?> 

<?php echo "<font color=\"blue\">"; // on despécialise ?>

ou encore :

<?php echo 'mon texte'; ?> 

<php echo '<font color="blue">'; // inutile de despécialis
er ?>


6, JPA Web Dynamique 2 PHP


PHP
N'oubliez pas les guillemets ou les guillemets simples qui délimitent la chaîne
de caractère a écrire et le point virgule final

4. le caractère \ (i.e antislash) peut être utilisé pour déspécialiser les guillemets
nécessaires à la valeur d'un attribut HTML. En son absence, PHP interpréte le
guillemet comme une fin de chaîne de caractère, provoquant une erreur

5. le point (.) est nécessaire pour concaténer une chaîne de caractère au résultat
de la fonction date ou pour concaténer deux chaînes de caractères

6. la date peut être générée dynamiquement via la fonction date qui requiert
certains paramètres suivant les informations que l'on souhaite afficher

Formater la date en Français


Vous pouvez formater la date en fonction d'une localisation avec la fonction . Ce qui
permet par exemple d'avoir les noms des mois dans votre langue. Voici son
utilisation pour la France :

<?php

setlocale(LC_TIME, "fr_FR");

echo "Nous sommes le ".strftime("%d %B %Y");

?>

Nous sommes le 04 avril 2018

A noter

On peut utiliser la fonction print ou la commande echo pour écrire du texte, mais la
première est une fonction et retourne donc un résultat d'où son exécution
légèrement plus lente (imperceptible toutefois pour les scripts classiques).

La commande echo écrit donc du code HTML dans la page qui sera ensuite
envoyée au navigateur web du client. A ce titre, il est possible également d'écrire
(donc de générer) du code Javascript, VbScript...

Enfin, on peut inclure des retours chariots, des sauts de ligne, des tabulations... Qui
ne seront visibles que dans le formatage du code source HTML (en général de peu
d'intérêt, sauf pour clarifier le code source et débugger)

Voici les principales séquences utilisables :

7, JPA Web Dynamique 2 PHP


PHP

Séquence d'échappement Signification

\n nouvelle ligne

\r retour chariot

\ pour déspécialiser

\t tabulation horizontale

Pour que ces séquences soient interprétées, il faut absolument les placer à
l'intérieur de guillemets doubles.

Autre exemple

<html>

<head>

<title>Ma seconde page en PHP</title>

</head>

<body>

<?php

echo '<body bgcolor="#ff00ff">';

echo '<font size="2" face="arial">';

?>

<br /><br />--- date en cours ---<br /><br />

<?php echo  '<font  color="white"><strong>'.date('d/m/y  -  H:i:s’).'</strong></
font>' ?>

</body>

</html>

Résultat à l'affichage sur le navigateur web :

--- date en cours ---



20/11/18 - 15:29:52


On remarquera que :

1. le point virgule n'est pas obligatoire lorsque la balise de fermeture du code


PHP suit, bien que recommandé

2. on peut mettre sur une seule ligne les balises indiquant l'ouverture du code
PHP et sa fermeture.

8, JPA Web Dynamique 2 PHP


PHP
Pour en savoir plus sur les paramètres de la fonction date, suivez ce lien. On peut
également gérer les dates avec la classe "DateTime"(programmation objet)

Inclure un fichier
Récupérer des données présentes dans un fichier évite de les dupliquer sur
plusieurs pages. Ceci facilite donc la gestion du site et renforce la sécurité si vos
données sont sensibles. Pour cela, on utilise l'instruction include()

On pourra par exemple inclure dans notre fichier PHP un autre fichier PHP qui
contient la structure des pages, ou les balises meta de début de page, ou les
constantes et fonctions du site... Un classique en programmation qui nous fait
gagner beaucoup de temps.

<?php include ($_SERVER['DOCUMENT_ROOT']."/inc/connect.php"); ?>

Dans l'exemple ci-dessus, on inclut avant un script d'interrogation de base de


données, le fichier contenant les paramètres de connexion au serveur MySQL. Ce
fichier aura pour extension .php et contiendra les balises d'ouverture et de
fermeture du code PHP afin notamment qu'il ne puisse être directement lu (le PHP
étant interprété).

Nous remarquons l'utilisation de la variable serveur

"$_SERVER["DOCUMENT_ROOT"]" qui a pour valeur le chemin d'accès au dossier


contenant votre site, ce qui évite l'utilisation des chemins d'accès relatifs à modifier
lorsque votre fichier change d'arborescence.

III. Apprentissage du code


Les variables sont un élément indispensable dans tout langage de programmation,
et en PHP on n'y échappe pas.

Les variables nous permettent de retenir temporairement des informations en


mémoire. Avec elles, nous allons pouvoir par exemple retenir le pseudonyme du
visiteur, effectuer des calculs et bien d'autres choses !

1. Les variables

Qu'est-ce qu'une variable ?


Une variable, c'est une petite information stockée en mémoire temporairement. Elle
n'a pas une grande durée de vie. En PHP, la variable (l'information) existe tant que la
page est en cours de génération. Dès que la page PHP est générée, toutes les

9, JPA Web Dynamique 2 PHP


PHP
variables sont supprimées de la mémoire car elles ne servent plus à rien. Ce n'est
donc pas un fichier qui reste stocké sur le disque dur mais une petite information
temporaire présente en mémoire vive.

C'est à vous de créer des variables. Vous en créez quand vous en avez besoin pour
retenir des informations.

Un nom et une valeur

Une variable est toujours constituée de deux éléments :

• son nom : pour pouvoir la reconnaître, vous devez donner un nom à votre variable.
Par exemple age_du_civil;

• sa valeur : c'est l'information qu'elle contient, et qui peut changer. Par exemple :
18.

Ici, nous avons une variable appelée age_du_civil qui a pour valeur 18.

On peut modifier quand on veut la valeur de cette variable, faire des opérations
dessus, etc. Et quand on en a besoin, on l'appelle (par son nom), et elle nous dit
gentiment la valeur qu'elle contient.

Par exemple, vous pourrez retenir temporairement le nom du visiteur. Dans une
variable nom_du_visiteur, vous stockerez son pseudo, mettons «  Adjile  ». Dès que
vous en aurez besoin vous pourrez l'utiliser, notamment pour afficher un message
de bienvenue personnalisé : « Salut Adjile ! Bienvenue sur la plateforme de gestion
des courriers du DEI ! ».

Il est de bon ton de ne coder qu'en anglais : en effet, le code que vous écrivez
pourrait être relu / repris par n'importe qui, et il est possible que le (la)
développeur(se) soit non francophone.

Ainsi, pour les noms de vos variables, prenez soin de ne les écrire qu'en anglais.

Les différents types de variables


Les variables sont capables de stocker différents types d'informations. On parle
de types de données. Voici les principaux types à connaître.

• Les chaînes de caractères (string)  : les  chaînes de caractères  sont le nom


informatique qu'on donne au texte. Tout texte est appelé chaîne de caractères. En
PHP, ce type de données a un nom  : string. On peut stocker des textes courts
comme très longs au besoin.

Exemple  :"Je  suis  un  texte". Une chaîne de caractères est habituellement écrite
entre guillemets ou entre apostrophes (on parle de guillemets simples)  :

10, JPA Web Dynamique 2 PHP


PHP
'Je suis un texte'. Les deux fonctionnent mais il y a une petite différence que l'on
va découvrir plus loin.

• Les nombres entiers (int) : ce sont les nombres du type 1, 2, 3, 4, etc. On compte
aussi parmi eux les entiers relatifs : -1, -2, -3…

Exemple :23.

• Les nombres décimaux (float) : ce sont les nombres à virgule, comme 56,5691. On
peut stocker de nombreux chiffres après la virgule, ce qui devrait convenir pour la
plupart des usages que vous en ferez. Attention, les nombres doivent être écrits
avec un point au lieu de la virgule (c'est la notation anglaise).

Exemple :56.5691.

• Les booléens (bool) : c'est un type très important qui permet de stocker soit vrai
soit faux. Cela permet de retenir si une information est vraie ou fausse. On les
utilise très fréquemment. On écrit true pour vrai, et false pour faux.

Exemple : true.

• Rien (NULL) : On a parfois besoin de dire qu'une variable ne contient rien. Rien du
tout. On indique donc qu'elle vaut NULL. Ce n'est pas vraiment un type de
données, mais plutôt l'absence de type.


La figure suivante vous résume ce qu'il faut retenir des différents types
d'informations qu'est capable de stocker PHP dans les variables.

Types de données

11, JPA Web Dynamique 2 PHP


PHP
Maintenant, comment créer une variable et comment afficher ce qu'elle contient ?

Affecter une valeur à une variable


Premières manipulations de variables

Regardons ce code d'exemple :

<?php $age_kpade = 18; ?>

Avec ce code PHP, on vient en fait de créer une variable :

• son nom est age_kpade;

• sa valeur est 18.


Notez qu'on ne peut pas mettre d'espace dans un nom de variable. À la place,
utilisez un underscore «_» (c'est le symbole sous le chiffre 8 sur un clavier AZERTY
français).

Pour le nom, évitez aussi les accents, les cédilles et tout autre symbole : PHP ne les
apprécie pas.

Analysons dans le détail le code qu'on vient de voir.

• D'abord, on écrit le symbole «  dollar  » ($)  : il précède toujours le nom d'une


variable. C'est comme un signe de reconnaissance si vous préférez  : ça permet
de dire à PHP «  J'utilise une variable  ». Vous reconnaîtrez toujours qu'il y a une
variable par la présence du symbole « dollar » ($).

• Ensuite, il y a le signe «  égal  » (=)  : celui-là c'est logique, c'est pour dire que
$age_kpade est égal à…

• À la suite, il y a la valeur de la variable, ici 18.

• Enfin, il y a l'incontournable point-virgule (;) qui permet de terminer l'instruction.


Concrètement, qu'est-ce que le code précédent afficherait ? Rien du tout ! Eh oui,


tant que vous n'utilisez pas echo, rien ne s'affiche. Là, le serveur a juste créé la
variable temporairement en mémoire, mais il n'a rien fait d'autre.

Supposons maintenant que l'on écrive ceci :

<?php

$age_kpade = 18; // La variable est créée et vaut 18

12, JPA Web Dynamique 2 PHP


PHP
$age_kpade = 23; // La variable est modifiée et vaut 23

$age_kpade = 55; // La variable est modifiée et vaut 55

?>

Que se passera-t-il ? La variable $age_kpade va être créée et prendre pour valeur,


dans l'ordre  : 18, 23, puis 55. Tout cela va très vite, l'ordinateur étant très rapide
vous n'aurez pas le temps de dire « ouf » que tout ce code PHP aura été exécuté.

Comme tout à l'heure, rien ne s'affiche. Seulement, quelque part dans la mémoire
de l'ordinateur, une petite zone nommée age_du_civil vient de prendre la valeur 18,
puis 23, puis 55.

2. Les types de données

Utiliser les types de données


Vous vous souvenez des types de données dont nous avions parlé un peu plus
haut  ? Les string, int, float… Voici un exemple de variable pour chacun de ces
types.

Le type string (chaîne de caractères)

Ce type permet de stocker du texte. Pour cela, vous devez entourer votre texte de
guillemets doubles “" ou de guillemets simples ‘' (attention, ce sont des
apostrophes).

Voici deux exemples, l'un avec des guillemets simples et l'autre avec des guillemets
doubles :

<?php

$nom_du_civil = "Agbo";

$nom_du_civil = 'Agbo';

?>

Attention, petit piège : si vous voulez insérer un guillemet simple alors que le texte
est entouré de guillemets simples, il faut l'échapper comme on l'a vu
précédemment en insérant un antislash devant. Il en va de même pour les
guillemets doubles. Voici un exemple pour bien comprendre :

<?php

$variable = "Mon \"nom\" est PPJ";

13, JPA Web Dynamique 2 PHP


PHP
$variable = 'Je m\'appelle PPJ';

?>

En effet, si vous oubliez de mettre un antislash, PHP va croire que c'est la fin de la
chaîne et il ne comprendra pas le texte qui suivra (vous aurez en fait un
messageParse error).

Vous pouvez en revanche insérer sans problème des guillemets simples au milieu
de guillemets doubles et inversement :

<?php

$variable = 'Mon "nom" est PPJ';

$variable = "Je m'appelle PPJ";

?>

La différence est subtile, faites attention. Il y a d'ailleurs une différence plus


importante entre les deux types de guillemets dont nous parlerons plus loin.

Le type int (nombre entier)

On vient de l'utiliser pour nos exemples précédents. Il suffit tout simplement d'écrire
le nombre que vous voulez stocker, sans guillemets.

<?php $age_du_visiteur = 17; ?>

Le type float (nombre décimal)

Vous devez écrire votre nombre avec un point au lieu d'une virgule. C'est la notation
anglaise.

<?php $poids = 57.3; ?>

Le type bool (booléen)

Pour dire si une variable vaut vrai ou faux, vous devez écrire le mot true ou false
sans guillemets autour (ce n'est pas une chaîne de caractères !). Je vous conseille
de bien choisir le nom de votre variable pour que l'on comprenne ce que ça signifie.
Voyez vous-mêmes :

<?php

$je_suis_un_etudiant = true;

$je_suis_bon_en_php = false;

?>

Une variable vide avec NULL

14, JPA Web Dynamique 2 PHP


PHP
Si vous voulez créer une variable qui ne contient rien, vous devez lui passer le mot-
clé NULL (vous pouvez aussi l'écrire en minuscules : null).

<?php $pas_de_valeur = NULL; ?>

Cela sert simplement à indiquer que la variable ne contient rien, tout du moins pour
le moment.

Afficher et concaténer des variables

Nous avons appris à créer des variables et à stocker des informations à l'intérieur.
Mais pour le moment, aucun de nos codes source n'affiche quoi que ce soit.

Afficher le contenu d'une variable

Vous vous souvenez que l'on peut afficher du texte avec echo ? On peut aussi s'en
servir pour afficher la valeur d'une variable !

<?php

$age_kpade = 18;

echo $age_kpade;

?>

Comme vous le voyez, il suffit d'écrire le nom de la variable que vous voulez
afficher.

Quand il s'agit d'une variable on ne met pas de guillemets autour du echo.

En exécutant cette page nous voyons afficher 18 dans notre navigateur.

La concaténation

Ecrire 18 tout seul comme on l'a fait n'est pas très parlant. On aimerait écrire du
texte autour pour dire : « Le visiteur a 17 ans ». La concaténation est justement un
moyen d'assembler du texte et des variables.

Comment faire cela ? trois instructions echo? :

<?php

$age_du_civil = 17;

echo "Le civil a ";

echo $age_du_civil;

echo " ans";

?>

15, JPA Web Dynamique 2 PHP


PHP
Vous pouvez tester, ça fonctionne, comme vous le montre la figure suivante.

Mais il y a plus malin. On peut tout faire sur une ligne. Pour cela, il y a deux
méthodes et c'est justement maintenant que le fait d'utiliser des guillemets simples
ou doubles va faire la différence.

Concaténer avec des guillemets doubles

Avec des guillemets doubles, c'est le plus simple. Vous pouvez écrire le nom de la
variable au milieu du texte et il sera remplacé par sa valeur.

Concrètement, essayez ce code :

<?php

$age_kpade = 18;

echo “Mademoiselle Kpade a $age_kpade ans";

?>

Ça affiche : Mademoiselle Kpade a 18 ans.

En effet, lorsque vous utilisez des guillemets doubles, les variables qui se trouvent à
l'intérieur sont analysées et remplacées par leur vraie valeur. Ça a le mérite d'être
une solution facile à utiliser, mais je vous recommande plutôt celle des guillemets
simples, que nous allons voir dès à présent.

Concaténer avec des guillemets simples

Si vous écrivez le code précédent entre guillemets simples, vous allez avoir une
drôle de surprise :

<?php

$age_kpade = 18;

echo 'Kpade a $age_kpade ans'; // Ne marche pas

?>

Ça affiche : Kpade a $age_kpade ans.

Il va falloir écrire la variable en dehors des guillemets et séparer les éléments les uns
des autres à l'aide d'un point. Regardez :

<?php

16, JPA Web Dynamique 2 PHP


PHP
$age_kpade = 18;

echo 'Kpade a ' . $age_kpade . ' ans';

?>

Cette fois, ça affiche bien comme on voulait : Kpade a 18 ans.

Ça a l'air bien plus compliqué, mais en fait c'est cette méthode qu'utilisent la
plupart des programmeurs expérimentés en PHP. En effet, le code est plus lisible,
on repère bien la variable alors que tout à l'heure elle était comme « noyée » dans le
texte. D'autre part, votre éditeur de texte devrait vous colorer la variable, ce qu'il ne
faisait pas pour le code précédent.

Faire des calculs simples


Ici comme vous vous en doutez, on ne va travailler que sur des variables qui
contiennent des nombres.

Les opérations de base : addition, soustraction…

Les signes à connaître pour faire les quatre opérations de base (vous les trouverez
sur votre pavé numérique, à droite du clavier en principe) sont représentés par le
tableau suivant.

Symbole Signification

+ Addition

- Soustraction

* Multiplication

/ Division

<?php

$nombre = 2 + 4; // $nombre prend la valeur 6

$nombre = 5 - 1; // $nombre prend la valeur 4

$nombre = 3 * 5; // $nombre prend la valeur 15

$nombre = 10 / 2; // $nombre prend la valeur 5

17, JPA Web Dynamique 2 PHP


PHP
$nombre = 3 * 5 + 1; // $nombre prend la valeur 16

$nombre = (1 + 2) * 2; // $nombre prend la valeur 6

?>

Voici des calculs avec plusieurs variables :

<?php

$nombre = 10;

$resultat = ($nombre + 5) * $nombre; // $resultat prend la valeur 150

?>

C'est de la pure logique.

Le modulo

Il est possible de faire un autre type d'opération un peu moins connu : le modulo.
Cela représente le reste de la division entière.

Par exemple, 6 / 3 = 2 et il n'y a pas de reste. En revanche, 7 / 3 = 2 (car le nombre


3 « rentre » 2 fois dans le nombre 7) et il reste 1. Le modulo permet justement de
récupérer ce « reste ». Pour faire un calcul avec un modulo, on utilise le symbole%.

<?php

$nombre = 10 % 5; // $nombre prend la valeur 0 car la division tombe juste

$nombre = 10 % 3; // $nombre prend la valeur 1 car il reste 1

?>

Que retenir?

• Une variable est une petite information qui reste stockée en mémoire le temps de
la génération de la page PHP. Elle a un nom et une valeur.

• Il existe plusieurs types de variables qui permettent de stocker différents types


d'informations : du texte (string), des nombres entiers (int), des nombres décimaux
(float), des booléens pour stocker vrai ou faux (bool), etc.

• En PHP, un nom de variable commence par le symbole dollar : $age par exemple.

• La valeur d'une variable peut être affichée avec l’instruction echo.

• Il est possible de faire des calculs mathématiques entre plusieurs variables  :


addition, soustraction, multiplication…

18, JPA Web Dynamique 2 PHP


PHP

3. Récupération de données en PHP: Méthode GET


Une URL signifie Uniform Resource Locator, et cela sert à représenter une adresse
sur le web. Toutes les adresses que vous voyez en haut de votre navigateur, comme
http://www.frikbook.com, sont des URL.

Envoyer des paramètres dans l'URL


L'URL permettait de transmettre des informations. Comment est-ce que ça
fonctionne exactement ?

Former une URL pour envoyer des paramètres

Imaginons que votre site s’appelle monsite.com et que vous avez une page PHP
intitulée hello.php. Pour accéder à cette page, vous devez aller à l'URL suivante :

http://www.monsite.com/hello.php

Jusque-là, rien de bien nouveau. Ce que nous allons apprendre à faire, c'est
d'envoyer  des informations à la page hello.php. Pour cela, on va ajouter des
informations à la fin de l'URL, comme ceci :

http://www.monsite.com/hello.php?nom=Sagbo&prenom=Comlan

Ce que vous voyez après le point d'interrogation, ce sont des paramètres que l'on


envoie à la page PHP. Celle-ci peut récupérer ces informations dans des variables.

Le point d'interrogation sépare le nom de la page PHP des paramètres. Ensuite, ces
derniers s'enchaînent selon la forme nom=valeur et sont séparés les uns des autres
par le symbole &.

En théorie, on peut écrire autant de paramètres voulus. Il suffit de les séparer par
des &. On peut donc voir une URL de la forme :

page.php?param1=valeur1&param2=valeur2&param3=valeur3&param4=valeur4…

La seule limite est la longueur de l'URL. En général il n'est pas conseillé de


dépasser les 256 caractères.

Créer un lien avec des paramètres


Maintenant que nous savons cela, nous pouvons créer des liens en HTML qui
transmettent des paramètres d'une page vers une autre.

Imaginons que vous avez deux fichiers sur votre site :

19, JPA Web Dynamique 2 PHP


PHP
• index.php (l'accueil) ;

• hello.php.


Nous voulons faire un lien de index.php qui mène à hello.php et qui lui transmet des
informations dans l'URL.

Pour cela, ouvrez index.php (puisque c'est lui qui contiendra le lien) et insérez-y par
exemple le code suivant :

<a href="hello.php?nom=Sagbo&amp;prenom=Comlan">Dis-moi Hello !</a>

Comme vous le voyez, le & dans le code a été remplacé par &amp; dans le lien. Ça
n'a rien à voir avec PHP : simplement, en HTML, on demande à ce que les & soient
écrits &amp; dans le code source. Si vous ne le faites pas, le code ne passera pas
la validation W3C.

Ce lien appelle la page hello.php et lui envoie deux paramètres :

• nom : Sagbo ;

• prenom : Comlan.


Vous avez sûrement deviné ce qu'on essaie de faire ici  : on appelle une page
hello.php qui va dire «  Hello  » à la personne dont le nom et le prénom ont été
envoyés en paramètres.

Récupérer les paramètres en PHP


Nous savons maintenant comment former des liens pour envoyer des paramètres
vers une autre page. Nous avons pour cela ajouté des paramètres à la fin de l'URL.

Intéressons-nous maintenant à la page qui réceptionne les paramètres. Dans notre


exemple, il s'agit de la page hello.php. Celle-ci va automatiquement créer un array
au nom un peu spécial : $_GET. Il s'agit d'un array associatif dont les clés
correspondent aux noms des paramètres envoyés en URL.

Reprenons notre exemple pour mieux voir comment cela fonctionne. Nous avons
fait un lien vers hello.php?nom=Sagbo&prenom=Comlan, cela signifie que nous
aurons accès aux variables suivantes :

Nom Valeur

$_GET['nom'] Sagbo

20, JPA Web Dynamique 2 PHP


PHP

$_GET['prenom'] Comlan

On peut donc récupérer ces informations, les traiter, les afficher, bref faire ce que
l'on veut avec. Pour commencer, essayons tout simplement de les afficher.

Créez un nouveau fichier PHP, appelez-le hello.php et ajoutez-y le code suivant

NB: Pour une vraie page web il faudrait écrire toutes les informations d'en-tête
nécessaires en HTML : le doctype, la balise <head>, etc.

<p>Bonjour <?php echo $_GET['prenom']; ?> !</p>

Ici, nous affichons le prénom qui a été passé dans l'URL. Bien entendu, nous avons
aussi accès au nom. Nous pouvons afficher le nom et le prénom sans problème :

<p>Bonjour <?php echo $_GET['prenom'] . ' ' . $_GET['nom']; ?> !</p>

Comme vous le voyez, nous avions fait une petite concaténation, comme nous
avons appris à le faire. Ce code que vous voyez là n'est pas bien complexe : nous
affichons le contenu de deux cases de l’array $_GET. C'est vraiment très simple et il
n'y a rien de nouveau. Tout ce qu'il faut savoir, c'est qu'on peut retrouver les
paramètres envoyés dans l'URL grâce à un array nommé $_GET.

Ne faites jamais confiance aux données reçues !

Il ne faut JAMAIS faire confiance aux variables qui transitent de page en page,
comme $_GET que nous étudions ici.

Tous les visiteurs peuvent trafiquer les URL

Si vous faites les tests des codes précédents chez vous, vous devriez tomber sur
une URL de la forme  : http://localhost/Formation-Webmaster-DEI-2018/hello.php?
nom=Sagbo&prenom=Comlan

On vous dit bien « Bonjour Comlan Sagbo ! ». Mais si vous êtes un peu bricoleurs,
vous pouvez vous amuser à changer les paramètres directement dans la barre
d'adresse.

On peut facilement modifier les paramètres dans le navigateur

Essayez par exemple de modifier l'adresse pour  : http://localhost/Formation-


Webmaster-DEI-2018/hello.php?nom=Adjile&prenom=Marc

21, JPA Web Dynamique 2 PHP


PHP
Comme vous le voyez, ça marche ! N'importe qui peut facilement modifier les URL
et y mettre ce qu'il veut  : il suffit simplement de changer l'URL dans la barre
d'adresse de votre navigateur.

Cela montre une chose  :  on ne peut pas avoir confiance dans les données qu'on
reçoit. N'importe quel visiteur peut les changer. Dans la page index.php un lien dit
bonjour à Sagbo Comlan, mais la page hello.php ne va pas forcément afficher
«  Bonjour Sagbo Comlan !  » puisque n'importe quel visiteur peut s'amuser à
modifier l'URL.

Faisons des modifications encore plus vicieuses et voyons ce qu'on peut faire pour
éviter les problèmes qui en découlent.

Tester la présence d'un paramètre


Allons plus loin. Qu'est-ce qui empêche le visiteur de supprimer tous les paramètres
de l'URL ? Par exemple, il peut très bien tenter d'accéder à :

http://localhost/Formation-Webmaster-DEI-2018/hello.php

Que va afficher la page hello.php  ? Faites le test  ! Elle va afficher quelque chose
comme :

Bonjour 

Notice: Undefined index: prenom in C:\wamp\www\tests\bonjour.php on line 9

Notice: Undefined index: nom in C:\wamp\www\tests\bonjour.php on line 9

Que s'est-il passé ? On a essayé d'afficher la valeur de $_GET[‘prenom'] et celle de


$_GET['nom']… Mais comme on vient de les supprimer de l'URL, ces variables
n'ont pas été créées et donc elles n'existent pas  ! PHP nous avertit qu'on essaie
d'utiliser des variables qui n'existent pas, d'où les « Undefined index ».

Pour résoudre ce problème, on peut faire appel à une fonction un peu spéciale  :
isset(). Cette fonction teste si une variable existe. Nous allons nous en servir pour
afficher un message spécifique si le nom ou le prénom sont absents.

<?php

if (isset($_GET['prenom']) AND isset($_GET['nom'])) // On a le nom et le prénom

echo 'Bonjour ' . $_GET['prenom'] . ' ' . $_GET['nom'] . ' !';

else // Il manque des paramètres, on avertit le visiteur

22, JPA Web Dynamique 2 PHP


PHP
{

echo 'Il faut renseigner un nom et un prénom !';

} ?>

Que fait ce code ? Il teste si les variables $_GET[‘prenom'] et $_GET[‘nom'] existent.


Si elles existent, on dit bonjour au visiteur. S'il nous manque une des variables (ou
les deux), on affiche un message d'erreur  : «  Il faut renseigner un nom et un
prénom ! ».

Essayez maintenant d'accéder à la page hello.php sans les paramètres, vous allez
voir qu'on gère bien le cas où le visiteur aurait retiré les paramètres de l'URL.

Souvenez vous qu’il ne faut jamais faire confiance à l'utilisateur. Tôt ou tard vous
tomberez sur un utilisateur malintentionné qui essaiera de trafiquer l'URL pour
mettre n'importe quoi dans les paramètres. Il faut que votre site soit prêt à gérer le
cas.

Dans notre exemple, si on ne gérait pas le cas, ça ne faisait rien de bien grave (ça
affichait juste des messages d'erreur). Mais lorsque votre site web deviendra plus
complexe, cela pourrait avoir des conséquences plus ennuyeuses.

Nous n'avons pas vu tous les risques liés aux données envoyées par l'utilisateur.
Cette première approche devrait déjà vous avoir sensibilisés au problème.

Que retenir?

• Une URL représente l'adresse d'une page web (commençant généralement par
http://).

• Lorsqu'on fait un lien vers une page, il est possible d'ajouter des paramètres sous
la forme hello.php?nom=Sagbo&prenom=Comlan qui seront transmis à la page.

• La page hello.php dans l'exemple précédent recevra ces paramètres dans un


array nommé $_GET :

✴ $_GET[‘nom'] aura pour valeur « Sagbo » ;

✴ $_GET[‘prenom'] aura pour valeur « Comlan ».

• Cette technique est très pratique pour transmettre des valeurs à une page, mais il
faut prendre garde au fait que le visiteur peut les modifier très facilement. Il ne faut
donc pas faire aveuglément confiance à ces informations, et tester prudemment
leur valeur avant de les utiliser.

• La fonction isset() permet de vérifier si une variable est définie ou non.

23, JPA Web Dynamique 2 PHP


PHP
• Le transtypage (non défini explicitement dans cette partie) est une technique qui
permet de convertir une variable dans le type de données souhaité. Cela permet
de s'assurer par exemple qu'une variable est bien un int (nombre entier).


4. Récupération de données en PHP : Méthode


POST
Le HTML permet de créer le formulaire, tandis que le PHP permet de traiter les
informations que le visiteur a entrées dans le formulaire.

Créer la base du formulaire


En HTML, pour insérer un formulaire, on se sert de la balise <form>. On l'utilise de
la manière suivante :

<form method="post" action="cible.php">

<p>

On insèrera ici les éléments de notre formulaire.

</p>

</form>

On écrira le contenu de notre formulaire entre les balises<form> et </form>. Il y a


deux attributs très importants à connaître pour la balise <form>  : la méthode
(method) et la cible (action). Il est impératif que vous compreniez à quoi ils servent.

La méthode

Il faut savoir qu'il existe plusieurs moyens d'envoyer les données du formulaire
(plusieurs « méthodes »). Vous pouvez en employer deux.

• get : les données transiteront par l'URL comme on l'a appris précédemment. On
pourra les récupérer grâce à l’array $_GET. Cette méthode est assez peu utilisée
car on ne peut pas envoyer beaucoup d'informations dans l’URL.

• post : les données ne transiteront pas par l'URL, l'utilisateur ne les verra donc pas
passer dans la barre d'adresse. Cette méthode permet d'envoyer autant de
données que l'on veut, ce qui fait qu'on la privilégie le plus souvent. Néanmoins,
les données ne sont pas plus sécurisées qu'avec la méthode GET et il faudra
toujours vérifier si tous les paramètres sont bien présents et valides, comme on l'a
fait dans la partie précédente. On ne doit pas plus faire confiance aux formulaires
qu'aux URL.

24, JPA Web Dynamique 2 PHP


PHP
C'est à vous de choisir par quelle méthode vous souhaitez que les données du
formulaire soient envoyées. Si vous hésitez, sachez que dans 99  % des cas la
méthode que l'on utilise est post, vous écrirez donc method=“post" comme défini
plus haut.

La cible

L’attribut action sert à définir la page appelée par le formulaire. C'est cette page qui
recevra les données du formulaire et qui sera chargée de les traiter.

Imaginons le schéma de la figure suivante.

Appel de la page cible par le formulaire

Dans cet exemple, le formulaire se trouve dans la page formulaire.php. Cette page
ne fait aucun traitement particulier, mais une fois le formulaire envoyé (lorsqu'on a
cliqué sur le bouton «  Valider  »), le visiteur est redirigé vers la page cible.php qui
reçoit les données du formulaire, comme vous le montre la figure suivante.

25, JPA Web Dynamique 2 PHP


PHP

Fonctionnement d'un formulaire


Le nom de la page cible est défini grâce à l’attribut action. La page cible ne doit pas
forcément s’appeler cible.php.

Remarquez qu'en théorie rien n'empêche le formulaire de s'appeler lui-même. Il
suffirait d’écrire action="formulaire.php". Dans ce cas, la page du formulaire doit
être capable aussi bien d'afficher le formulaire que de traiter les données.

Retenez donc bien que vous travaillez normalement sur deux pages différentes : la
page qui contient le formulaire (formulaire.php dans notre exemple), et celle qui
reçoit les données du formulaire pour les traiter (cible.php).

Les éléments du formulaire


Dans un formulaire, vous le savez peut-être déjà, on peut insérer beaucoup
d'éléments différents : zones de texte, boutons, cases à cocher, etc.

Comment se servir de chacun d'eux dans la page cible.php qui fera le traitement?
C'est vraiment très simple : au lieu de recevoir un array $_GET, vous allez recevoir
un array $_POST contenant les données du formulaire !

Les petites zones de texte

Une zone de texte ressemble à la figure suivante.

En HTML, on l'insère tout simplement avec la balise :

<input type="text" />

Pour les mots de passe, vous pouvez utiliser type="password", ce qui aura pour
effet de cacher le texte entré par le visiteur. À part ce détail, le fonctionnement reste
le même.

Il y a deux attributs à connaître que l'on peut ajouter à cette balise.

• name (obligatoire) : c'est le nom de la zone de texte. Choisissez-le bien, car c'est
lui qui va produire une variable. Par exemple :

<input type="text" name="pseudo" />.

• value (facultatif) : c'est ce que contient la zone de texte au départ. Par défaut, la
zone de texte est vide mais il peut être pratique de pré-remplir le champ.
Exemple :

<input type="text" name="pseudo" value="PPJ" />.

26, JPA Web Dynamique 2 PHP


PHP
Le fonctionnement est tout simple et a un air de déjà vu. Le texte que le visiteur
aura entré sera disponible dans cible.php sous la forme d'une variable appelée
$_POST['pseudo'].

Pour l'exemple, créons un formulaire qui demande le prénom du visiteur puis qui
l'affiche sur la page cible.php. On va donc distinguer deux codes source : celui de
la page du formulaire et celui de la page cible.

Voici le code de la page formulaire.php :

<p>

Cette page ne contient que du HTML.<br />

Veuillez taper votre prénom :

</p>

<form action="cible.php" method="post">

<p>

<input type="text" name="prenom" />

<input type="submit" value="Valider" />

</p>

</form>

Rappel de HTML : le champ <input type="submit" /> permet de créer le bouton de


validation du formulaire qui commande l'envoi des données, et donc la redirection
du visiteur vers la page cible.

Maintenant, je vous propose de créer la page cible.php. Cette page va recevoir le


prénom dans une variable nommée $_POST['prenom'].

<p>Bonjour !</p>

<p>Je connais votre prénom. Vous vous appelez <?php echo $_POST['prenom']; ?>
!</p>

<p>Si vous voulez changer de prénom, <a href="formulaire.php">clique ici</a>


pour revenir à la page formulaire.php.</p>

Le code web suivant ouvre la page formulaire.php pour que vous puissiez tester.

Dans cible.php on a affiché une variable $_POST[‘prenom'] qui contient ce que


l'utilisateur a entré dans le formulaire.

27, JPA Web Dynamique 2 PHP


PHP
Les grandes zones de texte

La grande zone de texte (on l'appelle aussi « zone de saisie multiligne ») ressemble
à la figure suivante.

Une grande zone de texte

On peut y écrire autant de lignes que l'on veut. C'est plus adapté si le visiteur doit
écrire un long message, par exemple.

On va utiliser le code HTML suivant pour insérer cette zone de texte :

<textarea name="message" rows="8" cols="45">

Votre message ici.

</textarea>

Là encore, on a un attribut name qui va définir le nom de la variable qui sera créée
dans cible.php. Dans notre cas, ce sera la variable $_POST['message'].

Vous remarquerez qu'il n'y a pas d’attribut value. En fait, le texte par défaut est ici
écrit entre le <textarea> et le </textarea>. Si vous ne voulez rien mettre par défaut,
alors n'écrivez rien entre <textarea> et </textarea>.

Les attributs rows et cols permettent de définir la taille de la zone de texte en


hauteur et en largeur respectivement.

La liste déroulante

La figure suivante est une liste déroulante.

28, JPA Web Dynamique 2 PHP


PHP

Une liste déroulante

On utilise le code HTML suivant pour construire une liste déroulante :

<select name="choix">

<option value="militaire">Militaire</option>

<option value=“gendarme">Gendarme</option>

<option value="policier">Policier</option>

<option value="speciale">Force spéciale</option>

</select>

On utilise la balise <select> à laquelle on donne un nom (ici  : «  choix  »). On écrit
ensuite les différentes options disponibles… puis on referme la balise avec </
select>.

Ici, une variable $_POST[‘choix'] sera créée, et elle contiendra le choix qu'a fait
l'utilisateur. S'il a choisi « Policier », la variable $_POST[‘choix'] sera égale au value
correspondant, c’est-à-dire policier.

Vous pouvez aussi définir le choix par défaut de la liste. Normalement c'est le
premier, mais si vous rajoutez l’attribut selected=“selected" à une balise <option>,
alors ce sera le choix par défaut. On pourrait par exemple écrire :

<option value="policier" selected="selected">Policier</option>

Les cases à cocher

La figure suivante représente une série de cases à cocher.

29, JPA Web Dynamique 2 PHP


PHP
Case à cocher

On utilisera le code suivant pour afficher des cases à cocher :

<input type="checkbox" name="case" id="case" /> <label for="case">Ma case à


cocher</label>

L'utilisation de la balise <label> n'est pas obligatoire mais recommandé fortement.


Elle permet d'associer le libellé à la case à cocher qui a le même id que son attribut
for, ce qui permet de cliquer sur le libellé pour cocher la case. On y gagne donc en
ergonomie.

Là encore, on donne un nom à la case à cocher via l’attribut name (ici : « case »). Ce
nom va générer une variable dans la page cible, par exemple $_POST[‘case'].

• Si la case a été cochée, alors $_POST['case'] aura pour valeur « on ».

• Si elle n'a pas été cochée, alors $_POST[‘case'] n'existera pas. Vous pouvez faire
un test avec isset($_POST[‘case']) pour vérifier si la case a été cochée ou non.


Si vous voulez que la case soit cochée par défaut, il faudra lui rajouter l’attribut
checked="checked". Par exemple :

<input type="checkbox" name="case" checked="checked" />

Les boutons d'option

Les boutons d'option fonctionnent par groupes de deux minimum. Vous trouverez
un exemple sur la figure suivante.

Bouttons d'option

Le code correspondant à cet exemple est le suivant :

<p>Etes-vous civil?</p>

<input type="radio" name="status" id="oui" /> <label for="oui">Oui</label>

<input type="radio" name="status" id="non" /> <label for=“non">Non</label>

Comme vous pouvez le voir, les deux boutons d'option ont le même nom
(« status »). C'est très important, car ils fonctionnent par groupes : tous les boutons

30, JPA Web Dynamique 2 PHP


PHP
d'option d'un même groupe doivent avoir le même nom. Cela permet au navigateur
de savoir lesquels désactiver quand on active un autre bouton du groupe. Il serait
bête en effet de pouvoir sélectionner à la fois « Oui » et « Non ».

Pour pré-cocher l'un de ces boutons, faites comme pour les cases à cocher  :
rajoutez un attribut checked="checked".

Dans la page cible, une variable $_POST[‘status'] sera créée. Elle aura la valeur du
bouton d'option choisi par le visiteur, issue de l’attribut value. Si on est civil, alors
on aura $_POST['status'] = 'oui'.

Il faut bien penser à renseigner l’attribut value du bouton d'option car c'est lui qui va
déterminer la valeur de la variable.

Les champs cachés

Les champs cachés constituent un type de champ à part. En quoi ça consiste  ?


C'est un code dans votre formulaire qui n'apparaîtra pas aux yeux du visiteur, mais
qui va quand même créer une variable avec une valeur. On peut s'en servir pour
transmettre des informations fixes.

Supposons que vous ayez besoin de «  retenir  » que le pseudo du visiteur est
« PPJ ». Vous allez taper ce code :

<input type="hidden" name="pseudo" value="PPJ" />

À l'écran, sur la page web on ne verra rien. Mais dans la page cible, une variable
$_POST[‘pseudo'] sera créée, et elle aura la valeur « PPJ » !

C'est apparemment inutile, mais vous verrez que vous en aurez parfois besoin.

On croit par erreur que, parce que ces champs sont cachés, le visiteur ne peut pas
les voir. C'est faux ! En effet, n'importe quel visiteur peut afficher le code source de
la page et voir qu'il y a des champs cachés en lisant le code HTML. Mieux, il peut
même modifier la valeur du champ caché s'il a les outils appropriés.

Que faut-il retenir  ? Ce n'est pas parce que le champ est caché que vous devez
considérer qu'il est inviolable. N'importe quel visiteur (un peu malin) peut le lire,
modifier sa valeur et même le supprimer.  Ne faites pas confiance aux données
envoyées par le visiteur  !  Vous vous souvenez de cette règle dans la partie
précédente ? Elle est plus que jamais d'actualité.

Ne faites jamais confiance aux données reçues : la faille XSS

Souvenez vous des mises en garde faites dans la partie précédente  ? Elles ne
concernaient pas que les paramètres qui transitent par l'URL : tout cela vaut aussi
pour les formulaires !

Pourquoi les formulaires ne sont pas sûrs

31, JPA Web Dynamique 2 PHP


PHP
Tout ce que nous avons appris dans le chapitre précédent sur les URL reste valable
ici. Toutes les informations qui proviennent de l'utilisateur, à savoir les données de
$_GET et de $_POST, doivent être traitées avec la plus grande méfiance.

Vous ne pouvez pas supposer que vous allez recevoir ce que vous attendiez.

Cette règle est très simple. Imaginez que vous demandez à vos visiteurs de rentrer
dans un champ leur date de naissance  au format JJ/MM/AAAA. Combien vont
respecter cette mise en forme  ? Combien vont se tromper par erreur  ? Alors que
vous attendiez quelque chose comme «  04/10/1987  », vous allez tomber sur une
personne qui va écrire : « Je suis né le 4 octobre 1987 ». C'est un exemple un peu
extrême mais ça peut vous arriver, soyez-en sûrs. Par conséquent, quand vous
ferez le traitement de la date en PHP, il faudra bien vérifier qu'elle respecte le format
que vous avez indiqué.

Avec les formulaires, vous ne pouvez pas non plus supposer qu'on va vous envoyer
tous les champs que vous attendiez. Un visiteur peut très bien s'amuser à
supprimer un champ de texte, et dans ce cas votre page cible.php ne recevra
jamais le texte qu'elle attendait ! Il faudra impérativement qu'elle vérifie que toutes
les données qu'elle attendait sont bien là avant d'effectuer la moindre opération.

Puisque la page du formulaire se trouve sur mon site, comment peut faire un visiteur
pour modifier ma page web ? Il peut voir les sources mais pas les modifier !

En effet, vos visiteurs ne peuvent pas modifier vos pages web sur le serveur… Mais
ils peuvent les reprendre et les modifier ailleurs.

Souvenez-vous du schéma de la figure suivante :

32, JPA Web Dynamique 2 PHP


PHP
La page formulaire.php contient le formulaire et cible.php traite les données qu'on
lui a envoyées. Autant le code PHP n'est jamais visible par vos visiteurs, autant le
code HTML du formulaire, lui, peut être vu par tout le monde.

À partir de là, qu'est-ce qui empêche quelqu'un de créer une copie légèrement
modifiée de votre formulaire et de la stocker sur son serveur, à l'image de la figure
suivante ?

Formulaire modifié

Sur le schéma de la figure suivante, le «  méchant  » a pris le code HTML de votre


formulaire, l'a modifié et l'a enregistré sur son serveur (ou même sur son ordinateur).
L’attribut action a été modifié pour indiquer l'adresse absolue (donc complète) de
votre page cible :

33, JPA Web Dynamique 2 PHP


PHP
<form method="post" action="http://www.monsite.com/cible.php">

Le méchant peut maintenant modifier votre formulaire, ajouter des champs, en


supprimer, bref faire ce qu'il veut avec ! Votre page cible.php n'y verra que du feu
car il est impossible de savoir avec certitude de quel formulaire vient le visiteur.

S'il y a une chose à retenir ici, c'est que  les formulaires sont modifiables par tous
les visiteurs contrairement à ce qu'on pourrait penser. Par conséquent, votre page
cible.php devra être aussi vigilante que nous l'avons été dans la partie précédente
et ne pas faire confiance aux données de l'utilisateur (les programmeurs ont
d'ailleurs une maxime : « Never trust user input », ce qui signifie « Ne faites jamais
confiance aux données de l'utilisateur »).

Il y a un moyen encore plus simple de modifier le formulaire de votre site sans avoir
accès à votre serveur. Internet Explorer 8 et Google Chrome embarquent des
«  outils pour les développeurs  » qui permettent de modifier le code HTML de la
page que l'on visite en temps réel. Firefox peut faire de même avec son célèbre
plugin Firebug.

La faille XSS : attention au code HTML que vous recevez !

La faille XSS (pour  cross-site scripting) est vieille et on la trouve encore sur de
nombreux sites web, même professionnels  ! C'est une technique qui consiste à
injecter du code HTML contenant du JavaScript dans vos pages pour le faire
exécuter à vos visiteurs.

Reprenons la page qui affiche le prénom qu'on lui envoie. Elle contient notamment
le code suivant :

<p>Je vous connais. Vous vous appelez <?php echo $_POST['prenom']; ?> !</p>

Si le visiteur décide d'écrire du code HTML à la place de son prénom, cela


fonctionnera très bien  ! Par exemple, imaginons qu'il écrive dans le champ
« Prénom » le code :<strong>Badaboum</strong>. Le code source HTML qui sera
généré par PHP sera le suivant :

<pJe vous connais. Vous vous appelez <strong>Badaboum</strong> !</p>

Outre le fait qu'il peut insérer n'importe quel code HTML (et rendre votre page
invalide), ce qui n'est pas le plus grave, il peut aussi ouvrir des balises de
type<script>pour faire exécuter du code JavaScript au visiteur qui visualisera la
page !

<p>Je vous connais. Vous êtes <script type=“text javascript">alert('Badaboum')</


script> !</p>

34, JPA Web Dynamique 2 PHP


PHP
Tous les visiteurs qui arriveront sur cette page verront une boîte de dialogue
JavaScript s'afficher. Plutôt gênant. Voyez la figure suivante.

Exécution de script JavaScript par la faille XSS

Résoudre le problème est facile  : il faut protéger le code HTML en l'échappant,


c'est-à-dire en affichant les balises (ou en les retirant) plutôt que de les faire
exécuter par le navigateur, comme sur la figure suivante.

Eviter la faille XSS en échappant le HTML

Pour échapper le code HTML, il suffit d'utiliser la fonction htmlspecialchars qui va


transformer les chevrons des balises HTML <> en &lt; e t&gt; respectivement. Cela
provoquera l'affichage de la balise plutôt que son exécution.

<p>Je vous connais. Vous vous appelez <?php echo


htmlspecialchars($_POST['prenom']); ?> !</p>

Le code HTML qui en résultera sera propre et protégé car les balises HTML
insérées par le visiteur auront été échappées :

<p>Je vous connais. Vous vous appelez &lt;strong&gt;Badaboum&lt;/strong&gt; !</


p>

Il faut penser à utiliser cette fonction sur tous les textes envoyés par l'utilisateur qui
sont susceptibles d'être affichés sur une page web. Sur un forum par exemple, il
faut penser à échapper les messages postés par vos membres, mais aussi leurs
pseudos (ils peuvent s'amuser à y mettre du HTML  !) ainsi que leurs signatures.
Bref, tout ce qui est affiché et qui vient à la base d'un visiteur, vous devez penser à
le protéger avec htmlspecialchars.

Si vous préférez retirer les balises HTML que le visiteur a tenté d'envoyer plutôt que
de les afficher, utilisez la fonction strip_tags.

Vous pouvez ajouter d'autres champs plus classiques au formulaire (champ de


texte, cases à cocher). Vous pouvez aussi proposer d'envoyer plusieurs fichiers en

35, JPA Web Dynamique 2 PHP


PHP
même temps.

Là, on va se contenter d'un seul champ (envoi de fichier) pour faire simple.

Que retenir?

• Les formulaires sont le moyen le plus pratique pour le visiteur de transmettre des
informations à votre site. PHP est capable de récupérer les données saisies par
vos visiteurs et de les traiter.

• Les données envoyées via un formulaire se retrouvent dans un array $_POST.

• De la même manière que pour les URL, il ne faut pas donner sa confiance absolue
aux données que vous envoie l'utilisateur. Il pourrait très bien ne pas remplir tous
les champs voire trafiquer le code HTML de la page pour supprimer ou ajouter
des champs. Traitez les données avec vigilance.

• Que ce soit pour des données issues de l'URL ($_GET) ou d'un formulaire
($_POST), il faut s'assurer qu'aucun texte qui vous est envoyé ne contient du
HTML si celui-ci est destiné à être affiché sur une page. Sinon, vous ouvrez une
faille appelée XSS qui peut être néfaste pour la sécurité de votre site.

• Pour éviter la faille XSS, il suffit d'appliquer la fonction htmlspecialchars sur tous
les textes envoyés par vos visiteurs que vous afficherez.

5. Exercices d’applications
Exercice 1:

Donner la valeur des variables $x, $y, $z à la fin du script :

$x="7 personnes";

$y=(integer) $x;

$x="9E3";

$z=(double) $x;

Solution : $x vaut : 9E3 $y vaut : 7 $z vaut : 9000

Exercice 2:

1. Créer un couple de page avec un formulaire d’inscription qui demande à


l’utilisateur son nom, prénom, login, mot de passe et email. Une fois les données
envoyées, il reçoit un mail pour son inscription avec un récapitulatif.

2. Créer un autre couple de page de connexion qui se sert d’un tableau associatif
login => mot de passe (à défaut de base de données) pour authentifier l’utilisateur
par son login et mot de passe.

36, JPA Web Dynamique 2 PHP


PHP

Bases de données MySQL


I. Notions générales sur les SGBD
Un SGBD peut apparaître comme un outil informatique permettant la sauvegarde,
l'interrogation, la recherche et la mise en forme de données stockées sur mémoires
secondaires. Ce sont là les fonctions premières, complétées par des fonctions
souvent plus complexes, destinées par exemple à assurer le partage des données,
mais aussi à protéger les données contre tout incident et à obtenir des
performances acceptables. Les SGBD se distinguent clairement des systèmes de
fichiers par le fait qu'ils permettent la description des données (définition des types
par des noms, des formats, des caractéristiques et parfois des opérations) de
manière séparée de leur utilisation (mise à jour et recherche). Ils permettent aussi de
retrouver les caractéristiques d'un type de données à partir de son nom (par
exemple, comment est décrit un produit). Le système de fichiers est un composant
de plus bas niveau ne prenant pas en compte la structure des données. La
tendance est aujourd'hui à intégrer le système de fichiers dans le SGBD, construit
au-dessus.

II. Création de bases de données et de tables 2

Création
Nous allons donc créer une base de données, que nous appellerons PigierBenin. La
commande SQL pour créer une base de données est la suivante :

CREATE DATABASE nom_base;

Il faut également définir l'encodage utilisé (l'UTF-8 dans notre cas). Voici donc la
commande complète à taper pour créer votre base :

CREATE DATABASE PigierBenin CHARACTER SET 'utf8';

Lorsque nous créerons nos tables dans la base de données, automatiquement elles
seront encodées également en UTF-8.

2 Les opérations dans cette section peuvent se faire directement dans PhpMyAdmin

37, JPA Web Dynamique 2 PHP


PHP

Suppression
Si vous avez envie d'essayer cette commande, faites-le maintenant, tant qu'il n'y a
rien dans votre base de données. Soyez très prudents, car vous effacez tous les
fichiers créés par MySQL qui servent à stocker les informations de votre base.

DROP DATABASE PigierBenin;

Si vous essayez cette commande alors que la base de données PigierBenin n'existe


pas, MySQL vous affichera une erreur :

mysql> DROP DATABASE PigierBenin;

ERROR 1008 (HY000) : Can't drop database 'PigierBenin'; database doesn't exist

mysql>

Pour éviter ce message d'erreur, si vous n'êtes pas sûrs que la base de données
existe, vous pouvez utiliser l'option IF EXISTS, de la manière suivante :

DROP DATABASE IF EXISTS PigierBenin;

Si la base de données existe, vous devriez alors avoir un message du type :

Query OK, 0 rows affected (0.00 sec)

Si elle n'existe pas, vous aurez :

Query OK, 0 rows affected, 1 warning (0.00 sec)

Pour afficher les warnings de MySQL, il faut utiliser la commande

SHOW WARNINGS;

Cette commande affiche un tableau :

Level Code Message

Note 1008 Can't drop database ‘PigierBenin'; database doesn't


exist

Utilisation d'une base de données


Pour pouvoir agir sur une base, vous devez d'abord la sélectionner. Une fois de
plus, la commande est très simple :

USE PigierBenin

38, JPA Web Dynamique 2 PHP


PHP
C'est tout ! À partir de maintenant, toutes les actions effectuées le seront sur la
base de données PigierBenin (création et modification de tables par exemple).

Notez que vous pouvez spécifier la base de données sur laquelle vous allez
travailler lors de la connexion à MySQL. Il suffit d'ajouter le nom de la base à la fin
de la commande de connexion :

mysql -u sdz -p PigierBenin

Création de table
Nous allons créer, étape par étape, une table  Etudiant, qui servira à stocker les
fonctionnaires présents dans notre direction. 

Pour commencer, il faudra définir de quelles colonnes (et leur type) la table sera
composée. Ne négligez pas cette étape, c'est la plus importante. Une base de
données mal conçue est un cauchemar à utiliser.

Ensuite, petit passage obligé par de la théorie : vous apprendrez ce qu'est une clé
primaire et à quoi ça sert, et découvrirez cette fonctionnalité exclusive de MySQL
que sont les moteurs de table.

Enfin, la table Etudiant sera créée, et la requête de création des tables décortiquée.
Et dans la foulée, nous verrons également comment supprimer une table.

Définition des colonnes

Type de colonne

Avant de choisir le type des colonnes, il faut choisir les colonnes que l'on va définir.
On va donc créer une table  Etudiant. Qu'est-ce qui caractérise un Etudiant ? Son
nom, son prénom, son sexe, son matricule, son département (filière), sa date de
naissance et quelques commentaires le concernant.

Examinons donc les colonnes afin d'en choisir le type au mieux.

• Nom : on a Kpade, Agnide, Adjovi. On peut donc prendre le nom pour une chaine
de caractère. Ce sera donc un champ de type chaine de caractère.

On choisira donc un VARCHAR. Mais quelle longueur lui donner ? Beaucoup de
noms ne contiennent qu'un mot, mais “Abdoulaye-Walis", par exemple, en
contient deux, et 15 caractères. Histoire de ne prendre aucun risque, autant
autoriser jusqu'à 40 caractères pour l’espèce.

• Prenom : idem pour nom. Un VARCHAR de 20 caractères suffit.

• Sexe  : ici,  deux choix possibles (mâle, femelle).  Il serait possible d'utiliser un
ENUM, cependant, ENUM reste un type non standard. Pour cette raison, nous

39, JPA Web Dynamique 2 PHP


PHP
utiliserons plutôt une colonne CHAR(1), contenant soit'M'  (mâle),
soit'F' (femelle).

• Matricule : Ici nous préférons un entier int.

• Lieu_de_stage : idem pour nom. Un VARCHAR de 40 caractères suffit.

• Date de naissance  : pas besoin de réfléchir beaucoup ici. Il s'agit d'une date,
donc soit un DATETIME, soit une DATE.

• Commentaires : Un champs de texte.

NULL or NOT NULL ?

Il faut maintenant déterminer si l'on autorise les colonnes à ne pas stocker de valeur
(ce qui est donc représenté par NULL).

• Nom, Prénom, Sexe, Matricule : un Etudiant doit avoir un nom, prénom, sexe et
un matricule au minimum. On n'autorisera donc pas ces colonnes à être NULL.

• Lieu_de_stage : le Lieu de stage de certains étudiants peut-être parfois difficile à


déterminer. Il n'est donc pas impossible qu'on doive attendre la fin de année pour
savoir si "Fernando" ira en stage à Friklabel sous réserve de la réponse favorable
à la demande chez Friklabel. Par conséquent, la colonne  Lieu_de_stage  peut
contenir NULL.

• Date de naissance : Notre Etudiant est constitué des individus dont on connaît la
provenance (dossier agent chez le Chef Etudiant), les parents, la date de
naissance. Cette colonne ne peut donc pas être NULL.

Récapitulatif

Un petit tableau pour récapituler tout ça :

Caractéristique Nom de la colonne Type NULL?

Nom nom VARCHAR(40) Non

Prénom prenom VARCHAR(30) Non

Sexe sexe CHAR(1) Non

Matricule matricule VARCHAR(30) Non

Lieu de stage Lieu_de_stage VARCHAR(30) Oui

40, JPA Web Dynamique 2 PHP


PHP

Date de naissance date_naissance DATETIME Non

Commentaires commentaire TEXT Oui

Ne pas oublier de donner une taille aux colonnes qui en nécessitent une, comme les
VARCHAR(x), les CHAR(x), les DECIMAL(n, d), …

NB: Nous pouvons aussi choisir le type TEXT, comme pour le champs
commentaires que nous avions ajouté exprès car nous jugeons que les
commentaires peuvent dépasser 255 caractères.

Introduction aux clés primaires


On va donc définir sept colonnes :  nom, prenom, sexe, matricule, Lieu_de_stage,
date_naissance et commentaires. Ces colonnes permettront de caractériser nos
fonctionnaires. Mais que se passe-t-il si deux agents ont le même nom, même
prénom, même sexe, mme matricule, même Lieu_de_stage, sont nés exactement le
même jour, et ont exactement les mêmes commentaires ? Comment les
différencier ? On va ajouter une colonne à notre table.

Identité

Imaginez que quelqu'un ait le même nom de famille que vous, le même prénom,
soit né dans la même ville et ait la même taille. En dehors de la photo et de la
signature, quelle sera la différence entre vos deux cartes d'identité ? Son numéro
matricule !

Suivant le même principe, on va donner à chaque agent un numéro d'identité. La
colonne qu'on ajoutera s’appellera donc  id, et il s'agira d’un INT, toujours positif
donc UNSIGNED. Selon la taille de notre Etudiant, il peut être plus intéressant
d'utiliser un SMALLINT, voire un MEDIUMINT. Comme il est peu probable que l'on
dépasse les 65000 agents, on utilisera SMALLINT. Attention, il faut bien considérer
tous les agents qui entreront un jour dans la base, pas uniquement le nombre
d'agents présents en même temps dans notre direction. En effet, si l'on supprime
pour une raison ou une autre un agent de la base, il n'est pas question de réutiliser
son numéro d'identité.

Ce champ ne pourra bien sûr pas être NULL, sinon il perdrait toute son utilité.

Clé primaire

La clé primaire d'une table est une  contrainte d'unicité, composée d'une ou
plusieurs colonnes. La clé primaire d'une ligne  permet d'identifier de manière
unique cette ligne dans la table. Si l'on parle de la ligne dont la clé primaire vaut x,

41, JPA Web Dynamique 2 PHP


PHP
il ne doit y avoir aucun doute quant à la ligne dont on parle. Lorsqu'une table
possède une clé primaire (et il est extrêmement conseillé de définir une clé primaire
pour chaque table créée), celle-ci doit être définie. 

Cette définition correspond exactement au numéro d'identité dont nous venons de
parler. Nous définirons donc  id  comme la clé primaire de la table  Etudiant, en
utilisant les mots-clés PRIMARY KEY(id). 

Lorsque vous insérerez une nouvelle ligne dans la table, MySQL vérifiera que vous
insérez bien un  id, et que cet  id  n'existe pas encore dans la table. Si vous ne
respectez pas ces deux contraintes, MySQL n’insérera pas la ligne et vous renverra
une erreur.

Par exemple, dans le cas où vous essayez d'insérer un  id  qui existe déjà, vous
obtiendrez l'erreur suivante :

ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

Auto-incrémentation

Il faut donc, pour chaque agent, décider d'une valeur pour id. Le plus simple, et le
plus logique, est de donner le numéro 1 au premier individu enregistré, puis le
numéro 2 au second, etc.

Mais si vous ne vous souvenez pas quel numéro vous avez utilisé en dernier, pour
insérer un nouvel agent il faudra récupérer cette information dans la base, ensuite
seulement vous pourrez ajouter une ligne en lui donnant comme  id  le
dernier id utilisé + 1.

C'est bien sûr faisable, mais c'est fastidieux… Heureusement, il est possible de
demander à MySQL de faire tout ça pour nous ! 

Comment ? En utilisant l'auto-incrémentation des colonnes. Incrémenter veut dire
"ajouter une valeur fixée". Donc, si l'on déclare qu'une colonne doit s'auto-
incrémenter (grâce au mot-clé AUTO_INCREMENT), plus besoin de chercher quelle
valeur on va mettre dedans lors de la prochaine insertion. MySQL va chercher ça
tout seul comme un grand en prenant la dernière valeur insérée et en l'incrémentant
de 1.

Les moteurs de tables


Les moteurs de tables sont une spécificité de MySQL. Ce sont des moteurs de
stockage. Cela permet de gérer différemment les tables selon l'utilité qu'on en a.
Nous n’allons pas détailler tous les moteurs de tables existant. Si vous voulez plus
d'informations, vous pouvez visiter la documentation officielle sur internet.

Les deux moteurs les plus connus sont MyISAM et InnoDB.

42, JPA Web Dynamique 2 PHP


PHP
MyISAM

C'est le moteur par défaut. Les commandes d'insertion et sélection de données


sont particulièrement rapides sur les tables utilisant ce moteur. Cependant, il ne
gère pas certaines fonctionnalités importantes comme les clés étrangères, qui
permettent de vérifier l'intégrité d'une référence d'une table à une autre table ou les
transactions, qui permettent de réaliser des séries de modifications "en bloc" ou au
contraire d'annuler ces modifications.

InnoDB

Plus lent et plus gourmand en ressources que MyISAM, ce moteur gère les clés
étrangères et les transactions. Étant donné que nous serons appeler à nous servir
des clés étrangères un jour, c'est celui-là que nous allons utiliser.

De plus, en cas de crash du serveur, il possède un système de récupération
automatique des données.

Préciser un moteur lors de la création de la table

Pour qu'une table utilise le moteur de notre choix, il suffit d'ajouter ceci à la fin de la
commande de création :

ENGINE = moteur;

En remplaçant bien sûr "moteur" par le nom du moteur que nous voulons utiliser, ici
InnoDB :

ENGINE = INNODB;

Syntaxe de CREATE TABLE

Avant de voir la syntaxe permettant de créer une table, résumons un peu. Nous
voulons donc créer une table Etudiant avec huit colonnes telles que décrites dans le
tableau suivant.

Caractér Nom du
Type NULL? Divers
istique champ

Numéro id INT Non Clé primaire + auto-


d'identité incrément
+UNSIGNED

43, JPA Web Dynamique 2 PHP


PHP

Nom nom VARCHAR( Non -


40)

Prénom prenom VARCHAR( Non -


30)

Matricule matricule VARCHAR( Non -


30)

Sexe sexe CHAR(1) Non -

Lieu_de_ Lieu_de_stage VARCHAR( Oui -


stage 30)

Date de date_naissanc DATETIME Non -


naissance e

Comment commentaires TEXT Oui -


aires

Syntaxe

Par souci de clarté, nous allons diviser l'explication de la syntaxe de CREATE


TABLE en deux. La première partie vous donne la syntaxe globale de la
commande, et la deuxième partie s'attarde sur la description des colonnes créées
dans la table.

Création de la table

CREATE TABLE [IF NOT EXISTS] Nom_table (

colonne1 description_colonne1,

[colonne2 description_colonne2,

colonne3 description_colonne3,

...,]

[PRIMARY KEY (colonne_clé_primaire)]

44, JPA Web Dynamique 2 PHP


PHP
)

[ENGINE=moteur];

Le IF NOT EXISTS est facultatif (d'où l'utilisation de crochets [ ]), et a le même


rôle que dans la commande CREATE DATABASE : si une table de ce nom existe
déjà dans la base de données, la requête renverra un warning plutôt qu'une erreur
siIF NOT EXISTS est spécifié.

Ce n'est pas non plus une erreur de ne pas préciser la clé primaire directement à la
création de la table. Il est tout à fait possible de l'ajouter par la suite.

Définition des colonnes


Pour définir une colonne, il faut donc donner son nom en premier, puis sa
description. La description est constituée au minimum du type de la colonne.
Exemple :

nom VARCHAR(30),

sexe CHAR(1)

C'est aussi dans la description que l'on précise si la colonne peut contenir NULL ou
pas (par défaut, NULL est autorisé). Exemple :

matricule VARCHAR(40) NOT NULL,

date_naissance DATETIME NOT NULL

L'auto-incrémentation se définit également à cet endroit. Notez qu'il est également


possible de définir une colonne comme étant la clé primaire dans sa description. Il
ne faut alors plus l'indiquer après la définition de toutes les colonnes. Nous vous
conseillons néanmoins de ne pas l'indiquer à cet endroit.

id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT [PRIMARY KEY]

Enfin, on peut donner une valeur par défaut au champ. Si lorsque l'on insère une
ligne, aucune valeur n'est précisée pour le champ, c'est la valeur par défaut qui sera
utilisée. Notez que si une colonne est autorisée à contenir NULL et qu'on ne
précise pas de valeur par défaut, alors NULL est implicitement considéré comme
valeur par défaut.

Exemple :

nom VARCHAR(40) NOT NULL DEFAULT 'Adjovi'

Une valeur par défaut DOIT être une constante. Ce ne peut pas être une fonction
(comme par exemple la fonction NOW() qui renvoie la date et l'heure courante).

45, JPA Web Dynamique 2 PHP


PHP

Application : création de Etudiant

Si l'on met tout cela ensemble pour créer la table  Etudiant  (nous utiliserons le
moteur InnoDB), on a donc :

CREATE TABLE Etudiant (

id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,

nom VARCHAR(40) NOT NULL,

prenom VARCHAR(30) NOT NULL,

matricule VARCHAR(20) NOT NULL,

sexe CHAR(1) NOT NULL,

Lieu_de_stage VARCHAR(40),

date_naissance DATETIME NOT NULL,

commentaires TEXT,

PRIMARY KEY (id)

ENGINE=INNODB;

Vérifications

Voici deux commandes vous permettant de vérifier que vous avez bien créé une
table Etudiant avec les huit colonnes que vous vouliez.

SHOW TABLES; -- liste les tables de la base de données

DESCRIBE Animal; -- liste les colonnes de la table avec leurs caractéristiques

Suppression d'une table


La commande pour supprimer une table est la même que celle pour supprimer une
base de données. Elle est, bien sûr, à utiliser avec prudence, car irréversible.

DROP TABLE Etudiant;

46, JPA Web Dynamique 2 PHP


PHP

Que retenir?

• Pour créer une base de données, on utilise la commande  CREATE DATABASE


nom_base.

• Pour supprimer une base de données : DROP DATABASE nom_base.

• À chaque connexion à MySQL, il faut préciser avec quelle base on va travailler,


avec USE nom_base.

• Avant de créer une table, il faut  définir ses colonnes. Pour cela, il faut donc
déterminer le type de chacune des colonnes et décider si elles peuvent ou non
contenir NULL (c'est-à-dire ne contenir aucune donnée).

• Chaque table créée doit définir une clé primaire, donc une colonne qui permettra
d'identifier chaque ligne de manière unique.

• Le moteur d'une table définit la manière dont elle est gérée. Nous utiliserons le
moteur  InnoDB, qui permet notamment de définir des relations entre plusieurs
tables.


III. Interaction depuis PHP


La connexion et la manipulation de notre base de données et de nos tables peut se
faire depuis notre script PHP. Le TP nous permettra d’appliquer les syntaxes
proprement dite. On peut donc faire le CRUD sur nos données. C’est à dire CREATE
(créer des entrées), READ (Lire des entrées depuis la base de données), UPDATE
(Mettre à jour des entrées) et DELETE (supprimer des entrées de nos tables).

Connexion à la base de données


La syntaxe pour se connecter à une base de données MySql diffère légèrement
d’une technologie à une autre. Les plus connues sont: PDO, MySqLi dont les
syntaxes sont les suivantes:

PDO

<?php

$servername = "localhost";

$username = "username";

47, JPA Web Dynamique 2 PHP


PHP
$password = "password";

$dbname = "myDBPDO";

try {

    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username,


$password);

    // set the PDO error mode to exception

    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    echo "Connected successfully";

    }

catch(PDOException $e)

    {

    echo $sql . "<br>" . $e->getMessage();

    }

MySqLi

<?php

$servername = "localhost";

$username = "username";

$password = "password";

$dbname = "myDB";

// Create connection

$conn = mysqli_connect($servername, $username, $password, $dbname);

// Check connection

if (!$conn) {

    die("Connection failed: " . mysqli_connect_error());

48, JPA Web Dynamique 2 PHP


PHP

if (mysqli_query($conn)) {

    echo "Connected successfully";

} else {

    echo "Error: " . $sql . "<br>" . mysqli_error($conn);

mysqli_close($conn);

?>

Créer nouvelle entrée


La syntaxe pour créer une entrée dans notre table est la suivante avec des
surcharges selon nos besoins.

INSERT INTO table_name (column1, column2, column3,...)

VALUES (value1, value2, value3,...)

Lire ou récupérer une ou des entrées


La syntaxe pour récupérer une ou des entrée(s) depuis notre script PHP est la
suivante avec des surcharges selon nos besoins.

SELECT column_name(s) FROM table_name

Ou on met * pour récupérer tous les attributs

SELECT * FROM table_name

Mettre à jour une ou des entrées


La syntaxe pour mettre à jour une ou des entrée(s) depuis notre page PHP est la
suivante avec des précisions selon le cas.

UPDATE table_name SET column1=value, column2=value2,… WHERE


some_column=some_value 

49, JPA Web Dynamique 2 PHP


PHP

Supprimer une ou des entrées


La syntaxe pour supprimer une ou des entrée(s) depuis notre page PHP est la
suivante avec des précisions selon le cas.

DELETE FROM table_name

WHERE some_column = some_value

Toutes ces expressions seront approfondies lors des travaux pratiques.

4. Exercices d’applications en PHP-MySQL


Sujet:

Créez un système d’ajout d’étudiant dans une base de donnée que vous créerez
avec le couple PHP-MySql.

50, JPA Web Dynamique 2 PHP


PHP

Approfondissement
I. Notions générales sur les CMS et Framework

1. Système de Gestion de Contenus (SGC ou CMS)


Un Système de Gestion de Contenu ou Content Management System en anglais est
un logiciel ayant pour but de faciliter ou d'automatiser les tâches de conception et
de mise à jour d'un site Internet.

Il  permet de créer, de façon simple, des pages web dynamiques. Le


CMS  gère  automatiquement les tâches d'affichage des pages (front office) et de
mise à jour du contenu (back-office et lien avec la base de données).

Autrement dit, les CMS gèrent à votre place tout ce qui permet de relier le client au
serveur et le serveur à la base de données.

Mise en place simplifié


Les CMS permettent de mettre en place un site web sans connaissances en
programmation. Toutes les actions se font à travers des interfaces graphiques, et
non avec des lignes de code.

Édition WYSIWYG de pages


WYSIWYG est l'acronyme de What You See Is What You Get, ce qui veut dire en
français "ce que vous voyez est ce que vous obtenez".

De la même manière que le logiciel Word vous permet de mettre en forme un texte
de façon visuelle, les CMS vous proposent de mettre en forme vos pages web
grâce à une interface graphique : vous n'avez pas à écrire vous-même le HTML que
vous voulez afficher aux utilisateurs, les CMS s'occupent de le générer.

Séparation entre contenu et design


Dans un même site web, de nombreuses pages, si ce n'est toutes, ont un design
similaire. Les CMS intègrent des outils permettant de ne pas avoir à refaire ce
design pour chaque page : une fois le design du site choisi, il s'appliquera
automatiquement à toutes les pages.

Ceci a deux avantages :

51, JPA Web Dynamique 2 PHP


PHP
• vous pouvez récupérer  des designs "touts faits" (que l'on appelle
des thèmes ou des templates) et les appliquer à votre site directement ; 

• vous pouvez modifier le design du site sans avoir à vous  soucier de son
contenu. Le nouveau design sera appliqué automatiquement.


Gestion des droits d'accès 


Les utilisateurs peuvent avoir des rôles différents au sein d'un site web, et donc
avoir le droit, ou non, d'effectuer certaines actions ou d'accéder à certaines pages.

Prenons l'exemple d'un forum :

• les utilisateurs non enregistrés peuvent lire mais pas poster de messages ; 

• les utilisateurs enregistrés peuvent lire et poster des messages ;

• les modérateurs peuvent lire et poster des messages, et ils ont en plus la
possibilité de modifier et de supprimer les messages des autres utilisateurs ; 

• etc.


La possibilité d'effectuer ou non une action est gérée  par ce qu'on appelle
des droits (avoir le droit, ou non, d'effectuer une action).

Dans la plupart des CMS, cette gestion des droits existe et est simple à mettre en
œuvre  : il suffit de créer des groupes d'utilisateurs et de leur donner, ou de leur
interdire, l'accès aux différentes parties du site (par exemple l'accès au back-office,
à une partie "membres"...).

Extensions
Même s'il ne s'agit pas à proprement parler d'une caractéristique, les extensions,
aussi appelées par leur nom anglais plugins, sont désormais un incontournable de
tous les CMS.

Les  extensions  ne sont pas directement incluses dans le CMS (même si certaines
sont installées par défaut !) : il est possible de les installer séparément selon vos
besoins.  Ceci  permet d'avoir un cœur de CMS contenant  uniquement les
fonctionnalités indispensables (celles listées ci-dessus notamment), tout en
augmentant fortement la flexibilité de l'outil.

Il est souvent possible de développer vous-même une extension et l'utiliser sur


votre site.

52, JPA Web Dynamique 2 PHP


PHP
Les CMS sont souvent avantageux, mais attention, ils ne sont pas une solution
miracle !  Selon la nature de votre projet, choisir un CMS pourra ne pas être
pertinent. À vous de peser le pour et le contre ! 

Avantages
Comme nous venons de le voir, les CMS ont de nombreux avantages.

• Ils sont accessibles : pas besoin de connaître un langage de programmation


pour pouvoir les utiliser ou les installer.

• Ils sont  rapides à mettre en place  : quelques heures pour les plus
complexes, quelques minutes pour les plus simples.

• Ils font  gagner du temps  : développer tout un site web à partir de zéro –
 plutôt qu'utiliser des outils préconçus – est chronophage.

• Ils sont soutenus par une communauté : c'est le meilleur moyen d'avoir des
outils performants et variés, et d'obtenir de l'aide. Nous reviendrons plus en
détails là-dessus dans la deuxième partie de ce cours.

• Ils sont  faciles à maintenir  et à faire évoluer : le Web évolue, les CMS
répercutent ces évolutions et permettent d'avoir un site qui évolue également
(usage, technologie, design, ergonomie, etc.).


Inconvénients
Cependant, comme toute solution technique, les CMS ont également des
inconvénients intrinsèques. 

Voici les plus notables et les plus répandus.

• Ils  manquent de flexibilité  : la grande majorité  des CMS proposent


énormément de fonctionnalités, néanmoins il est souvent complexe et
coûteux d'ajouter celles qui ne sont pas initialement prévues.

• Ils sont  moins performants  : la généricité et la complexité des CMS  les


rend, à qualité égale, moins performants qu'un site construit sans CMS.

• Ils sont plus susceptibles d'être attaqués : comme tous les sites utilisant le
même CMS partagent un code source commun, il est nettement plus aisé de
pirater un CMS, surtout s'il est mal protégé ou implémenté. Par ailleurs, le
temps investi par un pirate pour attaquer un site web peut être rentabilisé sur
d'autres sites construits avec le même CMS.

53, JPA Web Dynamique 2 PHP


PHP
• Ils sont difficiles à migrer : changer de CMS est souvent beaucoup plus long
et complexe que de faire évoluer un site web construit sans CMS.

Dans certains cas, les CMS peuvent pâtir d'autres inconvénients.

• Ils sont  moins faciles à référencer  : la structure des pages et les


redondances limitent souvent l'adéquation avec les règles du référencement.

• Ils sont  moins stables  : la complexité des CMS les rend parfois moins
stables – toujours à qualité égale – qu'un site construit sans CMS

2. Framework

Qu'est-ce qu'un framework ?


Le mot «  framework  » provient de l'anglais «  frame  » qui veut dire « cadre » en
français, et « work » qui signifie « travail ». Littéralement, c'est donc un « cadre de
travail ».  Concrètement, c'est un ensemble de composants qui sert à créer les
fondations, l'architecture et les grandes lignes d'un logiciel. Il existe des centaines
de frameworks couvrant la plupart des langages de programmation. Ils sont
destinés au développement de sites web ou bien à la conception de logiciels.

Un framework est une boîte à outils conçue par un ou plusieurs développeurs à


destination d'autres développeurs. Contrairement à certains scripts tels que
WordPress, Dotclear ou autres, un framework n'est pas utilisable tel quel. Il n'est
pas fait pour être utilisé par les utilisateurs finaux. Le développeur qui se sert d'un
framework a encore du boulot à fournir.

Objectif d'un framework


L'objectif premier d'un framework est d'améliorer la productivité des développeurs
qui l'utilisent. Souvent organisé en différents composants, un framework offre la
possibilité au développeur final d'utiliser tel ou tel composant pour lui faciliter le
développement, et lui permet ainsi de se concentrer sur le plus important.

Prenons un exemple concret. Il existe dans Symfony2 un composant qui gère les
formulaires HTML : leur affichage, leur validation, etc. Le développeur qui l'utilise se
concentre sur l'essentiel dans son application : chaque formulaire effectue une
action, et c'est cette action qui est importante, pas les formulaires. Étendez ce
principe à toute une application ou tout un site Internet, et vous comprenez l'intérêt
d'un framework ! Autrement dit, le framework s'occupe de la forme et permet au
développeur de se concentrer sur le fond.

54, JPA Web Dynamique 2 PHP


PHP
L'avantage premier est donc, on vient de le voir, le gain en productivité. Mais il en
existe bien d'autres ! On peut les classer en plusieurs catégories : le code, le travail
et la communauté.

Tout d'abord, un framework va vous aider à réaliser un  « bon code ». Par « bon
code », j'entends qu'il vous incite, de par sa propre architecture, à bien organiser
votre code. Et un code bien organisé est un code facilement maintenable et
évolutif ! De plus, un framework offre des briques prêtes à être utilisées (le
composant Formulaire de Symfony2 par exemple), ce qui vous évite de réinventer la
roue, et surtout qui vous permet d'utiliser des briques puissantes et éprouvées. En
effet, ces briques sont développées par des équipes de développeurs chevronnés,
elles sont donc très flexibles et très robustes. Vous économisez ainsi des heures de
développement !

Ensuite, un framework améliore la façon dont vous travaillez. En effet, dans le cas


d'un site Internet, vous travaillez souvent avec d'autres développeurs PHP et un
designer. Un framework vous aide doublement dans ce travail en équipe. D'une
part, un framework utilise presque toujours l'architecture MVC ; une façon
d'organiser son code qui sépare le code PHP du code HTML. Ainsi, votre designer
peut travailler sur des fichiers différents des vôtres, fini les problèmes d'édition
simultanée d'un même fichier ! D'autre part, un framework a une structure et des
conventions de code connues. Ainsi, vous pouvez facilement recruter un autre
développeur : s'il connaît déjà le framework en question, il s'intégrera très
rapidement au projet.

Enfin, le dernier avantage est la  communauté  soutenant chaque framework. C'est
elle qui fournit les tutoriaux ou les cours, de l'aide sur les forums, et bien sûr les
mises à jour du framework. Ces mises à jour sont très importantes : imaginez que
vous codiez vous-mêmes tout ce qui est connexion utilisateur, session, moteur
de  templates, etc. Comme il est impossible de coder sans bugs, vous devriez
logiquement corriger chaque bug déclaré sur votre code. Maintenant, imaginez que
toutes les briques de votre site, qui ne sont pas forcément votre tasse de thé, soient
fournies par le framework. À chaque fois que vous ou les milliers d'autres
utilisateurs du framework trouverez un bug, les développeurs et la communauté
s'occuperont de le corriger, et vous n'aurez plus qu'à suivre les mises à jour. Un vrai
paradis !

Il existe plein d'autres avantages non détailler, mais un framework, c'est aussi :

• une communauté active qui utilise le framework et qui contribue en retour ;

• une documentation de qualité et régulièrement mise à jour ;

• un code source maintenu par des développeurs attitrés ;

55, JPA Web Dynamique 2 PHP


PHP
• un code qui respecte les standards de programmation ;

• un support à long terme garanti et des mises à jour qui ne cassent pas la
compatibilité ;

• etc.


Les contre
Vous vous en doutez, avec autant d'avantages il y a forcément des inconvénients.
Et bien, figurez-vous qu'il n'y en a pas tant que ça !

S'il ne fallait en citer qu'un, cela serait évidemment la courbe d'apprentissage qui
est plus élevée. En effet, pour maîtriser un framework, il faut un temps
d'apprentissage non négligeable. Chaque brique qui compose un framework a sa
complexité propre qu'il vous faudra appréhender.

Notez également que pour les frameworks les plus récents, tels que Symfony2
justement, il faut également être au courant des dernières nouveautés de PHP. La
programmation orientée objet, les  namespaces. De plus, connaître certaines
bonnes pratiques telles que l'architecture MVC est un plus.

Mais rien de tout cela ne doit vous effrayer ! Voyez l'apprentissage d'un framework
comme un investissement : il y a un certain effort à fournir au début, mais les
résultats se récoltent ensuite sur le long terme !

3. WordPress : Un CMS populaire


WordPress est un CMS, c’est à dire un système de gestion de contenu Open
Source (libre), codé en PHP et repose sur une base de donnée MySQL. Il permet de
créer des sites Web et de gérer leur contenu de manière très souple.

Installer WordPress en Local 


Il s’agir d’installer WordPress sur son ordinateur (qui fait office de serveur) et non
chez un hébergeur internet. Dans le cas présent, cette installation locale de
WordPress vous familiarisera avec le logiciel sans devoir au préalable aller à la
recherche d’un hébergeur internet.

Installer WordPress en Local peut avoir d’autres objectifs tels que bénéficier d’un
environnement de développement ou encore créer une copie de son site en ligne

56, JPA Web Dynamique 2 PHP


PHP
afin d’y mener des tests grandeur nature avant d’y lancer une quelconque
modification.

Il y a différents moyens d’installer WordPress en local. Voyons deux méthodes3. La


première requiert simplement l’installation d’un logiciel répondant au nom de Instant
WordPress, alors que la seconde nécessite d’installer le serveur local  WAMP ou
MAMP (pour MAC)  avant d’installer WordPress. Vous ferez votre choix selon votre
préférence, ou vous pourrez installer les deux pour vous faire une idée.

Le tableau de bord WordPress


Tableau de Bord WordPress : La Barre d’Outils

La barre d’outils se situe en haut du  Tableau de Bord WordPress. Très utile, elle
regroupe des liens vers des fonctions essentielles liées à la gestion de votre et site.
Une bonne connaissance et utilisation de cette barre d’outils vous fera économiser
un temps précieux.

Tableau de Bord WordPress : La Barre Latérale

Présentons les liens de la barre latérale gauche (sidebar en anglais). Commençons


tous de suite par les « Mises à jour »…

Mises à Jour

L’onglet « Mises à jour » comme son nom l’indique sert à effectuer des mises à jour.
Que ce soit pour mettre à jour WordPress lui même, vos thèmes ou vos extensions,
c’est ici que cela se passe.

Articles

L’onglet « Articles » vous permettra de gérer vos articles. Lorsque vous survolez cet


onglet avec la souris, un sous-menu apparaît, révélant quatre nouveaux
liens : « Tous les articles », « Ajouter », « Catégories » et « Mots-clés »

Médias

C’est ici que vous gérerez vos médias : images, vidéos et sons. Le survol de cet
onglet dévoile deux liens : « Bibliothèque » et « Ajouter ». 

Pages

L’onglet «  Pages  » de la barre latérale du Tableau de Bord WordPress gère les


Pages! Le survol de cet onglet fera apparaître deux nouveaux liens :  «  Toutes les
pages » et « Ajouter ». Simple et efficace, comme vous pourrez.

3 Ces méthodes seront détaillées en pratique

57, JPA Web Dynamique 2 PHP


PHP
Commentaires

Dernier onglet de cette première partie de la barre latérale, «  Commentaires  »


conduit vers l’espace de gestion des commentaires.

Apparence

Cet onglet est probablement l’un des plus important du  Tableau de Bord de
WordPress. En effet en survolant ce lien, vous ferai apparaître, dans un sous menu,
les liens « Thèmes », « Personnaliser », « Widgets », « Menus » et « Éditeur ». Vous y
gérerez vos thèmes, widgets et menus.

Extensions

E n c o r e u n e s p a c e p r i m o r d i a l d u Ta b l e a u d e B o r d Wo r d P r e s s .
L’onglet  «  Extensions  »  est le lieu où vous gérerez vos extensions (ou plugins)
WordPress. Une extension et un petit script que vous ajoutez à WordPress afin de
lui apporter de nouvelles fonctionnalités. Au survol, l’onglet extensions déploie trois
liens: « Extensions installées », « Ajouter » et « Éditeur ».

Utilisateurs

Si vous voulez travailler avec des collaborateurs sur votre site, ou permettre à vos
lecteur de s’abonner à votre site, l’onglet  «  Utilisateurs  »  sera un passage obligé
du  Tableau de Bord WordPress. Vous pourrez y créer de nouveaux utilisateurs et
leurs attribuer un des cinq rôles disponibles: Super Administrateur, Administrateur,
Éditeur, Auteur, Contributeur, Abonné. Le survol de cet onglet dévoile les
liens « Tous les utilisateurs », « Ajouter » et « Votre profil ».

Outils

Survolerons rapidement l’onglet  «  Outils  », il donne accès aux liens  «  Outils


disponibles », « Importer » et « Exporter ».

Réglages

L’onglet «  Réglages  » permet de faire les réglages nécessaires au bon


fonctionnement de votre site web.

Au menu :  «  Général  »,  «  Ecriture  »,  «  Lecture  »,  «  Discussion  »,  «  Medias  »  et  « 
Permaliens ».

Choisir Son Thème WordPress

Une petite visite des  Galerie de Thèmes WordPress sur internet peut vous aider à
dresser le portrait robot du thème de votre site. Trouver celui qui répond à toutes
vos attentes ne sera pas toujours possible, le jeu sera alors de trouver celui qui s’en

58, JPA Web Dynamique 2 PHP


PHP
rapproche le plus. Voyons les outils nécessaires à l’ébauche du portrait de votre
thème avec certains qualificatifs propre aux thèmes WordPress.

Petit Lexique des Thèmes WordPress

Très souvent, les boutiques de thèmes WordPress utilise un ou plusieurs des termes
suivants pour qualifier leurs thèmes, il est important de se familiariser avec ce
vocabulaire afin de cibler rapidement les thèmes répondant à vos critères de
recherche.

Blog :  Un thème WordPress peut être qualifié de «  Blog  » lorsqu’il est


particulièrement adapté au blogging. Entendez par là qu’il vous donne la possibilité
de partager vos articles, photos, vidéos, citations et autres à vos lecteur, et ce par
ordre chronologique et par catégories.

Business :  Thème dont la page d’accueil  facilite la mise en avant de votre


entreprise et de vos Lieu_de_stages. Conçu évidemment pour les entreprises
physiques ou en ligne.

ecommerce : Thème conçu pour vendre des produits en ligne. Ils mettent en avant
vos produits et donnent des solutions afin de gérer tout le processus de vente, en
général en installant un plugin dédié à cet effet comme le célèbre WooCommerce.

Events :  Qualifie un thème dédié à l’annonce et/ou à l’actualité d’un événement


(concert, soirée, compétition sportive, etc).

Flat :  Ce terme qualifie un courant du Webdesign en vogue en ce moment. Il se


caractérise par un design minimaliste associée à des couleurs vives. Le but étant de
rendre l’expérience utilisateur la plus intuitive possible.

Fullscreen : Met en avant vos photos en les affichant en plein écran. Plutôt destiné
aux artistes.

Gratuit : Qualifie un thème gratuit. Propose souvent des fonctionnalités bien moins
avancées que dans un thème Premium, mais peut suffire à votre bonheur, tout
dépend de ce que vous souhaitez réaliser.

Magazine :  Thème particulièrement adapté si votre site a pour vocation de


transmettre de l’information en quantité. Très souvent la page d’accueil aura des
allures de une de journal ou de magasine.

Minimal :  Qualifie un thème mettant en avant le contenu sous une forme épurée,
mais néanmoins élégante.

Multi-Purpose : Véritable couteaux suisses, ce sont des thèmes à tout faire. Avec
eux vous pourrez réaliser des sites à buts divers et variés.

59, JPA Web Dynamique 2 PHP


PHP
Multimedia : Thèmes mettant en avant des contenus multimedia : images, vidéos
et sons sont ici mis en valeurs.

Les différents types de thèmes WordPress


One Page : Courant de Webdesign de plus en plus répandu. Ici tout le site tient sur
une page, et le contenu s’affiche au fur et à mesure que vous descendez sur la
page. Cette dernière est souvent assez longue.

Personal : Pour le personal blogging, sorte de journal intime en ligne.

Photo : Dédié aux photographes. Ici limage est au centre des attentions.

Pinterest-Styled : Ici vos contenu son mis en avant à la manière du célèbre réseau
social Pinterest, à savoir épinglés à l’écran. Originalité garantie.

Portfolio : Permet de mettre en avant vos réalisations (photos, vidéos, sculptures,


artisanat). Destiné aux artistes et autres créatifs.

Post Formats : Supporte la fonctionnalité Post Format de WordPress, qui donne à


vos contenu des aspects divers suivant leur nature (image, texte, citation, vidéo, …).

Premium :  Thèmes payants, confère des fonctionnalités et des possibilités de


personnalisation avancées à votre site. Passage quasi obligatoire pour des sites à
but professionnel.

Responsive :  C’est le critère le plus recherché à l’heure actuel. Le contenu d’un


thème responsive se réorganise automatiquement en fonction de la taille de l’écran
de l’utilisateur (ordinateur fixe, portable, tablette, smartphone) et ce afin de procurer
une expérience utilisateur optimale quelle que soit la situation.

Tumblog :  Ici vos contenus s’affichent comme sur la célèbre plateforme de


blogging Tumblr. Simple et efficace.

Vidéo : Dédiée à la publication et partage de vidéos et autres podcasts.

WooCommerce :  Bénéficie d’une compatibilité optimal avec le célèbre plugin


d’ecommerce de WooThemes.

Comment Choisir Son Thème WordPress ?

Maintenant que vous vous êtes familiarisé avec le vocabulaire ci-dessus, voici deux
moyens de choisir votre thème WordPress.

Le premier est d’utiliser le répertoire de thème de wordpress.org, accessible


directement de puis votre Tableau de Bord WordPress.

60, JPA Web Dynamique 2 PHP


PHP
Le second est de vous servir de la Galerie de Thème WordPress sur internet dans
laquelle est catalogué de nombreux thèmes gratuits et premiums.

Installer Un Thème WordPress


Il y a trois façons différentes d’installer un thème WordPress.

Première Méthode : Installer un thème du répertoire wordpress.org

Installer un thème WordPress du répertoire officiel de wordpress.org est


relativement aisé. Cela passe évidemment par une petite visite dans
l’onglet « Apparence », puis « Thèmes ».

Deuxième Méthode : Installer n’importe quel thème à partir du Tableau de  Bord
WordPress

Télécharger votre template.

Une fois télécharger, aller dans Apparence puis cliquez sur thème. Dans l’onglet
installer des thèmes, cliquer sur le lien envoyer, un input file apparaît. Cliquez sur
Choisissez un fichier pour sélectionner le template téléchargé puis sur installer
maintenant.

Paramétrer Son Thème WordPress


Malheureusement, le paramétrage d’un thème WordPress diffère selon le thème
utilisé, et dépend en particulier du créateur du thème. Par exemple un thème de
chez  Elegant Themes  se paramètre différemment qu’un thème de
chez  WooThemes  ou de chez  Themify. Mais heureusement, il y a de nombreux
points communs qui vont vous permettre de prendre rapidement vos marques.
Vous savez maintenant  choisir, installer et configurer un thème WordPress, peu
importe le thème que vous aurez choisi.

Quoi retenir?

Le Tableau de Bord de WordPress est constitué de deux grandes parties :

• La Barre d’Outils : elle permet d’accéder à des raccourcis pour créer des
articles et des pages, effectuer les mises à jour, gérer les commentaires, ou
visualiser son site.

• La Barre Latérale : Ici vous accéderez à tous les onglets qui vous permettront
de gérer tous les aspects de votre site : Articles, Pages, Médias,
Commentaires, Apparence, Extensions, Utilisateurs, Outils et Réglages.

61, JPA Web Dynamique 2 PHP


PHP

II. Publication du site


C’est parfait lorsque nous créons notre site. Mais faudrait le mettre en ligne pour
que le monde entier le voir!

FTP veut dire File Transfer Protocol. Il permet, depuis un ordinateur, de copier des
fichiers vers un autre ordinateur du réseau, ou encore de supprimer ou de modifier
des fichiers sur cet ordinateur.

Qu'est ce que FileZilla ?

Filezilla est un client FTP rapide disposant d'une interface facile à utiliser.
Gestionnaire de site, glisser-déposer et file d'attente de transfert vous aide à
contrôler vos tâches. Filezilla peut se connecter à pratiquement tous les serveurs
FTP, même si vous êtes derrière un pare-feu ou un proxy.

Comment récupérer les identifiants FTP

Rendez vous chez votre hébergeur qui vous fournira les identifiants (souvent envoyé
par mail):

Hôte: ftp.frikbook.com,

Protocole: FTP,

Identifiant: ppjjoel ,

Mot de passe Serveur: passpass

Le port est souvent le 21 par défaut FTP, Type d’authentification (laisser par défaut),
etc.

Comment télécharger FileZilla ?

Vous pouvez télécharger FileZilla en vous rendant sur la page suivante:  https://
filezilla-project.org/.

Cliquez ensuite sur le bouton "FileZilla Client"

62, JPA Web Dynamique 2 PHP


PHP

Comment configurer FileZilla ? 

1. Lancez FileZilla et cliquez sur l'icone en haut à gauche.

2. Cliquez sur Nouveau Site

63, JPA Web Dynamique 2 PHP


PHP

3. Puis remplissez les Champs Hôte , Protocole , Chiffre , Type d'authentification ,


Identifiant , Mot de passe. (Vous avez reçu un email qui contient vos paramètres de
publication par Ftp)

64, JPA Web Dynamique 2 PHP


PHP
 

Lors de la première connexion du Client FTP, une  fenêtre pop-up lié au certificat
SSL va s'ouvrir. Il est  nécessaire de confirmer ce pop-up  afin de  pouvoir vous
connecter à votre espace Web.

Comment publier un site avec FileZilla ?

Pour publier un site sur FileZilla il faut charger vos fichiers directement sur le
serveur. Vous avez 2 solutions pour charger vos fichiers.

1. Double Cliquez sur un fichier pour le charger.

2. Sélectionnez votre fichier et faites un clic droit sur votre souris puis sélectionnez
"Envoyer".

65, JPA Web Dynamique 2 PHP


PHP

Comment gérer un site avec FileZilla ?

Pour créer un dossier il vous suffit un clic droit avec votre souris sur la colonne de
gauche. Vous pouvez aussi renommer et éditer les droits d'accès au fichier.

66, JPA Web Dynamique 2 PHP


PHP
 

Comment publier et gérer son site avec le client FileZilla?

Comment activer le mode passif sur FileZilla ?

1. Ouvrez votre logiciel FileZilla, cliquez sur l'onglet "Fichier" puis sur "Gestionnaire
de site"

2. Cliquez sur l'onglet "Paramètres de transfert", cochez la case "Passif" puis


cliquez sur "Ok" afin de sauvegarder votre choix.

67, JPA Web Dynamique 2 PHP


PHP

Vous êtes désormais en mesure de vous connecter à votre espace web avec le
logiciel FileZilla afin de publier votre site sur internet.

68, JPA Web Dynamique 2 PHP


PHP

Conclusion générale
Le webmaster est un  véritable touche-à-tout ! Il doit pouvoir  intervenir à tous les
niveaux  : webdesign, bases de données, marketing, référencement, rédaction et
mise en avant de contenus, gestion des serveurs.

Les formulaires sont le moyen le plus pratique pour transmettre des informations à
votre site. PHP est capable de récupérer les données saisies par vos visiteurs et de
les traiter. Ces données envoyées via un formulaire se retrouvent dans un array
$_POST. De la même manière que pour les URL, il ne faut pas donner sa confiance
absolue aux données que vous envoie l'utilisateur. Il pourrait très bien ne pas
remplir tous les champs voire trafiquer le code HTML de la page pour supprimer ou
ajouter des champs. Traitez les données avec vigilance. Pour éviter la faille XSS, il
suffit d'appliquer la fonction htmlspecialchars sur tous les textes envoyés par vos
visiteurs que vous afficherez.

MySQL derive directement de SQL (Structured Query Language). L’outil


phpMyAdmin est developpé en PHP et offre une interface pour l’administration des
base de données. phpMyAdmin permet de : créer de nouvelles bases; créer
modifier/supprimer des tables; afficher/ajouter/modifier/supprimer des tuples dans
des tables; effectuer des sauvegardes de la structure et/ou des donnes; effectuer
des requetes; gerer les privileges des utilisateurs.

69, JPA Web Dynamique 2 PHP


PHP

Bibliographie
Ayekowoui Joel, Juin 2014. Webmaster Adintaf Formation. In Création de
page Web en HTML, CSS et initiation à PHP/MySQL et JavaScript;
ENGELS Jean PHP 5 – Cours et exercices; Disponible sur https://
www.eyrolles.com/download/9782212114072/exercices-php5.pdf [Consulter
le 13 Mars 2018]
OpenClassrooms : Concevez votre site web avec PHP et MySQL; Disponible
sur https://www.apprendre-php.com/tutoriels/tutoriel-12-traitement-des-
formulaires-avec-get-et-post.html [Consulter le 14 Mars 2018]
Georges Gardarin : Cours complet pour apprendre les systèmes de gestion de
bases de données; Disponible sur https://sgbd.developpez.com/tutoriels/cours-
complet-bases-de-donnees/ [Consulter le 14 Mars 2018]
OpenClassrooms : Administrez vos bases de données avec MySQL; Disponible
sur https://openclassrooms.com/courses/administrez-vos-bases-de-donnees-
avec-mysql [Consulter le 14 Mars 2018];
3W ACADEMY : Devenez Webmaster en 3 mois; Disponible sur http://
www.blogduwebdesign.com/webdesign/comment-devenir-webdesigner-3-les-
notions-a-connaitre/122 [Consulter le 10 Mars 2018];
IUT de Nice - Département INFORMATIQUE : Concepts et langages des
Bases de Données Relationnelles
Olivier Losson, Université de Lille - Sciences et Technologies, Masters ASE et
GI Bases de Données Relationnelles

70, JPA Web Dynamique 2 PHP

Vous aimerez peut-être aussi