Inf340 Systèmes d information. Deuxième site : approche MVC



Documents pareils
Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

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

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)

Stockage du fichier dans une table mysql:

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

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

CREATION WEB DYNAMIQUE

Introduction. Passage de sites statiques à des sites dynamiques

PDO : PHP Data Object 1/13

Attaques applicatives

Mise en place d un serveur Proxy sous Ubuntu / Debian

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

TP JAVASCRIPT OMI4 TP5 SRC

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

1 Position du problème

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

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

Programmation Web. Madalina Croitoru IUT Montpellier

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

Pratique et administration des systèmes

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

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

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

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

PHP 4 PARTIE : BASE DE DONNEES

Formulaire pour envoyer un mail

Création de formulaires interactifs

Sécurité des applications web. Daniel Boteanu

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

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

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.

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

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

Mysql avec EasyPhp. 1 er mars 2006

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

SYSTÈMES D INFORMATIONS

PHP 5.4 Développez un site web dynamique et interactif

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.

Outil de planification en ligne pour des créations de rendez-vous ou de sondage

Formulaires et Compteurs

Module BD et sites WEB

OMGL6 Dossier de Spécifications

Java DataBaseConnectivity

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

SECURIDAY 2013 Cyber War

Activités HTML. Code: act-html

Formation en Logiciels Libres. Fiche d inscription

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

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

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

Attaques de type. Brandon Petty

Programmation Web. Introduction

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

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

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

Par l'exemple de. Laurent Destailleur

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

Architecture Orientée Service, JSON et API REST

PROJET 1 : BASE DE DONNÉES REPARTIES

BTS/CGO P10 SYSTEME INFORMATION Année

Projet 2. Gestion des services enseignants CENTRE D ENSEIGNEMENT ET DE RECHERCHE EN INFORMATIQUE. G r o u p e :

Rapport de stage. De la programmation orienté objet et l'utilisation des frameworks à la découverte de la Business Intelligence.

Hébergement de site web Damien Nouvel

Ecriture d'un Plugin pour GLPI

Les solutions de paiement CyberMUT (Crédit Mutuel) et CIC. Qui contacter pour commencer la mise en place d une configuration de test?

Comment Connecter une Base de Données MySQL via un Driver JDBC Avec OpenOffice.org

CREATION d UN SITE WEB (INTRODUCTION)

Application Web et J2EE

Bases de Données et Internet

Méthode de Test. Pour WIKIROUTE. Rapport concernant les méthodes de tests à mettre en place pour assurer la fiabilité de notre projet annuel.

Séance d ED n 5 : HTML et JavaScript

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Stocker des données sur Amazon S3

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

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

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

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

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

Keyyo Guide de mise en service CTI / API / TAPI Keyyo

Introdution à PHP, MySQL et AJAX

Gestion de stock pour un magasin

Zabbix. Solution de supervision libre. par ALIXEN

Supervision de réseau

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

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

RÉALISATION D UN SITE DE RENCONTRE

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

Mise en oeuvre d un intranet à partir de logiciels Open Source avec intégration des certificats numériques et login unique

Flex. Lire les données de manière contrôlée. Programmation Flex 4 Aurélien VANNIEUWENHUYZE

INSTALLATION DE L APPLICATION DU CONTEXTE ITASTE

TAGREROUT Seyf Allah TMRIM

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

DOM - Document Object Model

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

Cours Bases de données 2ème année IUT

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Transcription:

Inf340 Systèmes d information Deuxième site : approche MVC

Objectifs Objectif : Reprendre le site précédent en utilisant le patron de conception Modèle Vue Contrôleur. Comprendre l apport d un framework basic Le site permet de gérer un carnet d adresse composé d une liste de noms et de numéros de téléphone, un nom peut posséder plusieurs numéros de téléphones.

Bilan du premier site Nous avions un site : Sans sécurité Difficilement déployable Impossible à maintenir : Redondance Mélange des concepts et des technologies dans un même script.

Les patrons de conceptions Les patrons de conceptions ou Design patterns sont des solutions pour des problèmes récurrents notamment liés au paradigme objet : MVC Singleton Proxy

