gestion de formulaires en php
DESCRIPTION
Présentation de la gestion des formulaires en PHP5TRANSCRIPT
![Page 1: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/1.jpg)
Jean-Marie Renouard
LightPath 2014©
![Page 2: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/2.jpg)
Le logo PHP est du domaine public http://commons.wikimedia.org/wiki/File:PHP-logo.svg
Ce document est licencié sous licence ◦ Attribution-NonCommercial-ShareAlike
◦ CC BY-NC-SA
Plus de détails: http://creativecommons.org/licenses/by-nc-sa/3.0/fr/
LightPath 2014© - http://www.jmrenouard.fr 2
![Page 3: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/3.jpg)
Elément de sécurité au transfert
Validation côté client
Validation côté serveur
Format des données
Restriction des données
Formulaires anti-robots
Protection des données côté serveur
LightPath 2014© - http://www.jmrenouard.fr 3
![Page 4: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/4.jpg)
2 types de formulaire
Structure d’un formulaire
Contenu d’un formulaire
Elément d’un formulaire
Cas de l’upload de fichiers
Récupération des données d’un formulaire
Récupération des fichiers uploadés
LightPath 2014© - http://www.jmrenouard.fr 4
![Page 5: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/5.jpg)
LightPath 2014© - http://www.jmrenouard.fr 5
![Page 6: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/6.jpg)
Formulaire type GET ◦ Récupération d’information
◦ Les éléments constituent les paramètres. ◦ <FORM METHOD=« GET » …
Formulaire type POST ◦ Envoi d’information
◦ Les éléments constituent les données à traiter. ◦ <FORM METHOD=« POST » …
LightPath 2014© - http://www.jmrenouard.fr 6
![Page 7: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/7.jpg)
LightPath 2014© - http://www.jmrenouard.fr 7
![Page 8: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/8.jpg)
METHOD: Méthode de transfert
ACTION: URL d’envoi
ENCTYPE: Type d’encodage
ELEMENTS: Ensemble d’élément du formulaire ◦ Zone d’échange d’information
◦ Ne sont transmis qu’à la validation du formulaire
LightPath 2014© - http://www.jmrenouard.fr 8
![Page 9: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/9.jpg)
<FORM method=« post » action=« post.php">
Login: <INPUT type=« text » name=« login" />
<br/>
Password: <INPUT type=« password » name=« password" />
<br/>
<INPUT type="submit" value="Envoyer">
</FORM>
LightPath 2014© - http://www.jmrenouard.fr 9
![Page 10: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/10.jpg)
LightPath 2014© - http://www.jmrenouard.fr 10
![Page 11: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/11.jpg)
Les entrées
Les sélecteurs
Les zones de texte
LightPath 2014© - http://www.jmrenouard.fr 11
![Page 12: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/12.jpg)
Une ligne de saisie
Déclaration du type d’entrée ◦ Attribut type
◦ <input type=« xxx »
Définition d’un nom à chaque entrée ◦ Attribut name
◦ <input name=« nom » …/>
LightPath 2014© - http://www.jmrenouard.fr 12
![Page 13: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/13.jpg)
Assignation d’une valeur par défaut ◦ Attribut value
◦ <input value=« moi » …/>
Assignation d’une taille ◦ Attribut size
◦ <input size=« 10 » …/>
LightPath 2014© - http://www.jmrenouard.fr 13
![Page 14: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/14.jpg)
Text: Saisie non masquée de texte
Password: Saisie masquée de texte
Hidden: Champ caché à l’affichage
File: Champ de sélection de fichier
LightPath 2014© - http://www.jmrenouard.fr 14
![Page 15: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/15.jpg)
Radio: case type radio/choix exclusif
Checkbox: case type case à cocher
LightPath 2014© - http://www.jmrenouard.fr 15
![Page 16: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/16.jpg)
submit: Bouton d’envoi de formulaire
reset: Bouton de remise à zéro
image: Bouton d’envoi de formulaire ◦ Attribut src
◦ <input type=« image » src=« envoi.png » …
LightPath 2014© - http://www.jmrenouard.fr 16
![Page 17: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/17.jpg)
Menu type drop down <SELECT><option>…</option>…</SELECT>
Définition d’un nom du sélecteur ◦ <Select name=« menu » …</select>
Activation de la sélection multiple ◦ <Select multiple=« 1 » …</select>
LightPath 2014© - http://www.jmrenouard.fr 17
![Page 18: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/18.jpg)
Une option d’un sélecteur
◦ <option>…</option>
Affectation d’un valeur à une option
◦ Attribut value
◦ <option value=« pierre »>Pierre</option>
Sélection par défaut
◦ Attribut selected
◦ <option SELECTED >Pierre</option>
LightPath 2014© - http://www.jmrenouard.fr 18
![Page 19: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/19.jpg)
Zone de texte libre non masquée ◦ <TEXTAREA></TEXTAREA>
Définition d’un nom du sélecteur
◦ Attribut name
◦ <TEXTAREA name=« menu »></ TEXTAREA >
Définition de la taille en colonne et ligne
◦ Attributs cols et rows ◦ <TEXTAREA cols=« 10 » rows=« 10 » ></ TEXTAREA >
LightPath 2014© - http://www.jmrenouard.fr 19
![Page 20: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/20.jpg)
LightPath 2014© - http://www.jmrenouard.fr 20
![Page 21: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/21.jpg)
Entrée type file ◦ <input type=« file » name=«fichier »/>
La balise form avec un attribut enctype ◦ <form enctype=« multipart/form-
data »>…</form>
Autorisation de transmission en plusieurs
Requêtes HTTP (multipart ).
LightPath 2014© - http://www.jmrenouard.fr 21
![Page 22: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/22.jpg)
Envoi de plusieurs valeurs
Utilisation des crochets dans l’attribut name ◦ <input name =« fichier[] » …>
◦ <input name =« fichier[] » …>
Valable pour toutes les types d’entrée ◦ Ex: option
LightPath 2014© - http://www.jmrenouard.fr 22
![Page 23: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/23.jpg)
LightPath 2014© - http://www.jmrenouard.fr 23
![Page 24: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/24.jpg)
Tout est dans le tableau $_GET Les attributs name des éléments servent
directement comme clé du tableau.
foreach ($_GET as $k => $v) echo « $k = $v »;
LightPath 2014© - http://www.jmrenouard.fr 24
![Page 25: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/25.jpg)
Tout est dans le tableau $_POST Les attributs name des éléments servent
directement comme clé du tableau.
foreach ($_POST as $k => $v) echo « $k = $v »;
.
LightPath 2014© - http://www.jmrenouard.fr 25
![Page 26: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/26.jpg)
LightPath 2014© - http://www.jmrenouard.fr 26
![Page 27: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/27.jpg)
Tout est dans le tableau $_FILE Chaque entrée du tableau correspond à un fichier La clé est le nom de l’entrée Chaque élément du tableau contient:
◦ Le nom du fichier d’origine: $_FILES[‘fichier1’][‘name’] ◦ Le type mime : $_FILES[‘fichier1’][‘type’] ◦ La taille du fichier: $_FILES[‘fichier1’][‘size’] ◦ Le nom du fichier temporaire local: $_FILES[‘fichier1’][‘tmp_name’] ◦ Le code d’erreur du fichier : $_FILES[‘fichier1’][‘error’]
.
LightPath 2014© - http://www.jmrenouard.fr 27
![Page 28: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/28.jpg)
LightPath 2014© - http://www.jmrenouard.fr 28
![Page 29: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/29.jpg)
Passage en HTTPS
Le site est souvent en HTTPs intégral.
<form ACTION=« https://serveur.com/post.php » …></form>
LightPath 2014© - http://www.jmrenouard.fr 29
![Page 30: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/30.jpg)
LightPath 2014© - http://www.jmrenouard.fr 30
![Page 31: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/31.jpg)
Réalisation par script JS
Peu fiable ( attaque )
Inutile si Javascript désactivé
Facilitation de contournement.
LightPath 2014© - http://www.jmrenouard.fr 31
![Page 32: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/32.jpg)
<form onsubmit="return valide_form ( );" …>
A l’envoi, la fonction valide_form est invoqué: ◦ Si true est renvoyé par la méthode JS, le formulaire
est envoyé.
◦ Sinon, il faut effectuer une nouvelle soumission.
LightPath 2014© - http://www.jmrenouard.fr 32
![Page 33: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/33.jpg)
<form name=« formulaire» method="post" action=« post.php" onsubmit="return valide_form ( );">
<h1>Entrer Votre Nom</h1> <p>Votre Nom: <input type="text"
name="nom"></p> <p><input type="submit" name="send"
value=« Envoyer"></p> </form>
LightPath 2014© - http://www.jmrenouard.fr 33
![Page 34: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/34.jpg)
<script type="text/javascript"> <!– function valide_form ( ) {
valid = true; if ( document.formulaire.nom.value == "" ) {
alert ( « Remplisser le nom." ); valid = false;
} return valid; } //-->
</script>
LightPath 2014© - http://www.jmrenouard.fr 34
![Page 35: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/35.jpg)
LightPath 2014© - http://www.jmrenouard.fr 35
![Page 36: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/36.jpg)
Fiable car contrôlé par l’application L’utilisateur ne peut altérer le comportement. Il peut le détourner seulement.
Si les données ne sont pas correctes,
◦ Pas de traitement des données ◦ Renvoi d’un nouveau formulaire avec les erreurs
LightPath 2014© - http://www.jmrenouard.fr 36
![Page 37: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/37.jpg)
LightPath 2014© - http://www.jmrenouard.fr 37
![Page 38: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/38.jpg)
Vérification de la taille des chaînes ◦ if (count($_POST[‘nom’] > 255) { …}
Vérification du type ◦ is_array, is_bool, is_callable, is_double, is_float,
is_int, is_integer, is_long, is_null, isset, is_numéric, is_object, is_real, is_resource, is_scalar, is_string
LightPath 2014© - http://www.jmrenouard.fr 38
![Page 39: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/39.jpg)
Vérification format email: ◦ if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-
]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)){ …}
Vérification d’une date ◦ If (!preg_match( '`^\d{1,2}/\d{1,2}/\d{4}$`' , $value
) ) {…}
LightPath 2014© - http://www.jmrenouard.fr 39
![Page 40: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/40.jpg)
La fonction filter_var permet la validation de certains formats: ◦ FILTER_VALIDATE_BOOLEAN
◦ FILTER_VALIDATE_EMAIL
◦ FILTER_VALIDATE_FLOAT
◦ FILTER_VALIDATE_INT
◦ FILTER_VALIDATE_IP
◦ FILTER_VALIDATE_REGEXP
◦ FILTER_VALIDATE_URL
LightPath 2014© - http://www.jmrenouard.fr 40
![Page 41: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/41.jpg)
LightPath 2014© - http://www.jmrenouard.fr 41
![Page 42: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/42.jpg)
$allow=array(‘nom ’, ‘comments’);
foreach ($_POST as $key => $val) {
if (! in_array($allow, $key) {
unset($_POST[$key]);
}
}
LightPath 2014© - http://www.jmrenouard.fr 42
![Page 43: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/43.jpg)
LightPath 2014© - http://www.jmrenouard.fr 43
![Page 44: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/44.jpg)
Utilisation d’un catcha
Image avec formulaire de saisie
Blocage de tous les robots sans OCR.
Élimination de 99% des spams
LightPath 2014© - http://www.jmrenouard.fr 44
![Page 45: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/45.jpg)
Génération d’une chaîne aléatoire
Stockage de la clé MD5 de la chaîne en SESSION ($_SESSION)
Création de l’image de la chaîne
Envoi du résultat.
LightPath 2014© - http://www.jmrenouard.fr 45
![Page 46: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/46.jpg)
Récupération de la valeur du catcha
Calcul de la clé MD5 de la valeur
Comparaison avec la valeur en session.
Si pas identique, régénérer une image.
Si identique, supprimer l’entrée en session
LightPath 2014© - http://www.jmrenouard.fr 46
![Page 47: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/47.jpg)
LightPath 2014© - http://www.jmrenouard.fr 47
![Page 48: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/48.jpg)
Retrait de tous les caractères sensibles
Encodage des caractères sensibles
But est d’éviter les attaques: ◦ Empêcher les attaques de XSS
Risques: ◦ Redirection ◦ Vol d’information ◦ Ralentissement ◦ Exécution d’action non désirée en fond
LightPath 2014© - http://www.jmrenouard.fr 48
![Page 49: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/49.jpg)
Retrait de balises HTML: strip_tags
Encodage html: htmlentities
Encode url: urlencode
LightPath 2014© - http://www.jmrenouard.fr 49
![Page 50: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/50.jpg)
La fonction filter_var permet l’épuration ◦ FILTER_SANITIZE_EMAIL ◦ FILTER_SANITIZE_ENCODED ◦ FILTER_SANITIZE_MAGIC_QUOTES ◦ FILTER_SANITIZE_NUMBER_FLOAT ◦ FILTER_SANITIZE_NUMBER_INT ◦ FILTER_SANITIZE_SPECIAL_CHARS ◦ FILTER_SANITIZE_STRING ◦ FILTER_SANITIZE_STRIPPED ◦ FILTER_SANITIZE_URL ◦ FILTER_UNSAFE_RAW
LightPath 2014© - http://www.jmrenouard.fr 50
![Page 51: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/51.jpg)
Documentation du PHP http://www.php.net/docs
LightPath 2014© - http://www.jmrenouard.fr 51
![Page 52: Gestion de formulaires en PHP](https://reader031.vdocuments.site/reader031/viewer/2022020116/559626e21a28aba05a8b4609/html5/thumbnails/52.jpg)
LightPath: ◦ Société de conseil et d’ingénierie
◦ Formations, Conseil, Audit et mise en œuvre
Jean-Marie RENOUARD ◦ [email protected]
◦ Twitter: @jmrenouard
◦ http://www.jmrenouard.fr
LightPath 2014© - http://www.jmrenouard.fr 52