Bases de données (INF225), TELECOM ParisTech. TP PHP & MySQL

Documents pareils
Pratique et administration des systèmes

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

PHP 4 PARTIE : BASE DE DONNEES

HTTP. Technologies du Web. Programmation Web côté serveur. Mastère spécialisé Management et nouvelles technologies, 16 novembre 2009

Mysql avec EasyPhp. 1 er mars 2006

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

Programmation Web. Madalina Croitoru IUT Montpellier

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

Hébergement de site web Damien Nouvel

PHP CLÉS EN MAIN. 76 scripts efficaces pour enrichir vos sites web. par William Steinmetz et Brian Ward

Stockage du fichier dans une table mysql:

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)

Jérôme FESSY. IUT de Paris 5. Base de Données. Cours Introductif. Base de Données

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

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

HTML. Notions générales

Utiliser un CMS: Wordpress

Compte Rendu d intégration d application

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

L3 informatique TP n o 2 : Les applications réseau

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

Remote Cookies Stealing SIWAR JENHANI (RT4) SOUHIR FARES (RT4)

SYSTÈMES D INFORMATIONS

Mysql. Les requêtes préparées Prepared statements

CREATION WEB DYNAMIQUE

Devenez un véritable développeur web en 3 mois!

Attaques applicatives

Vulnérabilités et sécurisation des applications Web

Gestion de stock pour un magasin

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

PHP 5. La base de données MySql. A. Belaïd 1

Architectures web/bases de données

Initiation à html et à la création d'un site web

HMTL. Exemple de fichier HTML. Structure d un document HTML. Exemple de fichier HTML. Balises HTML. IFT1147 Programmation Serveur Web avec PHP

SQL MAP. Etude d un logiciel SQL Injection

Faculté des sciences de gestion et sciences économiques BASE DE DONNEES

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

Diffuser un contenu sur Internet : notions de base... 13

Bases de données cours 1

3W Academy Programme de Formation Développeur Intégrateur web Total : 400 heures

laposte.net) Ministère de l'éducation nationale Atelier sécurité Rabat RALL 2007

Mise en œuvre des serveurs d application

Module BD et sites WEB

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

TP Contraintes - Triggers

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

Thème : Création, Hébergement et référencement d un site Web

RÉALISATION D UN SITE DE RENCONTRE

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

Gestion du parc informatique matériel et logiciel de l Ensicaen. Rapport de projet. Spécialité Informatique 2 e année. SAKHI Taoufik SIFAOUI Mohammed

Vulnérabilités et solutions de sécurisation des applications Web

1 Introduction et installation

Olivier Mondet

Le langage SQL Rappels

INSTALLATION DE L APPLICATION DU CONTEXTE ITASTE

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

Introduction au langage C

Dossier Technique. Détail des modifications apportées à GRR. Détail des modifications apportées à GRR Le 17/07/2008. Page 1/10

WWSympa, une interface web pour Sympa

Bases de Données et Internet

PHP. PHP et bases de données

TP1 - Prise en main de l environnement Unix.

I. MySQL : Serveur et SGBD

CRÉER, ROUTER ET GÉRER UNE NEWSLETTER, UN ING

Formation : WEbMaster

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation

Développement des Systèmes d Information

Sage 100 CRM - Guide de la Fusion Avancée Version 8. Mise à jour : 2015 version 8

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

LI345 Bases de données et sites Web. Licence de Sciences et Technologies Mention Informatique

Installation d'un serveur FTP géré par une base de données MySQL

Bureautique Initiation Excel-Powerpoint

Technologies du Web. Créer et héberger un site Web. Pierre Senellart. Page 1 / 26 Licence de droits d usage

TP 1 Prise en main de l environnement Unix

TP Administration Oracle

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

EP60.92 Projet d application pluridisciplinaire La chasse aux trésors

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

TP1. Outils Java Eléments de correction

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

1. La plate-forme LAMP

INFORMATIQUE & WEB. PARCOURS CERTIFICAT PROFESSIONNEL Programmation de sites Web. 1 an 7 MODULES. Code du diplôme : CP09

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

Service WEB, BDD MySQL, PHP et réplication Heartbeat. Conditions requises : Dans ce TP, il est nécessaire d'avoir une machine Debian sous ProxMox

Programmation Internet Cours 4

Stocker des données sur Amazon S3

Table des matières Avant-propos... V Scripting Windows, pour quoi faire?... 1 Dans quel contexte?

les techniques d'extraction, les formulaires et intégration dans un site WEB