MVC appliqué au Web Le MVC souvent utilisé dans les interfaces graphiques s applique sous une forme restreinte au Web.

Modèle Le modèle qui défini le comportement de l'application et le traitement des données. Les données ne sont associées à aucune présentation. Le modèle assure la cohérence des données et offre des méthodes de manipulation de ces dernières. Dans une architecture non Web, le modèle peut signaler ses changements à la vue. SQL + PHP

Contrôleur Le contrôleur gère les événements en modifiant le modèle et en invoquant les vues PHP

Vue La vue est l'interface utilisateur, elle présente le modèle, elle reçoit les événements pour en avertir le contrôleur. Elle ne modifie pas le modèle et elle n'effectue aucun traitement. PHP + HTML + JS + Flash +

Notre mini-framework Nous utiliserons un contrôleur principal, seul à apparaitre dans l URL. Il est là pour charger les constantes (l URL et les informations de connexion vers la base de données) puis aiguiller vers les contrôleurs de pages Dans notre exemple, il recherche le nom module en GET ou en POST

Le contrôleur principal define('fcpath', realpath(dirname( FILE )).DIRECTORY_SEPARATOR); //definir la constante APPPATH vers le répertoire application define('apppath', FCPATH.'application'.DIRECTORY_SEPARATOR); //inclure en utilisant APPPATH le fichier constants.php dans config require_once APPPATH.'config'.DIRECTORY_SEPARATOR.'constants.php'; //inclure en utilisant CONTROLLERPATH le controleur de page utilisateur.php if (isset($_get['module'])) $module = $_GET['module']; else if (isset($_post['module'])) $module = $_POST['module']; else $module='personne'; require_once CONTROLLERSPATH.$module.'.php';

Le contrôleur principal C est une mauvaise approche de sécurité que de permettre sans filtre d inclure un fichier en fonction de données externes (GET, POST)

Un contrôleur de page Il permet de gérer les actions d une page if (isset($_get['action'])) $action = $_GET['action']; else if (isset($_post['action'])) $action = $_POST['action']; else $action='read'; //si action=une_valeur est envoyé au script nous avons récupéré dans $action la valeur et read sinon switch ($action) { case 'create': break; case 'read : break; case 'update : break; case 'updateok : break; case 'delete : break; default: } break;

Action read Pas de lecture sur GET et POST Sollicitation du modèle Affichage d une vue

Action read case 'read': require_once MODELSPATH.'personne_utils.php'; $personnes = personne\getall(); require_once TEMPLATESPATH.'header.php'; require_once VIEWSPATH.'accueil_view.php'; require_once TEMPLATESPATH.'footer.php'; break;

Action create Lit en POST les données d un formulaire Sollicite le modèle Effectue une redirection pour produire un raffraichissement.

Action create case ('create'): $nom = $_POST['nom']; $prenom = $_POST['prenom']; require_once MODELSPATH.'personne_utils.php'; personne\create($nom, $prenom); header('location: '.URL.'index.php?action=read'); break;

Action delete lit en GET les données d une ancre Sollicite le modèle Effectue une redirection

Action delete case 'delete': $idpersonne = $_GET['idpersonne']; require_once MODELSPATH.'personne_utils.php'; $personnes = personne\delete($idpersonne); header('location: '.URL.'index.php?action=read'); break;

La modification La modification est en deux phases L affichage du formulaire de modification : l action update Le traitement de l information du formulaire de modification : l action updateok

L action update Lire en GET depuis une ancre l identifiant de l enregistrement à modifier. Solliciter le modèle pour récupérer l enregistrement depuis l identifiant Afficher la vue de modification

L action update case 'update': $idpersonne = $_GET['idpersonne']; require_once MODELSPATH.'personne_utils.php'; $personne = personne\getone($idpersonne); //require_once MODELSPATH.'numero_telephone_utils.php'; //$numeros = numero_telephone\getbyidpersonne($idpersonne); require_once TEMPLATESPATH.'header.php'; require_once VIEWSPATH.'consulter_modifier_view.php'; require_once TEMPLATESPATH.'footer.php'; break;

