les bases PHP : du les PHP form ulaires

Documents pareils
Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

TP JAVASCRIPT OMI4 TP5 SRC

NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

Attaques de type. Brandon Petty

Sommaire Accès via un formulaire d'identification... 4 Accès en mode SSO... 5 Quels Identifiant / mot de passe utiliser?... 6

Introduction. PHP = Personal Home Pages ou PHP Hypertext Preprocessor. Langage de script interprété (non compilé)

Stockage du fichier dans une table mysql:

PLUGINS Guide du Développeur STEPHANE FERRARI. P l u X m l 5.4

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

Séance d ED n 5 : HTML et JavaScript

Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement

Sécurité des applications web. Daniel Boteanu

TD HTML AVEC CORRECTION

Création de formulaires interactifs

Formulaire pour envoyer un mail

Module BD et sites WEB

PHP et les Bases de données - Généralités

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

< Atelier 1 /> Démarrer une application web

STID 2ème année : TP Web/PHP

Activité sur Meteor. Annexe 1 : notion de client-serveur et notion de base de données

Failles XSS : Principes, Catégories Démonstrations, Contre mesures

Logiciel : GLPI Version : SYNCRHONISATION DE GLPI AVEC ACTIVE DIRECTORY. Auteur : Claude SANTERO Config. : Windows 2003.

Avec PICASA. Partager ses photos. Avant de commencer. Picasa sur son ordinateur. Premier démarrage

Créer un site Web : mode d emploi Sous SPIP, avec le squelette «établissement» de l académie de Versailles

Programmation Web. Madalina Croitoru IUT Montpellier

SYSTEME DE GESTION DES ENERGIES EWTS EMBEDDED WIRELESS TELEMETRY SYSTEM

Espace pro. Installation des composants avec Firefox. Pour. Windows XP Vista en 32 et 64 bits Windows 7 en 32 et 64 bits

PDO : PHP Data Object 1/13

Gilles.Roussel univ-mlv.fr HTTP/1.1 RFC 2068

CREATION d UN SITE WEB (INTRODUCTION)

Optimiser pour les appareils mobiles

Comment se connecter au VPN ECE sous vista

API SMS CONSEIL HTTP V2.01. Sommaire. Documentation V1.0 au 21/05/2011

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

Mise en place d un serveur Proxy sous Ubuntu / Debian

RAPPORT AUDIT SEO. Élaboré à l'attention de : Monsieur Greber Élaboré par : Cédric Peinado

Application de lecture de carte SESAM-Vitale Jeebop

Outil de télédéclaration fiscale

DOM - Document Object Model

Comment développer et intégrer un module à PhpMyLab?

Affichage de la date d'exigibilité sur les documents FAQ INV 011

Pack Fifty+ Normes Techniques 2013

SAGE Financements Notice de mise à jour via internet

Introduction. Passage de sites statiques à des sites dynamiques

HTML. Notions générales

SYSTÈMES D INFORMATIONS

Panel des technologies Web

Les sites Internet dynamiques. contact : Patrick VINCENT pvincent@erasme.org