25 mars. Tutoriel sur Laravel. Préparé par : Lydiane Beaulne-Bélisle. Ceci est un tutorial qui montre comment débuter avec le Framework PHP Laravel.

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Magento. Magento. Réussir son site e-commerce. Réussir son site e-commerce BLANCHARD. Préface de Sébastien L e p e r s

Table des matières Hakim Benameurlaine 1

Bon ben voilà c est fait!

Technologies Web. Ludovic Denoyer Sylvain Lamprier Mohamed Amine Baazizi Gabriella Contardo Narcisse Nya. Université Pierre et Marie Curie

DOSSIER D'ACTIVITES SUR LE PHP N 03 Créer une base de données MySQL avec PHPMyAdmin

Transcription:

Bases de données (INF225), TELECOM ParisTech TP PHP & MySQL Pierre Senellart (pierre.senellart@telecom-paristech.fr) Bogdan Cautis (bogdan.cautis@telecom-paristech.fr) Ioana Ileana (ioana.ileana@telecom-paristech.fr) M. Lamine Ba(ba@telecom-paristech.fr) 13 novembre 2012 Le but de ce TP est de découvrir l utilisation d un SGBD dans le cadre du développement d une application Web. À la place d Oracle, nous utiliserons le SGBD MySQL pour ce TP, ce qui nous permettra d en constater les similarités et différences (le langage SQL est utilisé dans Oracle et dans MySQL, mais il y a parfois de petites différences). On utilisera également le langage de programmation PHP. 1 L outil de ligne de commande mysql Nous allons réaliser au cours de TP une mini-application Web permettant de gérer une petite base de données de films. Dans un premier temps, nous allons supposer qu à chaque film est associé un titre, un nom de réalisateur, et un pays. 1. Imaginer un schéma de base de données relationnelle adapté à cette application. 2. Nous allons créer le ou les tables correspondantes dans le serveur de bases de données MySQL. Pour cela, nous allons utiliser l outil de ligne de commande mysql (c est l équivalent de l outil sqlplus pour Oracle). Taper à l invite du shell : /usr/pkg/bin/mysql -h mysql.infres.enst.fr -P 3307 -u login -p login où login votre identifiant de connexion à MySQL (à mettre deux fois sur la ligne ci-dessus, une fois pour le nom d utilisateur, une fois pour le nom de base). Votre mot de passe MySQL vous sera alors demandé. 3. Vous pouvez taper à l invite de commande MySQL des ordres SQL ou d autres commandes spécifiques à cet outil. Les ordres et commandes se terminent en général par un caractère ; (pour un affichage en colonne) ou \G (pour un affichage en ligne). La commande HELP vous permettra d obtenir de l aide sur toute autre commande (on pourra aussi se référer à la documentation en-ligne de MySQL, voir http://dev.mysql.com/doc/refman/5.0/en/). Commençons par examiner la liste des bases de données auxquelles vous avez accès avec SHOW DATABASES. La base de données information_schema est une base virtuelle contenant des méta-informations sur les autres bases. Nous allons nous placer dans l autre bases de données à votre disposition avec USE nom base. 4. Créer maintenant la ou les tables appropriées, avec l ordre SQL standard de création de table. La commande DESCRIBE Nom table permet d afficher le schéma d une table créée. Noter que le type de données Oracle VARCHAR2(n ) n existe pas, il est remplacé en MySQL par le type VARCHAR(n ) 5. Insérer à la main quelques films dans la base de données. 2 Premier formulaire HTML Vous placerez les documents produits dans le sous-répertoire public html de votre répertoire Unix principal. Si votre login Unix est pierre, vous pourrez accéder à un document index.html via un serveur Web à l URL : 1

http://www.infres.enst.fr/~pierre/index.html. S assurer que le serveur Web a bien un droit de lecture sur votre répertoire principale et le sous-répertoire public_html à l aide de la commande : chmod a+rx ~ ~/public_html Il peut être nécessaire de réutiliser cette commande à chaque fois que vous créez un nouveau fichier, en fonction de la configuration. Créer un document HTML ajout_nouveau_film.html contenant un formulaire qui servira à ajouter un nouveau film dans la base de données. Titre et nom de réalisateur pourront être saisis comme du texte libre, tandis que le pays pourra être proposé par une liste déroulante à quelques entrées. Si vous êtes débutant en HTML, ou si vous avez besoin de vous rafraîchir la mémoire, référez-vous rapidement au cours lié depuis la page Web du cours : http://dbweb.enst.fr/teaching/inf225/tp/tp3/cours1.pdf 3 PHP et MySQL PHP est un langage interprété, adapté pour le développement de sites Web. Un script PHP est un document incluant du contenu littéral textuel (en général des morceaux de pages HTML) et des blocs d instructions encadrés par les pseudo-balises <?php (ou <?) et?>. Un tel script est mis à la disposition du serveur Web et est interprété par celui-ci pour fournir à l utilisateur une page Web (ou un autre document). Ainsi, le programme PHP suivant affiche la table de multiplication de 1 à $M sous forme d un tableau HTML, où $M est récupéré comme paramètre de requête HTTP GET (c est-à-dire indiqué sous la forme?m=30 à la fin de l URL) : <?php $M=$_GET["M"]?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/tr/html4/strict.dtd"> <html> <head><title>table de multiplication</title></head> <body> <h1>table de multiplication</h1> <table> <caption>table de multiplication de 1 à <?php echo $M?></caption> <tr> <th></th> <?php for($i=1;$i<=$m;$i=$i+1) { echo "<th>$i</th>";?> </tr> <?php for($i=1;$i<=$m;$i=$i+1) { echo "<tr><th>$i</th>"; for($j=1;$j<=$m;$j=$j+1) { echo "<td>".($i*$j)."</td>"; echo "</tr>";?> </table> </body> </html> La syntaxe de PHP est très proche de celle de C, C++ ou Java. Nous indiquons ici les principales différences : N est interprété que le code entre pseudo-balises PHP. Le contenu à l extérieur de ces pseudo-balises est produit tel quel dans la page de résultat, comme si c était une chaîne de caractères littérale en argument de l opérateur echo. Ainsi, les deux lignes suivantes sont équivalentes : Hello <?php echo "world"?>! Hello world! Un raccourci est proposé par la pseudo-balise <?= ; celle-ci est équivalente à <? echo, donc les deux lignes suivantes sont équivalentes. 2

1 à <?php echo $M?> 1 à <?= $M?> Les variables en PHP sont toujours préfixées d un symbole $. Elles n ont pas besoin d être déclarées, et son non typées. Les chaînes de caractères littérales sont délimitées en PHP par des guillemets simples ou doubles. La différence entre ces deux possibilités est qu une chaîne de caractère délimitée par guillemet double est sujette à interpolation : le nom d une variable est remplacé par sa valeur. Ainsi, echo "J ai $age ans"; produit J ai 30 ans si $age contient la valeur 30. La concaténation de chaînes de caractères s exprime par l opérateur.. En plus des valeurs scalaires (entiers, flottants, chaînes de caractères...), PHP supporte nativement deux types de valeur de tableaux : les tableaux indicés et les tableaux associatifs. Le parcours d un tableau peut se faire avec une boucle for standard, ou avec l instruction foreach. Pour un tableau indicé, les deux blocs suivants sont équivalents : // Boucle foreach foreach($tableau as $case) { echo $case."\n"; // Boucle for foreach($indice=0;$indice<count($tableau);++$indice) { echo $tableau[$indice]."\n"; De même pour un tableau associatif : // Boucle foreach foreach($tableau as $clef => $valeur) { echo "$clef=$valeur\n"; // Boucle for $clefs=array_keys($tableau); foreach($indice=0;$indice<count($clefs);++$indice) { echo $clefs[$indice]."=".$tableau[$clefs[$indice]]."\n"; Vous pouvez vous référer à la documentation en ligne de PHP, sur http://php.net/, en particulier pour connaître l ensemble des fonctions de la (riche) bibliothèque standard. $_GET et $_POST sont deux tableaux associatifs proposant respectivement les paramètres GET et POST de la requête HTTP ; ils servent donc à récupérer les paramètres des formulaires. L accès à une base de données MySQL depuis PHP utilise les fonctions suivantes : mysql connect($serveur,$login,$mdp ) établit une connexion au serveur mysql select db($nom base ) sélectionne une base de données mysql query($ordre sql ) exécute un ordre SQL mysql fetch array($resultat) retourne une liste de résultat, sous forme de tableau indicé mysql fetch assoc($resultat) retourne une liste de résultat, sous forme de tableau associatif mysql error() renvoie le dernier message d erreur Une utilisation typique est ainsi : if(!mysql_connect("mysql.infres.enst.fr:3307","login","password")) { echo "<p>desolé, connexion impossible</p>"; exit; if(!mysql_select_db("database")) { echo "<p>desolé, accès à la base impossible</p>"; exit; $resultat= mysql_query("select * FROM Personne"); if($resultat) { while($ligne=mysql_fetch_assoc($resultat)) { echo "<p>".$ligne["prenom"]." a ". $ligne["age"]." ans</p>"; else { echo "<p>erreur dans l exécution de la requ^ete.</p>"; 3

echo "<p>message de MySQL: ".mysql_error()."</p>"; 1. Récupérer depuis la page Web du TP (http://dbweb.enst.fr/teaching/inf225/inf225.html) le script PHP affichant la table de multiplication et le tester. 2. Écrire un script affichage.php qui affiche sous la forme d un tableau HTML le contenu de la table Films, trié par titre. 3. Écrire un script insert.php comme script de traitement des données du formulaire ajout_nouveau_film.html, insérant le film correspondant dans la base de données. 4. Ajouter au tableau de affichage.php une colonne avec des formulaires contenant des boutons Supprimer (on aura besoin d utiliser des champs de formulaire de type hidden). 5. Écrire le script supprimer.php correspondant. 4 Sécurité et redirections 1. Tenter d ajouter avec le formulaire réalisé un film dont le titre comprend : une apostrophe (p. ex., L Auberge Espagnole) ; des chevrons (p. ex., Bienvenue à Gattaca ). Que se passe-t-il dans chacun de ces deux cas? 2. L apostrophe est un caractère spécial pour MySQL, qui délimite les chaînes de caractères (SQL). Comme un ordre SQL est vu par PHP comme une simple chaîne de caractères (PHP), il est crucial d échapper (c est-à-dire, précéder d un backslash) les apostrophes contenus dans des variables PHP destinées à être utilisées à l intérieur d une chaîne de caractères MySQL. La fonction mysql_escape_string fait cela (la fonction stripslashes fait l opération inverse au cas où celle-ci est nécessaire). Ne pas faire attention à cela peut non seulement causer des bugs, mais aussi des problèmes de sécurité. Quel sera, ainsi, le comportement de la requête suivante : mysql_query("select * FROM Users WHERE login= $login AND password= $password "); si $password contient OR 1=1 -- ( -- introduit des commentaires en SQL)? Ce problème de sécurité est connu sous le nom d injection de code SQL. Ajouter partout où c est nécessaire cette protection, tester. 3. Les chevrons, de même que l esperluette (&), sont des caractères spéciaux en HTML. Ainsi, une chaîne de caractères affichée par un simple echo contenant ces caractères va être interprété comme du code HTML, ce qui peut poser des problèmes d affichage, voire des problèmes de sécurité en cas de code actif (en particulier, scripts JavaScript), connus sous le nom de XSS ou cross-site scripting. La fonction htmlspecialchars permet de remplacer ces caractères par les entités correspondantes (p. ex., < pour <). Dans le cas où le texte produit est à l intérieur d un attribut HTML, il faut aussi protéger les guillemets avec : echo htmlspecialchars($variable,ent_quotes); Ajouter partout où c est nécessaire cette protection, tester. 4. Bien que beaucoup de scripts PHP aient pour rôle de produire une page HTML qui sera affichée dans un navigateur, certains d entre eux se contentent de réaliser une action (insertion, suppression) avant de passer la main à un autre script. Ce comportement peut-être obtenu avec la fonction PHP header qui modifie les en-têtes HTTP envoyés au client Web ; ainsi, header("location: suite.php"); demande une redirection vers suite.php. Attention : une telle redirection (de même que toute manipulation des en-têtes HTTP) n est possible que si rien n a encore été écrit sur la page (pas de blanc, pas de déclaration de type de document HTML, etc.). Ajouter une telle redirection depuis insert.php et supprimer.php vers affichage.php, dans le cas où les opérations se sont déroulées sans encombre. 5. Que se passe-t-il si l on demande la suppression d un film qui porte le même nom qu un autre film 1? On pourra ajouter une colonne supplémentaire déclarée comme AUTO_INCREMENT si nécessaire. 1. Ce n est pas une question sans fondement puisque par exemple trois films différent portent le titre La vie est belle. On peut même imaginer des cas où deux films différents ont le même titre, le même nom de réalisateur et le même pays. 4

5 Jointure 1. On voudrait maintenant ajouter à notre base de données une liste d acteurs pour chaque film. Revoir le schéma de la base de données pour permettre ceci. Éviter au maximum la redondance d informations! 2. Ajouter à la main quelques acteurs apparaissant dans les films déjà rentrés. 3. Modifier le script affichage.php pour afficher dans une colonne supplémentaire du tableau HTML la liste des acteurs (par exemple, séparés par des virgules). 4. Modifier le formulaire d ajout et insert.php pour demander la liste des acteurs apparaissant dans le film. La liste des acteurs possibles pourra être présentée sous forme de liste à choix multiple (c est-à-dire, avec <select multiple="multiple">). Il sera nécessaire de faire du formulaire d ajout un script PHP pour récupérer la liste des acteurs. 5. Créer un formulaire d ajout de nouvel acteur et le script PHP correspondant. 6. Compléter l application en permettant la modification des données existantes, en embellissant les pages HTML avec du code CSS, etc. 5