• Aucun résultat trouvé

Bonnes pratiques Bonnes pratiques Plan GET 1

N/A
N/A
Protected

Academic year: 2022

Partager "Bonnes pratiques Bonnes pratiques Plan GET 1"

Copied!
9
0
0

Texte intégral

(1)

IFT1147

Programmation Serveur Web avec PHP

Interaction avec l’usager:

get, post et les formulaires

IFT1147 - Interaction avec l'usager 2

Plan

Liens avec paramètres

Formulaires HTML et le protocole HTTP

Get ou Post ?

Formulaires HTML - les champs d’entrée

PHP et les formulaires

Expressions régulières

Téléchargement de fichiers

Liens

Des paramètres peuvent être ajoutés aux liens …

IFT1147 - Interaction avec l'usager 4

GET

La façon la plus simple de créer une interaction avec l’usager du site est d’inclure des informations dans un lien

<a href="abc.php?var1=val1&var2=val2">

Ces informations sont disponibles en PHP dans le tableau associatif $_GET.

echo $_GET["var1"];

IFT1147 - Interaction avec l'usager 5

Bonnes pratiques

Il faut absolument vérifier toute valeur reçue de la part d’un usager (par exemple dans $_GET).

La variable est-elle initialisée ?

La variable est-elle du bon type ?

La variable contient-elle une valeur raisonnable ?

IFT1147 - Interaction avec l'usager 6

Bonnes pratiques

Il n’est pas suffisant, pour la sécurité, de se dire que la valeur que vous recevez dans $_GET provient d’un lien que vous avez vous-même créé.

Le code source de la page HTML peut avoir été modifié localement par l’usager.

Il est facile de créer une requête get, même sans se servir d’un navigateur !

(2)

Formulaires HTML La théorie d’abord

IFT1147 - Interaction avec l'usager 8

Formulaires HTML

Le langage HTML permet de définir des formulaires en se servant du conteneur

<form>.

On peut ainsi créer des pages beaucoup plus interactives qu’avec seulement des liens (qui ne permettent après tout qu’un choix parmi des options prédéfinies) !

IFT1147 - Interaction avec l'usager 9

Formulaires HTML

Le conteneur <form> accepte plusieurs arguments:

action: l’URL du script de traitement

method: post ou get

get inclut les paramètres dans l’URL, directement visibles pour l’usager

post inclut les paramètres dans le corps de la requête HTTP.

Le protocole HTTP Une parenthèse s’impose …

IFT1147 - Interaction avec l'usager 11

Comment observer les échanges HTTP