L action updateok Attend en POST depuis un formulaire Sollicite le modèle Actualise le modèle

L action updateok case 'updateok': $idpersonne = $_POST['idpersonne']; $nom = $_POST['nom']; $prenom = $_POST['prenom']; require_once MODELSPATH.'personne_utils.php'; personne\update($idpersonne, $nom, $prenom); header('location: '.URL.'index.php?action=read'); break;

Le modèle Pour le moment non objet et directement lié à MySQL Exemple récupérer tous les enregistrements : function getall() { connect(); $sql = 'SELECT idpersonne, nom, prenom FROM personne'; $req = mysql_query($sql) or die('erreur SQL!<br>'. $sql. '<br>'. mysql_error()); $res= array(); while ($data = mysql_fetch_assoc($req)){ $res[$data['idpersonne']] = array('idpersonne'=>$data['idpersonne'], 'nom'=>$data['nom'], 'prenom'=>$data['prenom']); }; disconnect(); return $res; }

Le modèle function create($nom, $prenom){ connect(); $sql = 'INSERT INTO personne (nom, prenom) VALUES (\''.$nom.'\',\''.$prenom.'\')'; $req = mysql_query($sql) or die('erreur SQL!<br>'. $sql. '<br>'. mysql_error()); disconnect(); }

Les vues Pour le moment pas de langage de templates. Elles sont invoquées par les contrôleurs Elles utilisent les données du modèle fournies par le contrôleur.

accueil_view.php <?php foreach ($personnes as $personne):?> <tr> <td> <?php echo $personne['idpersonne'];?></td> <td> <?php echo $personne['nom'];?></td> <td> <?php echo $personne['prenom'];?></td> <td> <a href="<?php echo URL.'index.php?action=update&idpersonne='.$personne['idp ersonne'];?>"> modifier </a></td> <td> <a href="<?php echo URL.'index.php?action=delete&idpersonne='.$personne['idp ersonne'];?>"> supprimer </a></td> </tr> <?php endforeach;?>

accueil_view.php <form action='<?php echo URL.'index.php?action=create'?>' method='post' > <p> Nom <input type="text" name="nom"/> Prénom <input type="text" name="prenom"/> <input type="submit" value="" class="messubmits"/> </p> </form>

Changeons le modèle Supposons que nous souhaitions utiliser PDO de préférence aux bibliothèque MySQL Que devons nous modifier?

Changeons le modèle Supposons que nous souhaitions utiliser PDO de préférence aux bibliothèque MySQL Que devons nous modifier? Le fichier de constante pour inclure les nouveaux modèles Récrire les modèles sans changer les signatures

Modèle avec PDO - connexion function connect(){ try{ $dns = 'mysql:host='.db_host.';dbname='.db_name; $connection = new PDO( $dns, DB_LOGIN, DB_PASSWORD ); $connection- >setattribute(pdo::attr_errmode,pdo::errmode_exception); return $connection; } catch ( Exception $e ) { echo "Connection à MySQL impossible : ", $e->getmessage(); die(); } }

Modèle avec PDO - requête function getall() { $connection = connect(); $sql = 'SELECT idpersonne, nom, prenom FROM personne'; $req = $connection->query($sql); $res = $req->fetchall(\pdo::fetch_assoc); return $res; }

Modèle avec PDO requête préparée function create($nom, $prenom){ $connection = connect(); $sql = 'INSERT INTO personne (nom, prenom) VALUES (?,?)'; $req = $connection->prepare($sql); $req->execute(array($nom, $prenom)); }

Et si les modèles étaient objets Que devrions nous changer

Et si les modèles étaient objets Que devrions nous changer => Les contrôleurs

Et le site web était mobile Que devrions nous changer

Et le site web était mobile Que devrions nous changer => Principalement les vues

Conclusion Une approche de conception plus propre MVC Un mini-framework qui permet de travailler en équipe Une indépendance vis-à-vis de la base de donnée. Toujours pas de sécurité ni de support utilisateur => Utiliser un vrai framework

La suite Présentation d un framework léger CodeIgniter Présentation de l ORM doctrine (démo d un framework lourd : symphonie)