\ \ / \ / / \/ ~ \/ _ \\ \ ` \ Y ( <_> ) \ / /\ _ / \ / / \/ \/ \/ Team

Afin d accéder à votre messagerie personnelle, vous devez vous identifier par votre adresse mail et votre mot de passe :

HTML, CSS, JS et CGI. Elanore Elessar Dimar

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

Document Object Model (DOM)

Attaques applicatives

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

Bernard Lecomte. Débuter avec HTML

ContactForm et ContactFormLight - Gestionnaires de formulaire pour Prestashop Edité par ARETMIC S.A.

Guide d implémentation. Réussir l intégration de Systempay

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Documentation Liste des changements apportés

ENVOI EN NOMBRE DE Mails PERSONNALISES

SOUTENANCE ORALE RAPPORT DE PROJET D INFORMATIQUE

AIDE ENTREPRISE SIS-ePP Plateforme de dématérialisation des marchés publics

WinTask x64 Le Planificateur de tâches sous Windows 7 64 bits, Windows 8/ bits, Windows 2008 R2 et Windows bits

Sauvegarder et restaurer les données PMB

KompoZer. Composition du site : _ une page d'accueil : index.html. _ une page pour la théorie : theorie.html. _ une page pour les photos : photos.

Les services usuels de l Internet

LES REGLEMENTS AVEC SOCIEL.NET DERNIERE MISE A JOUR : le 14 juin 2010

Uniformiser la mise en forme du document. Accélère les mises à jour. Permets de générer des tables de matières automatiquement.

FORMATION / CREATION DE SITE WEB / 4 JOURNEES Sessions Octobre 2006

Dans l'article précédent, vous avez appris

Apprenez à Créer une campagne.

Gestion de stock pour un magasin

Comptabilité - USR. Logiciel : Comptabilité USR - Version 2,16 Documentation réalisée par JJ Gorge Trésorier Tir à l'arc le 04/04/ / 15

ALGORITHMIQUE ET PROGRAMMATION En C

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

SOMMAIRE 1 INTRODUCTION 4 2 GUIDE D UTILISATION ET TUTORIAUX VIDEOS EN LIGNE 4 3 CONTACTER VOTRE SUPPORT 4 4 RACCOURCIS CLAVIER 5

NAMEBAY PRO. votre site de revente de noms de domaine en marque blanche. Documentation technique

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Tapez le titre de la page «BASTIA ville méditerranéenne», puis allez deux fois à la ligne à l aide de la touche Entrée.

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

CARPE. Documentation Informatique S E T R A. Version Août CARPE (Documentation Informatique) 1

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

Publication dans le Back Office

Notes pour l utilisation d Expression Web

WIMS. Découvrir et utiliser

swsso v0.98 Manuel utilisateur

Sessions en ligne - QuestionPoint

FOIRE AUX QUESTIONS PAIEMENT PAR INTERNET. Nom de fichier : Monetico_Paiement_Foire_aux_Questions_v1.7 Numéro de version : 1.7 Date :

Plateforme Systempay Descriptif de l interface avec la page de paiement

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

RÉALISATION D UN SITE DE RENCONTRE

CREATION DMP En Accès Web

Plateforme PAYZEN. Intégration du module de paiement pour la plateforme Magento version 1.3.x.x. Paiement en plusieurs fois. Version 1.

PARAMETRER INTERNET EXPLORER 9

Avenir Concept Monaco

Transcription:

PHP : les bases du les formulaires PHP

sommaire M2202 développement web Objectifs PPN : Échange de données client/serveur : principe. Éléments du langage. Formulaire de saisie. Liaison avec une base de données (en TD).

Les formulaires Les formulaires permettent de doter les pages web d'éléments interactifs qui assurent le dialogue entre les internautes et le serveur. Voici 2 exemple de structures simples pour un formulaire : <form method="get" action="url_de_traitement"> <label>votre nom : </label> <input type="text" size="20" name="user-name" /> <input type="submit" value="valider" /> </form> <form method="post" action="url_de_traitement"> <label>votre nom : </label> <input type="text" size="20" name="user-name" /> <button>valider</button> </form>

Les formulaires METHOD indique la méthode de transmission HTTP des données saisies dans le formulaire : POST est la valeur qui correspond à un envoi de données stockées dans le corps de la requête (les données sont cachées mais PAS CRYTÉES!!!) GET correspond à un envoi des données visibles dans l'url (séparées de l'adresse du script par un point d'interrogation) : à éviter mais pratique pendant la phase de mise au point si l'attribut METHOD est omis, il vaut "get" par défaut ACTION permet d'indiquer l'url absolue ou relative de la page qui recevra les informations du formulaire, lorsque l'on cliquera sur le bouton de validation. C'est généralement le nom d'un fichier script PHP. si l'attribut ACTION est omis, l'url sera celle du document courant REMA RQUE : si l'on a à faire à un formulaire d' upload, la balise <form> doit comporter l'attribut enctype et la valeur multipart/form-data.

1er exemple de formulaire Voici un premier exemple de formulaire (très simple) qui permet d'identifier le client. On veut : proposer au client de saisir son nom et son mot de passe, récupérer ces informations pour les traiter. Voici les échanges qui vont s'opérer entre CLIENT et SERVEUR. Client appelle la page formulaire1data.html Util : Mot passe : Retourne le code HTML de formulaire1data.html Client transmet les informations à la page formulaire1traiter.php username= userpwd= formulaire1data.html contient le code HTML qui permet de présenter le formulaire pour la saisie des données formulaire1traiter.php traite les informations envoyées par le client

1er exemple de formulaire Voici le code de formulaire1data.html qui permet d'identifier le client : formulaire1data.html <head> <title>mon premier formulaire</title> </head> <body> <form action="formulaire1traiter.php" method="get"> <p><label> Nom : </label><input type="text" name="username" /></p> <p><label> Mot de passe : </label><input name="userpwd" type="password" /></p> <input type="submit" value="ok" id="ok"/> </form> </body> </html> Le formulaire contient 2 zones de texte (username et userpwd), dont l'une est de type password (remplacement des caractères par des * à la saisie). Il faut toujours veiller à bien structurer les éléments de la page dans la perspective prochaine de leur appliquer une mise en forme par feuille de style. On ajoutera donc toujours un LABEL devant les en têtes : <label> Nom : </label> et un attribut ID ou CLASS sur les balises importantes <form id="login">, <input type="submit" value="ok" id="ok">

1er exemple de formulaire On appelle la page http://localhost/formulaire1data.html On obtient l'écran suivant : Saisie d'une valeur : Après un clic sur le bouton OK, les paramètres du formulaire sont transmis dans la barre d'url sous la forme champ1=valeur1 & champ2=valeur2 Le mot de passe http://localhost/formulaire1traiter.php?username=admin&userpwd=secret est en clair C'est le script formulaire1traiter.php qui reçoit les données. le serveur met en place AUTOMATIQUEMENT les informations sous forme d'un tableau associatif $_GET[]

1er exemple de formulaire REMARQUE 1 On doit utiliser les informations du tableau $_GET pour afficher les valeurs formulaire1traiter.php <?php $username = $_GET['username']; $userpwd = $_GET['userpwd']; // afficher les valeurs des variables echo "nom=$username<br>"; echo "mot de passe=$userpwd<br>";?> Le serveur reçoit les informations dans un tableau associatif <?php echo "<pre>".var_dump($_get)."</pre>";?> formulaire1traiter.php array (size=2) 'username' => string 'admin' (length=5) 'userpwd' => string 'secret' (length=5)

REMARQUE 2 1er exemple de formulaire On peut aussi utiliser la fonction extract($_get) Cette fonction va créer une variable pour chaque clé du tableau associatif $_GET. <?php extract($_get); // afficher les valeurs des variables echo "nom=$username<br>"; echo "mot de passe=$userpwd<br>";?> REMARQUE 3 Si les données sont transmises en méthode POST, on utilise le tableau $_POST (ou extract($_post)) Les données http://localhost/formulaire1traiter.php sont cachées

2cd exemple de formulaire : login Modifions notre manière de traiter les données. Cette fois ci, on ne construit qu'une seule page formulaire3.php. La page doit : proposer au client de saisir son nom et son mot de passe, récupérer ces informations pour les traiter. Voici les échanges qui vont s'opérer entre CLIENT et SERVEUR. Client appelle la page formulaire3.php Util : Mot passe : Retourne le code HTML généré par le traitement PHP de formulaire3.php Client transmet les informations (en mode POST) à la page formulaire3.php username= userpwd= formulaire3.php Lors du 1er appel de cette page, aucun paramètre n'est transmis. formulaire3.php reçoit maintenant 2 paramètres et traite ces informations.

2cd exemple de formulaire : login Algorithme à mettre en place err '' Si (la page est appelée avec des paramètres) ALORS Si authentification correcte ALORS redirection vers accueil.html Sinon err "erreur" Fin si Fin si Afficher le code HTML de la page Si (err n'est pas vide) ALORS Afficher err Fin SI

2cd exemple de formulaire : login Script de la page <?php // C O N S T A N T E S et V A R I A B L E S define ("NOM","prof"); define ("MDP","iut"); $err=""; // V E R I F I C A T I O N du F O R M U L A I R E if (!empty($_post)) { if ($_POST['username'] == NOM && $_POST['userpwd'] == MDP) { header('location: accueil.html'); exit(); } else $err="identification incorrecte : RECOMMENCEZ!!!!!!!!!"; }?> <body> <?php if (!empty($err)) echo "<div class=\"err\">$err</div>";?> <form action="formulaire3.php" method="post"> <p><label> Nom : </label><input type="text" name="username" /></p> <p><label> Mot de passe : </label><input name="userpwd" type="password" /></p> <input type="submit" value="ok" /> </form>

Commentaires sur la page de login La page est structurée : déclaration des constantes et variables, traitement des données et présentation des données. C'est une bonne pratique à adopter en programmation. On traite toujours les informations avant de les présenter. Avec cette méthode, nous pourrons par exemple effectuer des redirections sans risque d'erreur d'en-têtes déjà envoyés. Voici quelques explications : 1 variable globale à la page est créée : $err pour le message d'erreur pour un login incorrect La première condition vérifie que le tableau $_POST existe et n'est pas vide. Si c'est le cas, alors elle renverra vrai (TRUE) [ce qui signifie que c'est le premier appel de la page] et sera franchie pour accéder aux tests suivants. On effectue ensuite une série de tests pour contrôler le login (correspondance avec les constantes définies en-tête du fichier). Si le login est correct alors la variable $message est renseignée sinon c'est la variable $err qui est renseignée. Dans le corps de la page, nous vérifierons si la variable $message existe. Si c'est le cas, on l'affiche sinon c'est le reste du code HTML qui est présenté (avec éventuellement l'indication d'erreur de login).

Traitement des contrôles de formulaire Groupe de bouton radio utilisé pour sélectionner un choix et un seul parmi plusieurs. Au maximum, un seul radio-bouton reste coché. Si l'option "checked" est ajoutée, le radio-bouton sera pré-coché. Sexe : <input name="sexe" type="radio" value="m" checked="checked" /> Masculin <input name="sexe" type="radio" value="f" /> Féminin <input name="sexe" type="radio" value="?" /> Ne sait pas ici $_POST['sexe'] ='M' Case à cocher utilisées pour des valeurs de type "oui" (case cochée) ou "non" (case décochée) si l'option "checked" est ajoutée, la case sera pré-cochée. Couleur : <input type="checkbox" name="couleur[bleu]" checked="checked" /> Bleu <input type="checkbox" name="couleur[blanc]" /> blanc <input type="checkbox" name="couleur[rouge]" /> rouge <input type="checkbox" name="couleur[nsp]" /> ne sait pas $_POST['couleur']['bleu']='on', $_POST['couleur']['rouge']='on'

Traitement des contrôles de formulaire Liste à sélection simple utilisée pour afficher une liste de valeurs qui se déroule quand on clique sur la flèche <label>langue : </label> <select name="langue"> <option value="f">français</option> <option value="a">anglais </option> <option value="c">chinois </option> </select> $_POST['langue'] ='F' Liste à sélection multiple Comme une liste simple mais avec l'attribut multiple <label>j'aime : </label><br> <select name="fruits[]" size="5" multiple> <option value="abricot">les abricots <option value="peche">les péches <option value="poire">les poires <option value="pomme">les pommes </select> $_POST['fruits'][0]='peche' $_POST['fruits'][1]='poire'

Problèmes de saisie des données Construisons un petit formulaire simple <?php $saisie =isset($_post['valeur'])?$_post['valeur']:null;?> <head> <title>essai de saisie de données</title> </head> <body> <form method="post"> <p>saisie :</p> <input name="valeur" type="text" value="<?php echo $saisie;?>"> <br><input name="" type="submit" value="ok" /> </form> <?php echo $saisie;?> </body> </html> Résultat du source de la page dans le navigateur : <body> <form method="post"> <p>saisie :</p> <input name="valeur" type="text" value="super \'cochon\'"> <br><input name="" type="submit" value="ok" /> </form> super \'cochon\' </body> Saisissons à l écran : Dépend de la configuration du serveur [php.ini paramètre magic_quotes_gpc] Ici, le système ajoute automatiquement un anti slash (\) devant les caractères apostrophe ('), guillemet (") et anti slash (\). Cette fonctionnalité se nomme magic_quote ; elle est fixée par un paramètre dans le fichier de configuration du serveur php.ini.

Une solution pour le magic_quote Le principe d'encodage magic_quote est intéressant si les données sont destinées à être enregistrées dans une base de données. En SQL, le délimiteur de chaîne est l'apostrophe. La présence d'une quote dans les écritures SQL peut produire des confusions. ( message d'erreur). L'encodage magic_quote permet d'ajouter le caractère magique (d'échappement) : caractère \. La base reçoit alors " super \' cochon\' " ce qui est CORRECT. La fonction stripslashes(chaine) supprime les anti-slash d'une chaîne La fonction get_magic_quotes_gpc() retourne 1 si l'encodage magic_quote est actif D'où la correction : $saisie=isset($_post['valeur'])?$_post['valeur']:null; if (get_magic_quotes_gpc()) { $saisie=stripslashes($saisie); }

Problèmes : les guillemets Avec le formulaire précédent, saisissons maintenant : Résultat du source de la page dans le navigateur : <body> <form method="post"> <p>saisie :</p> <input name="valeur" type="text" value="super "cochon""> <br> <input name="" type="submit" value="ok" /> </form> super "cochon" </body> Le délimiteur de chaîne en HTML est le guillemet et la séquence se termine après le guillemet de super ", le reste de la chaîne est ignoré

solution : les guillemets La fonction htmlspecialchar(chaine) prend la chaîne de caractères et converti tous les caractères spéciaux par leur équivalent HTML Les remplacements effectués sont : "&" (et commercial) devient "&" """ (guillemets doubles) devient """. "'" (guillemet simple) devient "&#039;" "<" (inférieur à) devient "<" ">" (supérieur à) devient ">" D où la correction : <input name="valeur" type="text" value="<?php echo htmlspecialchars($saisie);?>">

Problèmes : injection de script Avec une nouvelle saisie très malicieuse : Le javascript saisi par le client est exécuté ce n'est pas souhaitable!!! La fonction strip_tags(chaine) prend la chaîne de caractères et la retourne après avoir supprimé toutes les balises HTML qu'elle contenait D où la correction : <p>saisie :</p> <input name="valeur" type="text" value="<?php echo htmlspecialchars($saisie);?>"> <br><input name="" type="submit" value="ok" /> </form> <?php echo strip_tags($saisie);?>

injection de script JS La faille de sécurité de type XSS (cross-site scripting ) http://fr.wikipedia.org/wiki/cross-site_scripting http://venom630.free.fr/geo/tutz/securite_informatique/xss/#03 Un dernier pour la route On va saisir le code suivant : <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function() { var html = '<img src="http://lorempixel.com/600/400" />' + '<p>et encore, là c\'est la version sympathique!!!'; console.log(' start ', html); $('body').append(html); }); </script>