Une façon simple et rapide pour voir les échanges HTTP entre navigateur et serveur Web est d’installer Firefox (http://www.mozilla.org)

Et d’ajouter ensuite l’extension LiveHTTPHeaders

(http://livehttpheaders.mozdev.org)

IFT1147 - Interaction avec l'usager 12

Requête HTTP

GET /~dift1147/index.php HTTP/1.1 Host: www-desi.iro.umontreal.ca User-Agent: Mozilla/5.0 (Macintosh; U;

PPC Mac OS X Mach-O; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3 Accept: text/xml,application/xml, application/xhtml+xml,text/html;q=0.9, text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300

Connection: keep-alive

(3)

IFT1147 - Interaction avec l'usager 13

Réponse HTTP

HTTP/1.x 200 OK

Date: Tue, 31 Aug 2004 00:32:10 GMT Server: Apache/2.0.50 (Fedora) X-Powered-By: PHP/4.3.8 Content-Length: 3425 Connection: close

Content-Type: text/html; charset=ISO-8859-1

Un code de retour de 200 indique que la transaction s’est terminée avec succès.

IFT1147 - Interaction avec l'usager 14

Réponse HTTP - document introuvable

HTTP/1.x 404 Not Found

Date: Tue, 31 Aug 2004 00:38:29 GMT Server: Apache/2.0.50 (Fedora) Content-Length: 310

Connection: close

Content-Type: text/html; charset=iso-8859-1

Le code 404 indique que le document demandé ne peut pas être trouvé.

IFT1147 - Interaction avec l'usager 15

Réponse HTTP - accès interdit

HTTP/1.x 403 Forbidden

Date: Tue, 31 Aug 2004 00:38:29 GMT Server: Apache/2.0.50 (Fedora) Content-Length: 316

Connection: close

Content-Type: text/html; charset=iso-8859-1

Le code 403 indique que l’accès au document est interdit.

IFT1147 - Interaction avec l'usager 16

Requête get

GET /~dift1147/exemples/Formulaires/get.php?

champCache=123&nom=Dominik&password=

&sexe=m&cours%5B%5D=1146&cours%5B%5D=1147 &disponibilite%5B%5D=lu&commentaire= HTTP/1.1 Host: www-desi.iro.umontreal.ca

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Referer: http://www-desi.iro.umontreal.ca/~dift1147/

exemples/Formulaires/baseGet.php

IFT1147 - Interaction avec l'usager 17

Requête post

POST /~dift1147/exemples/Formulaires/post.php HTTP/1.1

Host: www-desi.iro.umontreal.ca

Referer: http://www-desi.iro.umontreal.ca/~dift1147 /exemples/Formulaires/basePost.php

Content-Type: application/x-www-form-urlencoded Content-Length: 113

champCache=123&nom=Dominik&password=&sexe=m &cours%5B%5D=1146&cours%5B%5D=1147 &disponibilite%5B%5D=lu&commentaire=

get ou post ? Quelles sont les avantages

de chacun ?

(4)

IFT1147 - Interaction avec l'usager 19

Avantages de get vs post

Il est facile de transmettre des paramètres dans un lien.

On n’a pas besoin de créer de formulaire.

L’usager n’a pas besoin de cliquer sur un bouton.

Avec get, les arguments sont

automatiquement sauvegardés dans un favori (bookmark).

IFT1147 - Interaction avec l'usager 20

Avantages de post vs get

La longueur maximale de l’URL est assez limitée. S’il y a beaucoup de paramètres, une transmission par get est donc tout simplement impossible.

Les arguments transmis par get sont directement visibles dans la barre d’adresses; ce n’est pas un bon choix pour des données sensibles.

IFT1147 - Interaction avec l'usager 21

Avantage ou désavantage ?

Lorsque l’usager demande au navigateur de recharger la page actuelle, celui-ci

Le fait sans poser de questions lorsque les paramètres sont transmis par get.

Demande une confirmation lorsque les paramètres sont transmis par post. Selon le cas, ceci peut être un avantage ou un désavantage …

IFT1147 - Interaction avec l'usager 22

get ou post ?

Puisqu’une requête get peut être sauvegardée comme favori, ce n’est pas un bon choix pour tout formulaire qui entraîne une modification dans une base de données comme par exemple une confirmation d’achat.

« get pour la consultation, post pour la modification. »

IFT1147 - Interaction avec l'usager 23

Et la sécurité ?

Des arguments transmis par post peuvent tout aussi facilement avoir été modifiés par l’usager que ceux transmis par get.

Il ne faut jamais oublier qu’on peut facilement créer des requêtes HTTP à volonté en programmation. Il faut s’attendre à tout !

Formulaires HTML Les champs d’entrée

(5)

IFT1147 - Interaction avec l'usager 25

Champs d’entrée

<input type= "file">

Fichier

<textarea></textarea>

Zone de texte

<select><option></select>

Zone de liste

<input type= "checkbox">

Case à cocher

<input type= "radio">

Bouton d’option

<input type= "hidden">

Champ invisible

<input type= "password">

Mot de passe

<input type= "text">

Champ de saisie

IFT1147 - Interaction avec l'usager 26

text, password

nom="nom"

le nom du champ

value="valeur"

valeur par défaut

size="longeur"

nombre de caractères affichés

maxlength="longueur"

nombre maximal de caractères

IFT1147 - Interaction avec l'usager 27

radio

Permet un seul choix parmi plusieurs options

nom="nom"

le nom du champ

value="valeur"

valeur par défaut

checked si l’option est sélectionné par défaut.

IFT1147 - Interaction avec l'usager 28

checkbox

Permet une sélection multiple

nom="nom"

le nom du champ; il doit se terminer par []

value="valeur"

valeur par défaut

checked si l’option est cochée par défaut.

IFT1147 - Interaction avec l'usager 29

select

Liste déroulante

nom="nom"

le nom du champ; il doit se terminer par []pour une sélection multiple

multiple si sélection multiple

Chaque option est spécifiée par

<option>

IFT1147 - Interaction avec l'usager 30

Boutons

Bouton permettant de soumettre le formulaire:

<input type="submit">

Bouton permettant de réinitialiser le formulaire

<input type="reset">

(6)

PHP et les formulaires

Comment traiter toutes ces informations côté serveur ?

IFT1147 - Interaction avec l'usager 32

PHP et les formulaires

Si le formulaire est soumis par post, les variables sont disponibles en PHP dans

$_POST

Si le formulaire est soumis par get, les variables sont disponibles dans $_GET.

Dans les deux cas, les variables sont aussi disponibles dans $_REQUEST.

IFT1147 - Interaction avec l'usager 33

Avec une seule page PHP

Souvent, le formulaire est généré et traité par la même page PHP

Avantage:

lorsqu’on doit le modifier, on n’oublie pas de modifier aussi le code de validation et de traitement

Lorsqu’il est mal rempli, on peut facilement réafficher le formulaire avec un message d’erreur.

IFT1147 - Interaction avec l'usager 34

Avec une seule page PHP

Dans ce cas, on spécifie comme action du formulaire

<?=$_SERVER["PHP_SELF"]?>

Afficher le formulaire ou le traiter ?

On inclut un champ caché dans le formulaire

Traitement si et seulement si le champ caché fait partie de $_GET / $_POST.

IFT1147 - Interaction avec l'usager 35

Validation de formulaires

Avant de traiter les contenus d’un formulaire (afin de le sauvegarder dans une base de données par exemple), il faut le valider.

Toute validation doit se faire côté serveur. Une validation côté client (Javascript) peut aussi être faite, mais ne devrait jamais être utilisée seule !

IFT1147 - Interaction avec l'usager 36

Formulaires HTML et PHP - recette

Créez les fonctions

afficherFormulaire($erreurs), validerFormulaire() et

traiterFormulaire()

Ajoutez dans le formulaire un champ caché de nom soumis

(7)

IFT1147 - Interaction avec l'usager 37

Formulaires HTML et PHP - recette

if (array_key_exists("soumis", $_POST)) { if (($erreurs = validerFormulaire()) === true) { traiterFormulaire();

} else {

afficherFormulaire($erreurs);

} } else {

afficherFormulaire();

}

Expressions régulières

ou comment décrire des motifs de caractères…

IFT1147 - Interaction avec l'usager 39

Expressions régulières

Une expression régulière représente un motif de caractères.

Elles sont particulièrement utiles afin de vérifier les données de formulaires.

De façon plus générale, elles peuvent être utilisées pour toute recherche et modification de texte de toute sorte.

IFT1147 - Interaction avec l'usager 40

La base

^ indique le début d’une chaîne

$ indique la fin d’une chaîne

. peut être n’importe quel caractère

Chaîne abc

^abc$

Chaîne finissant par abc abc$

Chaîne commencant par abc

^abc

Chaîne contenant abc abc

IFT1147 - Interaction avec l'usager 41

Classes de caractères

Permet de spécifier un choix.

[…] un des caractères spécifiés

[^…] tout sauf un des caractères

pap ou pbp ou … sauf php

^p[^h]p$

aAa ou aBa ou … ou aZa

^a[A-Z]a$

a0a ou a1a ou … ou a9a

^a[0-9]a$

aaa ou aba ou aca

^a[abc]a$

IFT1147 - Interaction avec l'usager 42

Répétitions

{n,m} entre n et m fois

{n,} au moins n fois

{n} exactement n fois

? 0 ou 1 fois

+ au moins une fois

* 0 ou plus de fois

(8)

IFT1147 - Interaction avec l'usager 43

Répétitions - exemple

php ou php3 ou php4

^php[34]?$

Un entier

^[0-9]+$

Tout mot entre 1 et 3 lettres

^.{1,3}$

Tout mot de 5 lettres

^.{5}$

IFT1147 - Interaction avec l'usager 44

Groupement

| permet de spécifier des alternatives

() permet de regrouper plusieurs caractères

php ou php3 (php)|(php3)

IFT1147 - Interaction avec l'usager 45

Expressions régulières et PHP

Les fonctions ereg et eregi permettent de vérifier si une chaîne de caractères est conforme à une expression régulière.

if (ereg($regExp, $chaine)) { //valide

}

Téléchargement de fichiers

http://www.php.net/manual/fr/features.file-upload.php

IFT1147 - Interaction avec l'usager 47

Le côté HTML

Il faut déclarer le formulaire qui servira à télécharger le fichier de la façon suivante

<form enctype="multipart/form-data"

action="<?=$_SERVER["PHP_SELF"]?>"

method="post">

Envoyez votre image:

<input name="imageUsager" type="file">

<input type="submit" value="Envoyer">

</form>

IFT1147 - Interaction avec l'usager 48

Le tableau $_FILES

Le tableau associatif $_FILES contient les informations concernant les fichiers qui ont été téléchargés.

$_FILES['image_usager']['tmp_name']

le nom du fichier sur le serveur

$_FILES['image_usager']['name']

le nom du fichier ‘original’

$_FILES['image_usager'][’size']

la grandeur du fichier

(9)

IFT1147 - Interaction avec l'usager 49

Le traitement des fichiers en PHP

Lorsque reçus par le serveur, les fichiers téléchargés sont placés dans un

répertoire temporaire.

À la fin de l’exécution du code PHP, ces fichiers sont automatiquement détruits.

Si on veut les garder, il faut absolument les déplacer (move_uploaded_file()).

IFT1147 - Interaction avec l'usager 50

Les droits d’accès

Les fichiers téléchargés vont être créés sur le disque du serveur Web par l’usager ‘apache’.

Afin de pouvoir se servir de la fonction move_uploaded_file() il faut donc créér un répertoire avec les droits d’accès 777.

Il n’est généralement pas une bonne idée d’y placer du code PHP !

IFT1147 - Interaction avec l'usager 51

Les noms de fichiers

Afin d’éviter d’écraser des fichiers déjà existants lors de l’utilisation de

move_uploaded_file, il faut créer un nouveau nom de fichier.

Ceci peut être fait soit manuellement avec une chaîne de caractères aléatoire, ou, beaucoup plus simple, en faisant appel à tempnam().

Références

Documents relatifs

Cela permettra à tou(te)s vos étudiant(e)s de se procurer les fournitures nécessaires pour participer aux cours, d’avoir suffisamment de temps pour vous prévenir s’ils (elles)

Programmation Orientée Objet Analyse systémique (relations) Langage C++, PHP, Python, .....

Il est rappelé le rôle des institutions représentatives du personnel et plus particilièrement l’importance d’un travail en bonne intelligence avec le Comité Social et

 Proposition de stage de M2 : Guide de bonnes pratiques de gestion des espèces exotiques. envahissantes en

Ainsi, une étude conduite auprès de plus de 300 aquariophiles a montré que près de 4% d’entre eux rejettent leurs animaux dans le milieu aquatique naturel et 1% en font de

Saisissez votre nom de domaine dans le champ « Nom de domaine », soit crm-logiciel.com dans cet exemple puis cliquez sur le bouton « Vérifier les clés ».. En cas de réussite, le

• Préciser les dispositifs de contrôle de la bonne mise en œuvre des pratiques dans les

La plateforme Digitaleo génère automatiquement les statistiques de vos campagnes et vous les envoie par email.