PHP – MYSQL avec DREAMWEAVER PHP - MySQL avec DreamWeaver Sommaire PRESENTATION du web .............................................................................................................. 6 1.1 les langages web ................................................................................................................ 6 1.1.1 HTML et Javascript ......................................................................................................................... 6 1.1.2 PHP ............................................................................................................................................... 6 Définition .......................................................................................................................................... 6 Caractéristiques ............................................................................................................... 6 Avantages ........................................................................................................................ 7 1.2 L’architecture client/serveur ................................................................................................ 8 1.2.1 1.2.2 1.2.3 1.2.4 Le client ......................................................................................................................................... 8 Le(s) serveur(s) .............................................................................................................................. 8 Site statique ................................................................................................................................... 8 Site dynamique ............................................................................................................................... 9 Définition ........................................................................................................................ 9 Fonctionnement .............................................................................................................. 9 1.2.5 Exercice1 ....................................................................................................................................... 9 1.3 les plateformes de développement .................................................................................. 10 1.3.1 EasyPHP ....................................................................................................................................... 10 1.3.1.1 Téléchargement .................................................................................................. 10 1.3.1.2 Présentation ........................................................................................................ 10 1.3.1.3 L’arborescence ................................................................................................... 11 1.3.1.4 Lancement d’EasyPHP ....................................................................................... 11 1.3.2 Xampp ......................................................................................................................................... 11 1.3.2.1 Arborescence ...................................................................................................... 13 1.3.2.2 lancement ........................................................................................................... 13 1.3.3 Exercice2 ..................................................................................................................................... 14 la base de donnÉes mysql ......................................................................................................... 15 1.4 Les bases de données relationnelles ................................................................................... 15 1.4.1 Définitions .................................................................................................................................... 15 1.5 MySQL............................................................................................................................. 16 1.6 L'outil de modélisation dbdesigner .................................................................................... 16 1.7 Principes de base de la conception d’une base de données ................................................. 17 1.7.1 Exercice3 : conception d’une base de données. .............................................................................. 18 1.7.2 Exercice4 : exo_casting_etape1.doc .............................................................................................. 18 1.8 L’interface PhpMyAdmin .................................................................................................... 19 1.8.1 Exercice4 : création d’une base de données avec phpMyAdmin........................................................ 20 1.8.2 Insertion d'enregistrements avec phpMyadmin ............................................................................... 21 1.8.3 Sauvegarde et restauration dune BDD............................................................................................ 22 1.8.3.1 Sauvegarde ......................................................................................................... 22 1.8.3.2 Restauration ....................................................................................................... 25 1.8.3.3 Exercice 5 : ........................................................................................................ 25 1.9 Le langage de requête sql ................................................................................................. 26 Php ......................................................................................................................................... 28 1.10 Présentation ................................................................................................................... 28 1.11 Utilité de l’apprentissage du php ...................................................................................... 28 1.11.1 Le contenu rédactionnel .............................................................................................................. 28 1.11.2 La factorisation ........................................................................................................................... 28 1.11.3 Le MVC (modèle vue controleur) .................................................................................................. 29 1.12 notions de base du langage php ...................................................................................... 30 1.12.1 1.12.2 1.12.3 1.12.4 1.12.5 1.12.6 Les balises php ........................................................................................................................... 30 La fonction echo ......................................................................................................................... 30 Le séparateur d’instruction .......................................................................................................... 30 Les variables PHP ........................................................................................................................ 31 les constantes ............................................................................................................................. 31 L’opérateur de concaténation ....................................................................................................... 32 Page 2/134 PHP - MySQL avec DreamWeaver 1.12.7 Les tableaux ............................................................................................................................... 32 1.12.8 Les Fonctions.............................................................................................................................. 33 1.12.9 Inclure un fichier - les fonctions include () et require_once () ....................................................... 33 1.13 Factoriser ....................................................................................................................... 34 1.13.1 1.13.2 1.13.3 1.13.4 1.13.5 1.13.6 1.13.7 1.13.8 Objectif ...................................................................................................................................... 34 Ecrans ........................................................................................................................................ 34 Démarche................................................................................................................................... 36 Le modèle html ........................................................................................................................... 36 Les fichiers .inc.php .................................................................................................................... 37 Le modèle PHP ........................................................................................................................... 39 La page banderillas.php .............................................................................................................. 40 La page sommaireDesserts.php ................................................................................................... 40 Chapitre 2 PHP et Dreamweaver ............................................................................................... 41 2.1 Le Principe ....................................................................................................................... 41 2.2 création du dossier racine du site ....................................................................................... 41 2.3 Création du site sous dreamweaver ................................................................................... 41 2.4 Choix du serveur d’evaluation ............................................................................................ 43 CREATION DE PAGES DYNAMIQUES .......................................................................................... 45 2.5 Principe général .............................................................................................................. 46 2.6 Connexion à la base de données ........................................................................................ 46 2.7 Fonctionnalités d'un site dynamique .................................................................................. 49 2.8 Afficher une table MySQL dans une table HTML .................................................................. 50 2.8.1 Ecran à réaliser............................................................................................................................. 50 2.8.2 Démarche .................................................................................................................................... 51 2.9 Afficher quelques champs d'une table ............................................................................... 52 2.9.1 Ecran à réaliser............................................................................................................................. 52 2.9.2 Démarche .................................................................................................................................... 53 2.10 Trier .............................................................................................................................. 53 2.10.1 Démarche................................................................................................................................... 53 2.11 Afficher le contenu d’une table dans une liste HTMl .......................................................... 53 2.11.1 Objectif et écran à réaliser........................................................................................................... 53 2.11.2 Démarche................................................................................................................................... 53 2.12 Région répétée ............................................................................................................... 54 2.13 Afficher une photo en fonction d’un enregistrement ........................................................... 56 2.14 Afficher la photo et l'url correspondant à l'enregistrement courant ...................................... 58 2.14.1 Objectif : l'écran à réaliser ........................................................................................................... 58 2.14.2 Démarche................................................................................................................................... 59 2.15 la liste dynamique ........................................................................................................... 60 2.15.1 2.15.2 2.15.3 2.15.4 Petit rappel : la Liste menu html .................................................................................................. 60 Et la liste dynamique , qu’est-ce que c’est ? .................................................................................. 61 Ecrans ........................................................................................................................................ 61 Démarche................................................................................................................................... 62 2.15.4.1 Le premier PHP : liste_auteurs.php.................................................................. 62 2.15.4.2 Le deuxième document PHP : un_auteur.php .................................................. 64 2.16 Afficher une liste de choix et un tableau dynamique dans la même fenêtre .......................... 64 2.16.1 Objectif ...................................................................................................................................... 64 2.16.2 Ecran ......................................................................................................................................... 64 2.16.3 Démarche................................................................................................................................... 65 Première étape ............................................................................................................... 66 Deuxième étape ............................................................................................................. 66 2.17 Insertion d'un enregistrement .......................................................................................... 67 2.17.1 L'écran à réaliser......................................................................................................................... 67 2.17.2 La démarche............................................................................................................................... 67 2.18 L'ajout de l’abonné avec l'assistant et une liste .................................................................. 68 2.18.1 Principe ..................................................................................................................................... 68 2.18.2 Objectif et écran à réaliser........................................................................................................... 68 2.18.3 Démarche................................................................................................................................... 69 La liste .......................................................................................................................... 69 Lancer l'Assistant de formulaire d'insertion d'enregistrement ...................................... 69 2.19 La suppression d'un enregistrement ................................................................................. 70 2.19.1 Objectif et écrans........................................................................................................................ 70 Page 3/134 PHP - MySQL avec DreamWeaver 2.19.2 Démarche................................................................................................................................... 71 Le document HTML...................................................................................................... 71 Le document PHP.......................................................................................................... 71 2.20 Suppression à partir d'une liste ........................................................................................ 72 2.20.1 Objectif et écrans à réaliser ......................................................................................................... 72 2.20.2 Démarche................................................................................................................................... 73 2.21 Suppression à partir d’un tableau dynamique ................................................................... 74 2.21.1 Objectif et écrans à réaliser ......................................................................................................... 74 2.22 La modification d'un enregistrement ................................................................................. 76 2.22.1 Objectif et démarche ................................................................................................................... 76 VISUALISATIONS AVANCEES … ................................................................................................. 78 2.23 Encore un peu de SQL..................................................................................................... 78 2.24 recherche à partir d’un champs d’insertion : filtrer ............................................................. 79 2.24.1 2.24.2 2.24.3 2.24.4 Principe : notion de Filtre ............................................................................................................ 79 Objectif et démarche ................................................................................................................... 79 La création du formulaire HTML ................................................................................................... 80 La création du tableau dynamique ............................................................................................... 82 2.25.1 2.25.2 2.25.3 2.25.4 2.25.5 Objectif et écran ......................................................................................................................... 83 Démarche................................................................................................................................... 84 Script ......................................................................................................................................... 85 En plus !!! .................................................................................................................................. 87 Un peu plus encore ..................................................................................................................... 88 2.25 La pagination ................................................................................................................. 83 Navigation. .................................................................................................................... 88 Etat de la navigation. ..................................................................................................... 88 Affichage conditionnel des éléments de navigation. ..................................................... 89 2.26 Visualisation de données provenant de plusieurs tables (Jointure) ....................................... 90 2.26.1 Encore un peu de SQL - Les jointures ......................................................................................... 90 2.26.1.1 Rappel............................................................................................................... 90 2.26.1.2 Lire dans plusieurs tables ................................................................................. 90 2.26.1.3 Syntaxe 1 ......................................................................................................... 90 2.26.1.4 Syntaxe 2 .......................................................................................................... 90 2.26.2 Objectif ...................................................................................................................................... 91 2.26.3 Ecran à réaliser ........................................................................................................................... 91 2.26.4 Jeu d'enregistrements avancé. ..................................................................................................... 92 2.27 Recherches multicritères ................................................................................................ 93 2.27.1 Objectif ...................................................................................................................................... 93 2.27.2 Ecrans ........................................................................................................................................ 93 2.27.3 Démarche................................................................................................................................... 94 2.28 Modifier un jeu d’enregistrements .................................................................................... 95 l'AUTHENTIFICATION ............................................................................................................... 97 2.29 Connexion et Authentification de l'utilisateur ..................................................................... 97 2.29.1 Objectif et Ecrans à réaliser ........................................................................................................ 97 2.29.2 Démarche................................................................................................................................... 97 2.30 Déconnexion .................................................................................................................. 99 2.31 Restreindre l'accès à une page en fonction de la connexion (On/Off)..................................100 2.31.1 Objectif et écrans...................................................................................................................... 100 2.31.2 Démarche................................................................................................................................. 101 2.32 Restreindre l'accès à une page en fonction de la qualité de l'utilisateur ...............................102 2.32.1 Objectif .................................................................................................................................... 102 2.32.2 Démarche................................................................................................................................. 103 2.33 Vérifier le nom d'un nouvel utilisateur ..............................................................................105 2.33.1 Objectif et écrans...................................................................................................................... 105 2.33.2 Démarche................................................................................................................................. 105 aNNEXES ................................................................................................................................106 2.34 Jeux de caractères .........................................................................................................106 2.34.1 Présentation ............................................................................................................................. 106 2.34.2 PHP.......................................................................................................................................... 106 2.34.3 MySQL et PHP........................................................................................................................... 108 2.35 Uploader un fichier ........................................................................................................109 Page 4/134 PHP - MySQL avec DreamWeaver 2.35.1 Objectif et écrans à réaliser ....................................................................................................... 109 2.35.2 Démarche................................................................................................................................. 115 2.36 Ajout d'un abonne avec des contrôles de saisie ................................................................118 2.37 Envoyer un mail ............................................................................................................119 2.37.1 Généralités ............................................................................................................................... 119 2.37.2 Envoi d'un mail de texte ............................................................................................................ 119 Objectif ........................................................................................................................ 119 Fonction utilisée .......................................................................................................... 119 Script ........................................................................................................................... 119 Le mail......................................................................................................................... 120 2.37.3 Envoyer un mail à partir d’un formulaire ..................................................................................... 121 Le formulaire de contact ............................................................................................. 121 2.37.4 Envoyer un mail avec une pièce jointe........................................................................................ 121 Objectif ........................................................................................................................ 121 Le mail......................................................................................................................... 121 Script ........................................................................................................................... 121 2.37.5 Mails et BD. .............................................................................................................................. 123 Objectif ........................................................................................................................ 123 Script ........................................................................................................................... 123 2.38 Gestion des cookies .......................................................................................................124 2.38.1 2.38.2 2.38.3 2.38.4 Définition ................................................................................................................................. 124 Syntaxe .................................................................................................................................... 124 Exemples.................................................................................................................................. 124 Exemple dynamique .................................................................................................................. 125 Ecrans .......................................................................................................................... 125 Les scripts .................................................................................................................... 126 2.39 Gestion des sessions ......................................................................................................127 2.39.1 Définition ................................................................................................................................. 127 2.39.2 Syntaxe .................................................................................................................................... 127 2.39.3 Exemple dynamique .................................................................................................................. 128 Ecrans .......................................................................................................................... 128 Scripts .......................................................................................................................... 129 2.40 Gestion de panier ..........................................................................................................131 2.40.1 Objectif .................................................................................................................................... 131 2.40.2 Ecrans ...................................................................................................................................... 131 2.40.3 Démarche................................................................................................................................. 132 2.41 Mesures de sécurité .......................................................................................................133 2.41.1 Gérer les mots de passe serveur ................................................................................................ 133 2.41.2 Protéger vos dossiers ................................................................................................................ 133 Contre le listage du contenu d'un dossier. ................................................................... 133 Contre l'accès aux utilisateurs non habilités................................................................ 133 2.41.3 Protéger l'accès à la base de données ........................................................................................ 134 Nouveaux utilisateurs sur le serveur. .......................................................................... 134 Authentifiez les utilisateurs ......................................................................................... 134 Chiffrez les mots de passe. .......................................................................................... 135 2.41.4 Masquer PHP ............................................................................................................................ 136 2.42 SCRIPT ........................................................................................................................136 2.42.1 convertir jj/mm/aaaa en aaaa-mm-jj ......................................................................................... 136 2.42.2 convertir aaaa-mm-jj en jj-mm-aaaa .......................................................................................... 136 Page 5/134 PHP - MySQL avec DreamWeaver PRESENTATION DU WEB 1.1 LES LANGAGES WEB 1.1.1 HTML et Javascript HTML est un langage de description (d’affichage). Il est interprété par le navigateur de l’internaute (ie, firefox, safari …). Il s’exécute donc côté client. Javascript est un petit programme qui est incorporé au code HTML. Il permet d’agrémenter la présentation et l’interactivité des pages web. Il est interprété par le navigateur de l’internaute (côté client). 1.1.2 PHP Figure 1. logo PHP Définition PHP est un langage de programmation exécuté par le serveur web. Il génère du code HTML. Personal Home Page nommé par la suite PHP HyperText Preprocessor (Récursivité du nom) , PHP a été créé par Rasmus Lerdorf en 1993. Caractéristiques PHP permet d’afficher des pages web dynamiques – ce sont des pages dont le contenu varie en fonction de la demande de l’internaute. Exemple : http://www.fnac.com . Ce site contient de multiples informations stockées dans une base de données et régulièrement mise à jour. Quand vous effectuez une recherche vous obtenez une page dont le contenu varie en fonction de la recherche que vous avez effectué : PHP peut gérer des contenus de formulaires WEB, des graphiques, des cookies et des sessions, manipuler des fichiers texte ou autre, accéder à des bases de données. Page 6/134 PHP - MySQL avec DreamWeaver Il peut aussi générer du texte, du graphisme, du Flash, du XML, du PDF à la volée et l'envoyer au navigateur. PHP fonctionne sur de nombreux systèmes d'exploitation : Linux, Unix, Microsoft, Mac-OS, … Majoritairement installé sur serveur Apache, PHP fonctionne sur les autres principaux serveurs du marché (IIS, PWS, Netscape, iPlanetServer …) PHP est orienté objet depuis la version 4. Avantages Gratuit, Fait pour le Web, Facile à apprendre, Portable, Haute performance, il existe de nombreux sites de documentation et d’entraides(mettre note) Page 7/134 PHP - MySQL avec DreamWeaver 1.2 L’ARCHITECTURE CLIENT/SERVEUR 1.2.1 Le client Le client, c’est vous, l’internaute ou plus exactement le navigateur de votre ordinateur 1.2.2 Le(s) serveur(s) Le serveur est un ordinateur puissant géré par un système d'exploitation (Windows : Windows Server 2003, Unix, Linux, Mac Os X Server), qui héberge un serveur web (Apache, IIS, …). Le serveur doit supporter un langage de programmation (PHP, ASP, ASP .NET, JSP, …). Une autre machine doit héberger un serveur de Base des Données (MySQL, Oracle, SQL Server, Sybase, …). 1.2.3 Site statique Figure 2. architecture client/serveur d'un site statique Lorsque l’internaute saisit dans la barre d'adresses de son navigateur une URL du type http://www.serveur.com/index.html dans un premier temps le serveur est recherché (www.serveur.com) selon un certain protocole (http://) puis la page demandée, dans le chemin, est recherchée sur le serveur (index.html). Si la page est trouvée, elle est envoyée au navigateur du client qui l'interprète et qui l'affiche, autrement une page "404" est affichée. Les extensions sont HTM ou HTML pour les pages HTML. Page 8/134 PHP - MySQL avec DreamWeaver 1.2.4 Site dynamique Définition Dans un site dynamique le contenu est créé à la volée c'est-à-dire à la demande de l’internaute Fonctionnement Figure 3. architecture client/serveur site dynamique La saisie de l'URL sera du type http://www.serveur/php/page.php La demande est envoyée sur l'Internet ou l'Intranet et est envoyé au serveur auquel elle s'adresse. Le serveur cherche la page demandée, exécute le code PHP qui produit du code HTML et l'envoie au client. Lorsque vous affichez la source via le navigateur d'une page PHP vous ne visualisez pas le code PHP mais seulement le code HTML généré par l'interpréteur PHP. 1.2.5 Exercice1 Récupérer les fichiers exemple_html.html, exemple_javascript.html et exemple_php.php Ouvrez-les avec votre navigateur Firefox Que remarquez-vous ? Page 9/134 PHP - MySQL avec DreamWeaver 1.3 LES PLATEFORMES DE DEVELOPPEMENT Pour tester des pages PHP vous avez besoin au minimum d’un serveur Apache et d’un interpréteur de script PHP assorti le plus souvent à une base de données MySQL. Cet environnement est fourni en distant par tous les hébergeurs de site. Cependant en phase de développement il est peu pratique de tester en distant - cela nécessite de systématiquement transférer les pages via FTP puis de se connecter au site pour les tester, et de recommencer cette opération autant de fois que nécessaire. Il est donc souhaitable (voir indispensable !) d’installer sur votre poste de travail un environnement de test simulant votre serveur distant : un serveur local. Le serveur local crée une nom de domaine virtuel accessible à l'adresse http://localhost/ 1.3.1 EasyPHP 1.3.1.1 Téléchargement http://www.easyphp.org/index.php 1.3.1.2 Présentation EasyPHP est une plateforme de développement Web de type WAMP (Windows Apache MySQL Php), permettant de faire fonctionner localement (sans se connecter à un serveur externe) des scripts PHP. Page 10/134 PHP - MySQL avec DreamWeaver C’est un environnement comprenant un serveur web Apache, un serveur de bases de données MySQL, un interpréteur de script PHP, ainsi qu'une interface d’administration SQL ( PhpMyAdmin). Il dispose d'une interface d'administration permettant de gérer les alias (dossiers virtuels disponibles sous Apache), ainsi que le démarrage/arrêt des serveurs. Il permet donc d'installer en une seule fois tout le nécessaire au développement local du PHP. Par défaut, le serveur Apache crée un nom de domaine virtuel (en local) http://127.0.0.1 ou http://localhost. Quand on choisit "Web local" dans le menu d'EasyPHP, le navigateur s'ouvre sur l’ URL http://localhost et affiche la page index.php de ce site qui correspond en fait au contenu du dossier www d'EasyPHP. EasyPHP peut être utilisé comme une application portable, c’est-à-dire lancé sur une clé USB. Pour mac la plateforme de développement est mamp Dans ce cas le domaine virtuel est http://localhost:8888 et les pages doivent être placées dans le dossier htdocs. 1.3.1.3 L’arborescence Figure 4. arborescence EasyPHP Le dossier www est la racine du site localhost Le dossier mysql contient le serveur MySQL Le dossier apache contient le serveur Apache Le dossier php. Contient l’interpréteur de script PHP 1.3.1.4 Lancement d’EasyPHP Figure 5. raccourci de lancement de EasyPHP 1.8 Avant tout test sur un fichier php il faut lancer le serveur local Lancer Easyphp grâce au raccourci présent sur votre bureau ou dans votre barre de lancement rapide 1.3.2 Xampp Page 11/134 PHP - MySQL avec DreamWeaver Cette plateforme de développement existe pour plusieurs sytème d’exploitation. Comme pour Easyphp , le serveur Apache crée un domaine virtuel http://localhost REMARQUE : Apache s’installe sur le port 80. Si modification nécessaire aller dans apache/conf/http.conf et remplacer 80 par 8085 Page 12/134 PHP - MySQL avec DreamWeaver 1.3.2.1 Arborescence La racine du domaine localhost se trouve dans le dossier htdocs 1.3.2.2 lancement Le lancement de l’exécutable .xampp-control.exe lance l’application et ouvre le centre de contrôle universel qui est le panneau de contrôle XAMPP Avant tout test sur un fichier php il faut lancer le serveur local Page 13/134 PHP - MySQL avec DreamWeaver 1.3.3 Exercice2 1. Lancer Easyphp ou Xampp 2. Reprenez le fichier ‘exemple_php.php’ vu précédemment.et glissez le sous la racine www de Easyphp ou dans le dossier htdocs de xampp 3. tapez l’url http://localhost/exemple_php.php dans votre navigateur. 4. Que remarquez-vous ? 5. Regardez le code source. Page 14/134 PHP - MySQL avec DreamWeaver LA BASE DE DONNÉES MYSQL 1.4 LES BASES DE DONNEES RELATIONNELLES 1.4.1 Définitions Une Base de Données (BDD) est une grande quantité de données, centralisées ou non, pour les besoins d'une ou plusieurs applications, interrogeables et modifiables par un groupe d'utilisateurs travaillant en parallèle. Le Système de Gestion de Bases de Données (SGBD), est le logiciel qui gère la BDD. Il offre plusieurs fonctionnalités : accès des données, gestion des mises à jour, contrôle de la sécurité d’accès… Dans une base de données relationnelle, les données sont organisées (rangées) en tables, logiquement liées entre elles (mise en relation). C’est la structure la plus répandue aujourd’hui. Les tables sont composées de champs (colonnes) . Chaque champ d'une table est défini par un nom . Quand on crée un champ on doit dire quel types de donnée il est destiné à accueillir . Chaque table contient un champ qui permet d’identifier de façon unique chaque enregistrement d’une table : C'est la clé primaire . Ce champ est donc obligatoire et unique pour tous les enregistrements. Chaque table contient donc une seule et unique clé primaire. Elle est souvent de type numérique et auto-incrément. Exemple : schéma de la base de données contact Figure 6.schéma bdd 'Arnaud' établi avec l’outil DBDesigner Page 15/134 PHP - MySQL avec DreamWeaver 1.5 MYSQL Figure 7. logo de MySQL MySQL est l'œuvre d'une société suédoise, MySQL AB, fondée par David Axmark, Allan Larsson et Michael Widenius. Le nom MySQL vient de leur habitude à préfixer par « My » une grande partie de leurs dossiers, bibliothèques et outils. La fille de Michael Widenius était surnommée « My ». Le nom du logo de MySQL (le dauphin) Sakila, a été choisi par les créateurs de MySQL sur la base d'un concours. La première version de MySQL est apparue en 1995. MySQL est devenue la base de données open source la plus populaire au monde grâce à sa haute performance, sa fiabilité et sa simplicité d'utilisation.. Le langage utilisé pour interroger la base de données s’appelle le SQL. 1.6 L'OUTIL DE MODELISATION DBDESIGNER DBDESIGNER est un logiciel agréable et facile d'utilisation permettant de dessiner un modèle de données et de l’implémenter dans une bdd existante. Il a l'avantage de proposer l'exportation du modèle de la BDD sous forme d'image Il est téléchargeable sur http://www.fabforce.net/dbdesigner4/downloads.php pour mac il faut télécharger DBVisualizer sur http://www.dbvis.com/ Page 16/134 PHP - MySQL avec DreamWeaver 1.7 PRINCIPES DE BASE DE LA CONCEPTION D’UNE BASE DE DONNEES La conception d’une base de données est un sujet complexe. Il est toutefois possible dans des cas simples d’établir le schéma d’une BDD en respectant quelques principes de bases: • analyser les fonctionnalités de (s) application(s) qui utiliseront la BDD • chaque objet fonctionnel doit être stocké dans une table • les caractéristiques de chaque objet fonctionnel ou physique, doivent être stockées dans des colonnes (champs) • Une information ne doit être stockée qu’une seule fois : il faut éviter les redondances • chaque table doit avoir une colonne obligatoire qui l’identifie de manière unique : sa clé primaire • il existe 2 manières de mettre en relation deux tables : o La clé étrangère : le contenu de la colonne provient de la clé primaire d’une autre table (relation de 1 à n) o La table de liaison : elle sert à mettre en relation deux tables (relation de n à m) Page 17/134 PHP - MySQL avec DreamWeaver Exemple : Une école primaire souhaite créer une application intranet stockant des informations sur les continents, les pays et les villes, qui pourront servir en cours de géographie aux enseignants de l’école. Cette application ne sera accessible qu’aux enseignants de l’école. schéma de la base de données géographie Figure 8.schéma bdd 'geographie' établi avec l’outil DBDesigner 1.7.1 Exercice3 : conception d’une base de données. Créez le schéma de la base de données du site de La bibliothèque municipale.de la ville de Plaisir : Ce site offre les fonctionnalités suivantes − Abonnement en ligne − Modification des cordonnées d’un abonné par lui-même après qu’il se soit identifié par son numéro d’abonné et son mot de passe − Consultation en ligne (sur le site de la ville) du catalogue des livres avec leur disponibilité − Recherche sur le titre d’un livre − Recherche d’un livre par catégorie − Rechercher tous les livres d’un auteur donné (Correction dans fichier schema_biblio.doc) 1.7.2 Exercice4 : exo_casting_etape1.doc Page 18/134 PHP - MySQL avec DreamWeaver 1.8 L’INTERFACE PHPMYADMIN PhpMyAdmin est une interface web de gestion des bases de données MySQL . Réalisée en langage PHP, elle est conviviale et gratuite . La quasi-totalité des hébergeurs permettent d'utiliser PhpMyAdmin. PhpMyAdmin est livrée avec les plateformes de développement local (EasyPHP, Xampp). Figure 9. page d'accueil de phpMyAdmin Page 19/134 PHP - MySQL avec DreamWeaver 1.8.1 Exercice4 : création d’une base de données avec phpMyAdmin Créons la bdd dont nous avons établi le schéma précédemment. cliquez sur le menu Administration d’EasyPHP Cliquez sur Mysql administration Page 20/134 PHP - MySQL avec DreamWeaver On arrive sur l’interface de PhpMyAdmin Créez la base de donnée ‘bibliotheque’. L’interclassement est simplement le jeux de caractère utilisé. Nous prendrons le type utf8_bin qui est international. Créez les tables figurant dans le schéma établi dans l’exercice3 en vous aidant du contenu du fichier ‘types_donnees_base_Mysql.doc’ pour choisir le type des champs. 1.8.2 Insertion d'enregistrements avec phpMyadmin Dans le panneau latéral gauche, positionnez-vous sur la table désirée et cliquez sur l'onglet Insérer Page 21/134 PHP - MySQL avec DreamWeaver 1.8.3 Sauvegarde et restauration dune BDD 1.8.3.1 Sauvegarde Sélectionnez la base que vous souhaitez sauvegarder si vous en avez plusieurs. Cliquer sur l'onglet exporter et vous devriez obtenir l'écran ci-dessous Page 22/134 PHP - MySQL avec DreamWeaver Vous avez alors un écran composé de 3 ‘cadres : Le cadre exporter C'est ici que vous allez déterminez les tables ` sauvegarder, cliquer sur le lien tout sélectionner pour sélectionner en un seul clic toutes les tables. Pour une sélection discontinue, c'est comme dans Windows, conservez la touche Ctrl enfoncée, et avec un clic gauche, sélectionner les tables souhaitées. Sous la liste des tables vous trouverez différentes options vous permettant de définir un format d'export.. Par défaut c'est l'option SQL qui est cochée. Elle a pour conséquence de générer un fichier ‘nomdela base.sql’ au format texte facilement lisible avec un simple éditeur de texte. Page 23/134 PHP - MySQL avec DreamWeaver Le cadre options SQL Laisser les options cochées par défaut afin de transmettre la structure et les données de la base Le cadre transmettre . Cochez la case ‘Transmettre’ afin que la sauvegarde génère un fichier .sql qui servira à la restauration de la BDD. Dans ce cadre on peut même créer un format compressé pour les BDD volumineuses Page 24/134 PHP - MySQL avec DreamWeaver 1.8.3.2 Restauration 1. créer la bdd avec le même nom que la bdd restaurée. 2. cliquez sur l’onglet importer du panneau de gauche 3. cliquez sur importez fichier 4. sélectionnez le fichier .sql de sauvegarde 5. cliquez sur exécuter 1.8.3.3 Exercice 5 : Créer la base de données ‘geographie ‘ à partir du fichier geographie.sql qui se trouve dans le dossier annexe. Page 25/134 PHP - MySQL avec DreamWeaver 1.9 LE LANGAGE DE REQUETE SQL Lors de la sauvegarde de votre BDD vous avez pu constater que MySQL créait un script contenant des ordres SQL de création de table et de création de données. En effet, les MySQL ne connait qu'un seul langage : le SQL. Ci-après un petit tableau récapitulatif des principaux ordres SQL Requête SQL DROP DATABASE maBase; IF EXISTS Fonctionnalité suppression de la base de donnée nommée maBase si elle existe CREATE database maBase DEFAULT charset utf8 COLLATE utf8_general_ci; Création d’une base de données nommée maBase avec le jeux de caractère utf8 par défaut USE maBase; Sélectionne la base de données maBase CREATE TABLE maTable (id smallint(2) primary key auto_increment, nom varchar(64), age int(4) ); Création d’une table nommée maTable. Le reste de la requête contenu entre parenthèsesdéfinit les différents champs de la table. INSERT INTO maTable (nom,age) Insertion d’un enregistrement VALUES ('DUPONT',22); dans la table maTable. La valeur des champs doit être délimitée par des s’il sont numériques. ' sauf INSERT INTO maTable( nom, age Insertion de plusieurs ) enregistrements dans la table VALUES ('DURAND', 20), ‘maTable’ ('MONTOUTE', 26), ('RUBY', 55) ; SELECT * FROM maTable ; Lecture de tous les enregistrements de la table ‘maTable’ SELECT nom FROM maTable ; Lecture du champ ‘nom’ de tous les enregistrements de la table ‘maTable’ Page 26/134 PHP - MySQL avec DreamWeaver Requête SQL SELECT nom,age FROM maTable; Fonctionnalité Lecture des champ ‘nom’ et ‘age’ de tous les enregistrements de la table ‘maTable’ SELECT nom FROM maTable ORDER Lecture du champ ‘nom’ de BY age; tous les enregistrements de la table ‘maTable’ trié par age croissant Update maTable set nom=’odile’ where id=10; Mise à jour du champ nom de la table maTable pour l’enregistrement dont l’id=10 DELETE FROM maTable WHERE nom Suppression de l’enregistrement dont le nom = 'DUPONT'; est DUPONT dans la table ‘maTable’ DELETE FROM maTable ; Suppression de tous les enregistrements de la table ‘maTable’ DROP maTable; Suppression de la table ‘maTable’ Page 27/134 PHP - MySQL avec DreamWeaver Requête SQL Fonctionnalité Exercice6 : Créez en sql la bdd recette dont le schéma se trouve dans le fichier recette.png en vous aidant du fichier type_donnees _Mysql.doc pour le choix du type des données. Page 28/134 PHP - MySQL avec DreamWeaver PHP 1.10 PRESENTATION Php est un langage qui s'exécute côté serveur. Un fichier qui contient du php a une extension en .php. Lorsqu'un fichier est demandé au serveur Web, le code PHP inclus dans la page est exécuté sur le serveur. Le résultat HTML de cette exécution est inséré dans la page à la place du code PHP et la page est renvoyée au navigateur 1.11 UTILITE DE L’APPRENTISSAGE DU PHP 1.11.1 Le contenu rédactionnel La majorité des sites web comportent du texte qui change régulièrement. Ce texte écrit par des rédacteurs, est intégré dans que base de données et affiché dans des pages php : on parle alors de pages dynamiques . exemple :http://www.lafourchette.com , http://www.darty.com , etc... Un webdesigner, dans sa pratique quotidienne, sera donc amené à manipuler des pages contenant des lignes php et devra être en mesure de comprendre à quoi elles correspondent. 1.11.2 La factorisation Figure 10. organisation de la page d'1 site Sur un site, les pages ont généralement en commun, l’entête, le menu et le pied. Afin de limiter les risques d’erreur et de faciliter les mises à jour de ces éléments, on les écrit dans des fichiers à part, puis on les appelle dans les pages par la fonction php ‘include()’ ou ‘require_once()’. Page 29/134 PHP - MySQL avec DreamWeaver Figure 11. arborescence du site_librairie Le dossier ‘inc’ contient tous les fichiers qui seront appelé par inclusion. Ces fichiers ont été établi à partir du gabarit.html qui se trouve dans le dossier ‘html’ 1.11.3 Le MVC (modèle vue controleur) Sans aucune structure la navigation dans un site peut facilement devenir anarchique. Figure 12. navigation sans organisation Pour plusieurs raisons il est devenu commun de centraliser tous les échanges entre clients et serveur sur une seule page appelée « contrôleur ». Figure 13. navigation centralisée. Le contrôleur doit donc recevoir toutes les requêtes de la part du client et, en fonction de paramètres déterminés, décider de l'action à réaliser. Ceci se fait de transparente pour le client (l’internaute). Page 30/134 PHP - MySQL avec DreamWeaver Poussant un peu plus loin ce système, et afin d’améliorer l’organisation du travail de production de site web, on en est venu à appliquer le système MVC : model vue contrôleur. Dans cette organisation, les scripts sont regroupés en fonction de leurs fonctionnalités : Les modèles sont des scripts contenant les requêtes vers la BDD Les vues, sont les scripts contenant les éléments nécessaires à l’affichage de la page Le contrôleur centralise la demande de l’internaute et crée dynamiquement la page demandée à partir du modèle, et de la vue adéquate. Figure 14. schéma du MVC 1.12 NOTIONS DE BASE DU LANGAGE PHP php est un langage : il a donc une syntaxe et un vocabulaire. 1.12.1 Les balises php Les balises ouvrantes et fermantes php sont < ?php et ?> 1.12.2 La fonction echo La fonction echo est la fonction de base de php car elle permet d’afficher une ou plusieurs chaine de caractères. <?php echo "Bonjour Odile Rhino "; ?> Ce script affiche : 1.12.3 Le séparateur d’instruction Toutes les instructions PHP doivent se terminer par un point-virgule. Si le point-virgule est omis une erreur « parse error » est générée. Page 31/134 PHP - MySQL avec DreamWeaver Exemple : <?php echo "Bonjour " echo "Odile ! "; ?> Résultat : 1.12.4 Les variables PHP Une variable est une zone mémoire identifiée par un nom dont la valeur peut varier au cours d’un programme. En PHP le nom des variables commence toujours par le préfixe $. Exemple : <?php $nom= "Odile" ; echo $nom ; ?> 1.12.5 les constantes Une constante est une zone mémoire identifiée par un nom dont la valeur est définie lors de la création de la constante et demeure invariante tout au long du script PHP. Par convention on écrit les constantes en majuscules. <?php Page 32/134 PHP - MySQL avec DreamWeaver define ( 'FORMATEUR', 'Odile Rhino') ; echo '<strong>formatrice: ','FORMATEUR,'</strong>' ; ?> 1.12.6 L’opérateur de concaténation La concaténation est le fait de “coller” bout à bout deux chaînes de caractères, variables, constantes ou fonctions. En php l’opérateur de concaténation est le point . Exemple : <?php $promotion="Cavalli"; $section="Infographiste Multimédia "; define ( 'FORMATEUR', 'Odile Rhino') ; echo "$promotion - $section,<br><strong>formateur :".FORMATEUR.'</strong>' ; ?> Résultat 1.12.7 Les tableaux En PHP, un tableau est liste ordonnée d’éléments constitués de couples clé/valeur. Par défaut la clé est numérique et commence à la valeur 0. Toutefois il est possible de nommer les clés : on dit alors que le tableau est associatif. <?php $tab=array('pomme','prune','poire'); $tab2=array( 'couleur'=>'jaune', Page 33/134 PHP - MySQL avec DreamWeaver 'forme'=>'rond' ); print_r($tab);echo "<br>"; print_r($tab2); ?> pour accéder à une valeur donnée d'un tableau il faut utiliser la notation avec les crochets comme cidessous. <?php echo $tab[0]; // affiche le contenu de la première case du tableau $tab echo $tab2['couleur']; // affiche le contenu de la case nommée couleur du tableau $tab2 ?> 1.12.8 Les Fonctions Une fonction est un ensemble d’instruction que l’on peut réutiliser. Pour créer une fonction il faut d’abord la déclarer avec le mot clé function. Syntaxe : function nomDeLaFonction ($variable1,$variable2) { Instruction1 ; Instuction2 ; return $valeur ; } Exemple : <?php function dateFR_EN ($date){ $d=explode('/', $date); if(count($d) > 3) $date=$d[2].'-'.$d[1].'-'.$d[0]; return $date; }?> Pour utiliser une fonction il suffit de l’appeler. Syntaxe : $retour = nomDeLaFonction($parametre1, $parametre2) ; Exemple : <?php $val="13/07/2013"; echo dateFR_EN ($val); }?> 1.12.9 Inclure un fichier - les fonctions include () et require_once () Les fonctions include (), include_once() et require(), require_once () permettent d’inclure un fichier dans un script php Exemple : − Le fichier inclus.inc.php contient <h1>Je suis un titre provenant du fichier inclus.inc.php</h1> Page 34/134 PHP - MySQL avec DreamWeaver − Le fichier script.php contient <?php echo "inclusion de fichier<br/>"; require_once('inclus.inc.php'); ?> − Résultat L’extension du fichier à inclure est complètement libre 1. Les fonctions include() , include_once() , require() et require_once() se comportent comme des copier/coller (voir server side include de dreamweaver) 1.13 FACTORISER 1.13.1 Objectif Mettre les parties communes à toutes les pages (header, nav,footer….) dans des fichiers indépendants afin de faciliter leur modification future. Si le fichier inclus contient des liens, les chemins doivent être écrits en absolu. 1.13.2 Ecrans 1 On a coutume d’utiliser les extensions .inc et .inc.php. La deuxième offre l’avantage de ne pouvoir être ouverte par un navigateur et donc de protéger les paramètres confidentiels qui pourraient s’y trouver. Page 35/134 PHP - MySQL avec DreamWeaver Recette Baba au Rhum Recette Banderillas Page 36/134 PHP - MySQL avec DreamWeaver 1.13.3 Démarche Créez autant de gabarit HTML qu’il y a de designs différents dans votre site. Découpez les parties communes aux pages du site, en petits fichiers .inc.php 2 que vous mettrez dans un dossier inc : Ici nous ferons les fichiers "header.inc.php", "nav.inc.php" et footer.inc.php". Créez un modèle PHP contenant les appels aux fichiers .inc.php. Créez les documents PHP ( Ajout, Lister, Suppression, …) basés sur le modèle. 1.13.4 Le modèle html gabarit.html (à mettre dans le dossier ressource) <!DOCTYPE html "> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>gabarit</title> <link href="../css/style.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="conteneur"> <!-- conteneur de la page --> <header><h1>La Cuisine Facile</h1></header> <nav id="menu"> <!-- début du menu horizontal --> <a <a <a <a <a <a <a <a href="../index.php">Accueil</a> href="sommaireRecettes.php">Toutes les recettes</a> href="#">Entrée</a> href="sommairePlats.php">Plats</a> href="sommaireDesserts.php">Desserts</a> href="sommairePays.php">Recettes par Pays</a> href="sommaireDepot.php">Déposer une recette</a> href="sommaireGlossaire.php">Glossaire</a> </nav> <!-- fin du menu --> <div id="contenu"> <!-- début du contenu --> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ante augue, dignissim quis hendrerit sit amet, facilisis a nunc. Mauris eget purus vitae ipsum cursus lacinia ac ac nisi. Donec consectetur, libero in pharetra cursus, lectus enim dictum lorem, id interdum mauris enim a diam. Quisque ornare arcu et orci venenatis tincidunt. Suspendisse gravida dapibus mi, at faucibus nunc scelerisque vel. Aenean ullamcorper porta ipsum id lobortis. Aenean nunc massa, sodales sit amet condimentum id, lobortis sed massa. Pellentesque facilisis, ligula at rhoncus dapibus, ipsum arcu lacinia nunc, ut blandit est quam a purus. Donec laoreet elit eget elit commodo nec tincidunt erat venenatis. Duis nulla urna, venenatis sit amet placerat eget, blandit in nibh. Etiam sed dolor ac orci ornare 2 On a pris l’habitude d’utiliser l’extension .inc.php pour signifier qu’il s’agit d’une inclusion Page 37/134 PHP - MySQL avec DreamWeaver cursus nec in justo. Suspendisse at diam neque, egestas convallis lectus. Curabitur volutpat orci in elit gravida adipiscing. Suspendisse et neque a magna tempor lobortis. In dapibus augue sed mauris bibendum a suscipit nulla iaculis.</p> <p> Quisque ut felis ut eros posuere fermentum a sed magna. Suspendisse nec faucibus lacus. Cras eu leo ligula, in fringilla neque. Integer ante arcu, lobortis at euismod vel, congue sed risus. Proin quis lorem eu nulla adipiscing sagittis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In lacinia, dui eget elementum laoreet, quam elit mattis purus, nec faucibus neque purus ut ipsum. Aenean lobortis, erat sed tempus rutrum, urna est adipiscing ipsum, ut imperdiet nunc nisi a eros. Aliquam non lectus quis augue vehicula varius. Cras at est sit amet mi varius fermentum vel ut nunc. Maecenas lobortis tortor placerat urna auctor et commodo magna tristique. Suspendisse potenti. Nam sagittis, sapien ac tincidunt ornare, sapien velit tincidunt nisi, eu pharetra tellus massa quis massa. Donec non orci nec tortor molestie viverra. Cras sagittis aliquam felis, et tincidunt elit ultrices at. </p> <p>Cras interdum, felis vitae pellentesque tempus, eros justo posuere sapien, a venenatis erat augue eu mauris. Cras a enim id tellus varius sagittis ut tincidunt dolor. Etiam vitae malesuada elit. Maecenas viverra, orci eleifend mollis lobortis, leo turpis eleifend risus, eu porttitor enim nisi sit amet tortor. In ac vulputate sapien. Pellentesque leo leo, feugiat vitae tincidunt eu, vehicula ut ipsum. Pellentesque laoreet sem a nisi adipiscing interdum. Phasellus vel metus vel metus elementum scelerisque. Maecenas feugiat pulvinar massa consectetur rhoncus. <p> Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; </p> </div> <!-- fin du contenu --> <footer> <!-- mention de copyright Ne pas retirer sans autorisation écrite --> <p class="lien">© VotresiteCuisine.com Design by <a class="lien" href="http://www.nextformation.com" >boblo & poui</a></p> <!-- mention de copyright Ne pas retirer sans autorisation écrite --> </footer> <!-- fin du pied --> </div> <!-- fin du conteneur --> </body> </html> 1.13.5 Les fichiers .inc.php ddt.inc.php <!DOCTYPE html "> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> header.inc.php $url=http://localhost/cuisine/; ?> <!-- url du site --> <link href="<?php echo $url;?>css/style.css" rel="stylesheet" type="text/css" /> </head> Page 38/134 PHP - MySQL avec DreamWeaver <body> <div id="conteneur"> <!-- conteneur de la page --> <header><h1>La Cuisine Facile</h1></header> nav.inc.php <nav id="menu"> <!-- début du menu horizontal --> <a href="< ?php <a href="< ?php recettes</a> <a href="< ?php <a href="< ?php <a href="< ?php <a href="< ?php <a href="< ?php recette</a> <a href="< ?php echo $url ; ?> ">Accueil</a> echo $url ; ?> sommaireRecettes.php">Toutes les echo echo echo echo echo $url $url $url $url $url ; ; ; ; ; ?> ?> ?> ?> ?> sommaireEntrees.php">Entrée</a> sommairePlats.php">Plats</a> sommaireDesserts.php">Desserts</a> sommairePays.php">Recettes par Pays</a> sommaireDepot.php">Déposer une echo $url ; ?> sommaireGlossaire.php">Glossaire</a> </nav> <!-- fin du menu --> footer.inc.php <footer> <!-- mention de copyright Ne pas retirer sans autorisation écrite -> <p class="lien">© VotresiteCuisine.com Design by <a class="lien" href="http://www.nextformation.com" >boblo & poui</a></p> <!-- mention de copyright Ne pas retirer sans autorisation écrite -> </footer> </div> </body> </html><!-- fin du pied --> Page 39/134 PHP - MySQL avec DreamWeaver 1.13.6 Le modèle PHP gabarit.php ( à mettre dans le dossier ressources) <?php require_once('../inc/ddt.inc.php'); //inclusion du doctype ?> <title>gabarit</title> require_once('../inc/header.inc.php'); // inclusion de l’entête <?php require_once('../inc/bandeau.inc.php'); //inclusion du bandeau require_once('../inc /menu.inc.php'); // inclusion du menu ?> <div id="contenu"> <!-- début du contenu --> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ante augue, dignissim quis hendrerit sit amet, facilisis a nunc. Mauris eget purus vitae ipsum cursus lacinia ac ac nisi. Donec consectetur, libero in pharetra cursus, lectus enim dictum lorem, id interdum mauris enim a diam. Quisque ornare arcu et orci venenatis tincidunt. Suspendisse gravida dapibus mi, at faucibus nunc scelerisque vel. Aenean ullamcorper porta ipsum id lobortis. Aenean nunc massa, sodales sit amet condimentum id, lobortis sed massa. Pellentesque facilisis, ligula at rhoncus dapibus, ipsum arcu lacinia nunc, ut blandit est quam a purus. Donec laoreet elit eget elit commodo nec tincidunt erat venenatis. Duis nulla urna, venenatis sit amet placerat eget, blandit in nibh. Etiam sed dolor ac orci ornare cursus nec in justo. Suspendisse at diam neque, egestas convallis lectus. Curabitur volutpat orci in elit gravida adipiscing. Suspendisse et neque a magna tempor lobortis. In dapibus augue sed mauris bibendum a suscipit nulla iaculis.</p> <p> Quisque ut felis ut eros posuere fermentum a sed magna. Suspendisse nec faucibus lacus. Cras eu leo ligula, in fringilla neque. Integer ante arcu, lobortis at euismod vel, congue sed risus. Proin quis lorem eu nulla adipiscing sagittis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In lacinia, dui eget elementum laoreet, quam elit mattis purus, nec faucibus neque purus ut ipsum. Aenean lobortis, erat sed tempus rutrum, urna est adipiscing ipsum, ut imperdiet nunc nisi a eros. Aliquam non lectus quis augue vehicula varius. Cras at est sit amet mi varius fermentum vel ut nunc. Maecenas lobortis tortor placerat urna auctor et commodo magna tristique. Suspendisse potenti. Nam sagittis, sapien ac tincidunt ornare, sapien velit tincidunt nisi, eu pharetra tellus massa quis massa. Donec non orci nec tortor molestie viverra. Cras sagittis aliquam felis, et tincidunt elit ultrices at. </p> <p>Cras interdum, felis vitae pellentesque tempus, eros justo posuere sapien, a venenatis erat augue eu mauris. Cras a enim id tellus varius sagittis ut tincidunt dolor. Etiam vitae malesuada elit. Maecenas viverra, orci eleifend mollis lobortis, leo turpis eleifend risus, eu porttitor enim nisi sit amet tortor. In ac vulputate sapien. Pellentesque leo leo, feugiat vitae tincidunt eu, vehicula ut ipsum. Pellentesque laoreet sem a nisi adipiscing interdum. Phasellus vel metus vel metus elementum scelerisque. Maecenas feugiat pulvinar massa consectetur rhoncus. <p> Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; </p> </div> <!-- fin du contenu --> <?php require_once($url.'inc/pied.inc.php'); ?> Page 40/134 PHP - MySQL avec DreamWeaver 1.13.7 La page banderillas.php 1. Ouvrez gabarit.php. 2. Enregistrez-sous banderillas.php : dreamwever vous propose de mettre à jour les liens : répondez oui ! 3. Positionnez –vous dans la <div id="contenu">. 4. Ecrivez le contenu de votre page. 5. ctrl s pour enregistrer 1.13.8 La page sommaireDesserts.php Même démarche que précédemment. Page 41/134 PHP - MySQL avec DreamWeaver Chapitre 2 PHP ET DREAMWEAVER Nous allons créer un site ‘bibliotheque’ pour la bibliothèque municipale de l’exercice1 2.1 LE PRINCIPE Dreamweaver va vous permettre de créer un site dynamique relié à une base de données en générant pour vous tous les ordres d’interrogation à la base de données grâce à l’utilisation d’outils mis à votre disposition . 2.2 CREATION DU DOSSIER RACINE DU SITE Figure 15. créez le dossier 'bibliotheque' sous la racine htdocs de Xampp 2.3 CREATION DU SITE SOUS DREAMWEAVER Il s'agit, en fait de créer un lien vers un site existant. Lancez Dreamwaever Aller dans le Menu Site/nouveau site Sous Dreamweaver CS5 Figure 16.boite de dialogue version css5 Page 42/134 PHP - MySQL avec DreamWeaver Nom du site : mettez le nom choisi (ex : ‘bibliotheque’) Dossier racine du site : cliquez sur l’icône du dossier et sélectionnez le dossier ‘bibliotheque’ que nous avons créé précédemment Adresse http : http://localhost/bibliotheque Page 43/134 PHP - MySQL avec DreamWeaver 2.4 CHOIX DU SERVEUR D’EVALUATION Cliquez sur le lien Serveur du panneau latéral gauche Cliquez sur la touche + pour déclarer le serveur Remplissez la boite de dialogue Page 44/134 PHP - MySQL avec DreamWeaver Cochez la case serveur d’évaluation dans la boite de dialogue suivante Page 45/134 PHP - MySQL avec DreamWeaver CREATION DE PAGES DYNAMIQUES Sélectionnez Créer/PHP pour un document PHP ou Créer/Html pour un document HTML. Figure 17. création page dynamique sous dreamweaver Page 46/134 PHP - MySQL avec DreamWeaver 2.5 PRINCIPE GENERAL • • Une page dynamique contient des instructions php encadrées par <?php ?> Quand la page doit interroger la base de données MYSQL , le script php effectue les actions suivantes : ◦ écriture de la requête SQL ◦ connexion à la BDD ◦ exécution de la requête SQL ◦ récupération du résultat renvoyé par la BDD Les ordres php correspondants à ces actions, habituellement écrits manuellement par les développeurs, sont générés automatiquement par Dreamweaver. Pour ce faire, lors de la création de la 1ère page dynamique, il faut déclarer la BDD à dreamweaver et lui transmettre les paramètres de connexions 2.6 CONNEXION A LA BASE DE DONNEES Figure 18. cliquez sur licone base de données du panneau de droite Puis cliquez sur le bouton et ensuite cliquez sur La boite de dialogue ci-dessous apparaît Page 47/134 PHP - MySQL avec DreamWeaver Figure 19.écran de connexion à MySQL Nom de connexion : c’est le nom que vous voulez donner à cette connexion : cn_biblio ici. Serveur MySQL : localhost Nom d'utilisateur : un des utilisateurs que vous avez créé précédemment (ce peut être le profil root mais il vaut mieux éviter !!) Mot de passe : le mot de passe MySQL créé pour ce profil utilisateur Base de données : Cliquez sur localhost. pour obtenir la liste des BD du serveur Figure 20. écran de sélection de la base de données Sélectionnez la base de données à laquelle vous souhaitez vous connecter : ici c’est la bdd ‘bibliotheque’ Si tout c'est bien déroulé, vous cliquez sur Dans le panneau de droite vous pouvez voir la structure de la bdd ‘bibliotheque’. Page 48/134 PHP - MySQL avec DreamWeaver Un clic droit sur le nom de la connexion affiche le menu contextuel suivant : Sur votre site, un fichier portant le nom de la connexion a été créé dans le dossier Connections où sont stockées les connexions. Il ne faut surtout pas déplacer ou supprimer ce dossier, ni son contenu. C’est dans ce fichier que vous changerez les paramètres de connexion si nécessaire lorsque vous mettrez votre site en ligne ou que vous livrerez votre client ! Page 49/134 PHP - MySQL avec DreamWeaver Faites un double-clic sur le fichier pour en lire le contenu. Que remarquez-vous ? Remarque : afin de faciliter le rangement des fichiers, créez un dossier ‘php’ dans lequel vous mettrez toutes les pages dynamiques que vous écrirez, (sauf la page index.php),. et un dossier ‘html’ dans lequel vous rangerez vos pages statiques 2.7 FONCTIONNALITES D'UN SITE DYNAMIQUE FRONT-OFFICE • • • Visualisations (afficher) Recherche ajout (quelquefois) BACK-OFFICE • • • Connexion ajout, modification, visualisation, suppression pour chaque table de la BDD Recherche (quelquefois) Ces fonctionnalités peuvent être dans des pages séparées ou regroupées : c'est au créateur du site d'en décider. Dans la suite du cours, nous allons apprendre à créer les pages contenant ces fonctionnalités en utilisant Dreamwaever pour la génération des ordres d'interrogation de la BDD Page 50/134 PHP - MySQL avec DreamWeaver 2.8 AFFICHER UNE TABLE MYSQL DANS UNE TABLE HTML Objectif : afficher tous les enregistrements de la table ‘catégories’ dans un tableau HTML. 2.8.1 Ecran à réaliser Page 51/134 PHP - MySQL avec DreamWeaver 2.8.2 Démarche Nouveau fichier genres_tableau.php Pour afficher des données provenant de la base de données, il faut interroger la base de données. (ordre SQL SELECT) Pour cela utilisez l’outil jeux d’enregistrement de Dreamweaver Données dans l’onglet Créez le jeu d'enregistrements je_genre Après avoir validé sur , cliquez sur l’outil tableau dynamique Sélectionnez et validez sur Enregistrez puis testez votre page sous Firefox ou IE. Page 52/134 PHP - MySQL avec DreamWeaver 2.9 AFFICHER QUELQUES CHAMPS D'UNE TABLE Objectif : il n'est pas toujours nécessaire d'afficher tous les champs d'une table. Dans ce cas on sélectionne les champs à afficher. 2.9.1 Ecran à réaliser Page 53/134 PHP - MySQL avec DreamWeaver 2.9.2 Démarche La démarche est identique mais lors de la construction du jeu d'enregistrements vous sélectionnez les colonnes, les champs que vous voulez afficher Figure 21.jeu d'enregistrement sur nomgenre avec tri 2.10 TRIER Objectif : présenter les données triées (ordonnées) sur un champ. 2.10.1 Démarche Lorsque de la construction du jeu d'enregistrements, vous précisez que vous voulez trier sur un champ en le sélectionnant dans la liste : Trier. Le tri peut être croissant ou décroissant. Exercice : Afficher tous les auteurs triés par leur nom. 2.11 AFFICHER LE CONTENU D’UNE TABLE DANS UNE LISTE HTML 2.11.1 Objectif et écran à réaliser Objectif : afficher un champ d'une table directement dans le body. 2.11.2 Démarche Créez un nouveau fichier PHP. Créez un jeu d’enregistrements . Page 54/134 PHP - MySQL avec DreamWeaver Allez ensuite dans Liaisons/Jeu d'enregistrements. Cliquez-Glissez le CP dans le Body. Vous refaites la même manipulation pour ajouter un autre champ. Remarques : Vous pouvez passer par l'outil 2.12 REGION REPETEE Objectif : afficher la table Villes dans des balises usuelles (p, div, li ….) . Créez un Jeu d'enregistrements sur la table Villes. Page 55/134 PHP - MySQL avec DreamWeaver Ajoutez une <div>, un <p> et/ou des <labels>. cliquez-glissez le Cp et la Ville dans le Body. Vous obtenez ce code-ci : 1. 2. 3. 4. <body> <p><?php echo $row_Recordset1['cp']; ?> <?php echo $row_Recordset1['ville']; ?></p> </body> Sélectionnez de <p> à </p> Cliquez sur le bouton "Région répétées" . Vous obtenez ce code-ci : <body> <div> <?php do { ?> <p> <?php echo $row_Recordset1['cp']; ?> <?php echo $row_Recordset1['ville']; ?> </p> <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?> </div> </body> NB : vous pouvez faire la même chose avec des textes dynamiques Text), des cases à cocher, … , des champs de texte dynamiques (Input Page 56/134 PHP - MySQL avec DreamWeaver 2.13 AFFICHER UNE PHOTO EN FONCTION D’UN ENREGISTREMENT Objectif : Afficher une photo alors que le nom du fichier jpg est stocké dans un champ de la table et que le fichier correspondant est stocké sur le disque du serveur. Créez un nouveau fichier PHP. Créez un nouveau jeu d’enregistrement sur les champs prenomAuteur, nomAuteur et photoAuteur de la table auteurs Vous obtenez le jeu d’enregistrement suivant : Page 57/134 PHP - MySQL avec DreamWeaver Créez ensuite en HTML une balise <img> <img src="" height="100" /> Cliquez-glissez le champ photo entre les guillemets de l’attribut src. Vous obtenez. <img src="<?php echo $row_rs_auteurs['photoAuteur']; ?>" /> Cliquez-glissez les autres champs, puis faites (région répétée) Au final vous obtenez <?php do { ?> <p><img src="images/<?php echo $row_rs_auteurs['photoAuteur']; ?>" /> <?php echo $row_rs_auteurs['prenomAuteur']; ?> <?php echo $row_rs_auteurs['nomAuteur']; ?></p> <?php } while ($row_rs_auteurs = mysql_fetch_assoc($rs_auteurs)); ?> Notes : Pour le upload de fichiers cf l'annexe. Page 58/134 PHP - MySQL avec DreamWeaver 2.14 AFFICHER LA PHOTO ET L'URL CORRESPONDANT A L'ENREGISTREMENT COURANT 2.14.1 Objectif : l'écran à réaliser L'écran affiche la photo de l’auteur et un lien vers le site de l’auteur. Page 59/134 PHP - MySQL avec DreamWeaver 2.14.2 Démarche Créez un nouveau document PHP : photo_site_auteurs.php. Créez un jeu d'enregistrements Voilà le jeu d'enregistrements. sur la table auteurs. Comme précédemment , créez en HTML une balise <img> et cliquez-glissez le champ photoAuteur entre les guillemets de l’attribut src. Cliquez-glissez un à un, tous les autres champs. Pour le site créez une balise HTML <a href="" >le site </a>. cliquez-glissez le champ site entre les guillemets de l’attribut href Sélectionnez tout ce qui se trouve entre <p>et </p> et faites région répétée Testez. . Page 60/134 PHP - MySQL avec DreamWeaver 2.15 LA LISTE DYNAMIQUE 2.15.1 Petit rappel : la Liste menu html Copiez/collez le script suivant dans un nouveau fichier lecteur_insert.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>liste menu html</title> </head> <body> <form action="" method="get"> <table> <tr valign="baseline"> <td nowrap="nowrap" align="right">civilité</td> <td><select name="civilite"> <option>Mademoiselle</option> <option>Madame</option> <option>Monsieur</option> </select></td> </tr> <tr> <td nowrap="nowrap" align="right"><label>nom</label></td> <td><input name="nom" type="text" /></td> </tr> <tr> <td nowrap="nowrap" align="right"><label>prénom</label></td> <td><input name="prenom" type="text" /></td> </tr> <tr valign="baseline"> <td nowrap="nowrap" align="right"> </td> <td><input type="submit" value="Enregistrer" /></td> </tr> </table> </form> </body> </html> Dans ce script nous avons une liste menu statique. Page 61/134 PHP - MySQL avec DreamWeaver 2.15.2 Et la liste dynamique , qu’est-ce que c’est ? Une liste dynamique est une liste « menu » dont le contenu (les options) provient d’une base de données. et • Objectif Afficher un enregistrement d’une table en fonction d’une sélection faite dans une liste menu déroulante. La liste affiche les noms des auteurs mais permet de récupérer l'id de l'auteur. 2.15.3 Ecrans La page liste_auteurs.php On y choisit l’auteur à afficher parmi tous les auteurs existants dans la base La page un_auteur.php On y affiche les informations de l'auteur choisi précédemment. Page 62/134 PHP - MySQL avec DreamWeaver 2.15.4 Démarche Créez un premier document php (liste_auteurs.php) pour la liste et un deuxième document PHP (un_auteur.php) pour visualiser l’enregistrement 2.15.4.1 Le premier PHP : liste_auteurs.php Etape 1 :Création du formulaire Créez un document PHP et allez dans la barre d'outils Formulaire. Créez un formulaire de méthode GET, et dans "action" saisissez un_auteur.php. (c’est le programme qui va recevoir la valeur transmise par le formulaire. Créez une liste avec la balise <select> de HTML. Vous la nommerez "idAuteur" car nous affichons le nom de l’auteur pour l’internaute mais nous récupérons la valeur de idAuteur pour sélectionner l’enregistrement à afficher. Créez un bouton de type Envoyer (Submit). Dans "valeur" saisissez "Voir " Etape 2 :Création du jeu d’enregistrement utilisez l’outil jeux d’enregistrement de Dreamweaver pour créer un jeux d’enregistrement sur les auteurs . Sélectionnez les colonnes nomAuteur et idAuteur. Page 63/134 PHP - MySQL avec DreamWeaver Etape 3 : Création de la liste de sélection PHP Sélectionnez Liste de sélection dynamique vous reliez la liste au jeu d'enregistrements dans "Valeurs" vous sélectionnez ce que vous voulez récupérer : le champ idAuteur dans "Etiquettes" vous sélectionnez ce que vous voulez visualiser : le champ nomAuteur. Page 64/134 PHP - MySQL avec DreamWeaver 2.15.4.2 Le deuxième document PHP : un_auteur.php Créez un nouveau document PHP avec un tableau dynamique . Le jeu d'enregistrements est basé sur la table auteurs. Le critère de sélection est un Paramètre d'URL (car le formulaire du document précédent est en get) 3. Le nom de ce paramètre correspond au nom de la liste du document précédent. 2.16 AFFICHER UNE LISTE DE CHOIX ET UN TABLEAU DYNAMIQUE DANS LA MEME FENETRE 2.16.1 Objectif Afficher la liste/menu des villes, en sélectionner une, et lorsque l’on clique sur un bouton validation on affiche les abonnés de cette ville. Ce fichier PHP s’appelle sel_visu_abonnes_villes.php. 2.16.2 Ecran 3 Si le formulaire est en post le critère de sélection est une Variable de formulaire Page 65/134 PHP - MySQL avec DreamWeaver L’utilisateur a sélectionné Paris 12, les clients du 75012 s’affichent. 2.16.3 Démarche C’est assez proche de ce qui a été fait quelques paragraphes avant. Il faut : Créer un formulaire avec une liste HTML <select> (Liste/menu) et un bouton(Envoyer/submit). L’action du formulaire sera d’appeler la même page. Créer une liste PHP (Liste de sélection dynamique) basé sur un jeu d’enregistrements sur la table villes avec le cp et la ville. Créer un nouveau jeu d’enregistrements basé sur clients et conditionné à la liste déroulante. Créer un tableau dynamique. Page 66/134 PHP - MySQL avec DreamWeaver Première étape a) Création du formulaire avec la liste HTML : vous devez avoir ça : <form action="md.php" method="get"> <select name="liste_villes"> </select> <input type="submit" value="go" /> </form> b) Remplissage de la liste avec l'outil Données : "Liste de sélection dynamique". Deuxième étape Il faut créer un nouveau jeu d’enregistrements puis un tableau dynamique Pour créer un nouveau jeu d’enregistrements cliquez sur Vous créez ensuite le nouveau tableau dynamique Et vous l’associez au jeu d'enregistrements correspondant. Page 67/134 PHP - MySQL avec DreamWeaver 2.17 INSERTION D'UN ENREGISTREMENT Objectif : créer un formulaire permettant d’enregistrer une nouvelle catégorie 2.17.1 L'écran à réaliser 2.17.2 La démarche Créez une nouvelle page dynamique php ‘insert_categorie.php’. Dans la barre d’outil du haut, cliquez qur l’onglet ‘Données’ et sélectionnez ‘Assistant de formulaire d’insertion d’enregistrement’ Figure 22. assistant d'insertion Vous obtenez l’écran suivant : Sélectionnez la connexion cn_biblioheque Sélectionnez la table catégories. après l’insertion allez à : sélectionnez le fichier tableau_categories.php que vous avez créé. Page 68/134 PHP - MySQL avec DreamWeaver Le champ ‘id_categorie‘ étant en auto-incrément, nous n’allons pas l’afficher. Cliquer sur le pour l’enlever du formulaire. Validez sur OK. testez le : ou F12. Remarques : Si la clé existe déjà, vous avez un message d'erreur Si un des champs est vide vous avez un message d'erreur (Ceci dépend de la structure de la table; ici les 2 champs doivent être NOT NULL). L'assistant nécessite la création d'un formulaire HTML au préalable. Il peut être utile si tous les champs d'une table ne sont pas obligatoires et que vous voulez restreindre la saisie aux seuls champs obligatoires. Exercice : Créez les pages d’insertions des villes et des pays 2.18 L'AJOUT DE L’ABONNE AVEC L'ASSISTANT ET UNE LISTE 2.18.1 Principe La table ville est en clé étrangère dans la table abonne : cela signifie que dans le champ abonneville de la table abonne, doit contenir la primary key de la ville de l'abonné. Il faut donc proposer un menu déroulant dans lequel pour le confort de celui qui saisit , on affiche le nom de la ville mais par lequel on récupère l'id de la ville A chaque fois qu'il y aura une contrainte de clé étrangère , il faudra systématiquement proposé un menu déroulant. 2.18.2 Objectif et écran à réaliser Saisir un nouvel enregistrement dans la table abonnes avec une liste déroulante pour la ville en utilisant les assistants. Page 69/134 PHP - MySQL avec DreamWeaver 2.18.3 Démarche La liste Créez d'abord un jeu d'enregistrements sélectionnant les champs CP et Ville. nommé rs_villes basé sur la table Villes en Lancer l'Assistant de formulaire d'insertion d'enregistrement Pour le champ CP sélectionnez Menu dans l'option "Afficher en tant que". Cliquez sur le bouton Sur l’écran qui s’affiche sélectionnez le jeu d’enregistrement rs_villes Page 70/134 PHP - MySQL avec DreamWeaver 2.19 LA SUPPRESSION D'UN ENREGISTREMENT 2.19.1 Objectif et écrans Objectif : supprimer un enregistrement dans la table Villes en fonction du CP saisi dans un champ de texte d'un formulaire d'une page HTML. Page 71/134 PHP - MySQL avec DreamWeaver 2.19.2 Démarche Créez un document HTML (villes_pre_sup.html) avec un formulaire HTML contenant un champ de texte, un <input type="text" />, pour saisir le CP à supprimer et un bouton "Envoyer" ie un bouton "Submit". Créez un document PHP (villes_sup.php) pour supprimer un enregistrement. Le document HTML <head> <meta http-equiv="Content-Type" content="text/html; charset=utf8" /> <title>villes_pre_sup.html</title> </head> <body> <form action="villes_sup.php" method="get"> Saisir le CP à supprimer : <input name="cp" type="text" /> <input name="" type="submit" value="go"/> </form> </body> </html> Le document PHP Sélectionnez dans la barre d'outils Supprimez l'enregistrement Et vous remplissez les zones nécessaires Attention : les noms doivent avoir la même casse; aussi bien dans le formulaire HTML que dans les $_GET(paramètre d’URL) du code PHP. Page 72/134 PHP - MySQL avec DreamWeaver 2.20 SUPPRESSION A PARTIR D'UNE LISTE 2.20.1 Objectif et écrans à réaliser Objectif : Supprimer une ville à partir d'une liste de choix. Page 73/134 PHP - MySQL avec DreamWeaver 2.20.2 Démarche Deux documents PHP vont être créés. Créez d'abord un document PHP (villes_pre_sup_liste.php) avec un formulaire qui contient une liste déroulante, nommée cp, qui affiche les noms des villes et récupère le CP de la ville sélectionnée et un bouton de type "Envoyer". Créez ensuite un document PHP qui supprime la ville sélectionnée ou mieux réutilisez le document précédent (villes_sup.php). Page 74/134 PHP - MySQL avec DreamWeaver 2.21 SUPPRESSION A PARTIR D’UN TABLEAU DYNAMIQUE 2.21.1 Objectif et écrans à réaliser Objectif : supprimer une ville à partir de l’affichage d’un tableau dynamique Page 75/134 PHP - MySQL avec DreamWeaver Démarche : Créer une nouvelle page php nommée console_ville.php Créer un jeux d’enregistrement rs_villes sur la table ville Créer un tableau dynamique 1. Dans le source on obtient le code suivant : <table> <tr> <td>cp</td> <td>ville</td> </tr> <?php do { ?> <tr> <td><?php echo $row_rs_ville['cp']; ?></td> <td><?php echo $row_rs_ville['ville']; ?></td> </tr> <?php } while ($row_rs_ville = mysql_fetch_assoc($rs_ville)); ?> </table> 2. ajouter une cellule avec le mot suppression dans la première ligne comme ceci <tr> <td>cp</td> <td>ville</td> <td>suppression</td> </tr> 3. ajouter dans la cellule, un lien vers la même page avec passage de variable comme ci-dessous : <tr> <td>cp</td> <td>ville</td> <td> <a href="console_ville.php?cp="></td> </tr> 4. cliquer/glisser le champs cp du jeux d’enregistrement, pour obtenir le même code que ci-après : <tr> <td>cp</td> <td>ville</td> <td> <a href="console_ville.php?cp=<?php echo $row_rs_ville['cp']; ?>"></td> </tr> Sélectionnez dans la barre d'outils Supprimez l'enregistrement Et vous remplissez les zones nécessaires Page 76/134 PHP - MySQL avec DreamWeaver 2.22 LA MODIFICATION D'UN ENREGISTREMENT 2.22.1 Objectif et démarche Objectif : Modifier un enregistrement de la table Villes en l'ayant sélectionné au préalable dans une liste déroulante. Démarche : Créer un document PHP dans lequel vous allez créer une liste pour sélectionner la ville à modifier. Créer un deuxième document PHP dans lequel vous allez utiliser l'assistant pour produire une page de modification d'une Ville. Document 1 : sel_villes_modifier.php La liste des villes avec le bouton pour valider dans un formulaire. Document 2 : villes_modifier.php L'écran de saisie des modifications de la ville sélectionnée précédemment (ici Paris 16 a été sélectionné). Et l'on va le modifier en PARIS 16ème. Document 3 facultatif : villes_modification_validation.html Troisième écran facultatif avec un message Page 77/134 PHP - MySQL avec DreamWeaver • Démarche détaillée Vous allez créer deux pages PHP (Eventuellement une troisième page HTML pour afficher un message comme quoi la modification a été prise en compte). La première pour afficher la liste des villes. Elle comportera un bouton pour valider la sélection. La deuxième pour afficher les données de la ville sélectionnée, pouvoir les modifier et un bouton pour valider la modification. • La première page php villes_liste_modifier.php Cf le paragraphe sur l'affichage des villes dans une liste déroulante. Il faut créer une page PHP avec un formulaire et une liste déroulante à l'intérieur ainsi qu'un bouton de type envoyer pour aller sur l'autre page. Appelez la liste liste_villes. La valeur de l'attribut action du formulaire est "villes_modifier.php". Puis créez la liste dynamique. • La deuxième page PHP villes_modifier.php Vous sélectionnez : Assistant de formulaire de mise à jour des enregistrements Le jeu d'enregistrements est conditionné à la valeur de liste_villes. Page 78/134 PHP - MySQL avec DreamWeaver On laisse le CP en tant que Texte; c'est la clé primaire. On juge qu'on ne doit pas pouvoir la modifier; et la modification du nom de la ville se fait en fonction de cette valeur de CP. VISUALISATIONS AVANCEES … 2.23 ENCORE UN PEU DE SQL L’ordre SELECT sert à sélectionner les enregistrements d’une base de données. Créez plusieurs auteurs dont le nom commence par la lettre ‘p’. Sous phpMyAdmin copiez/collez les lignes suivantes dans le panneau SQL SELECT nom_auteur, prenom_auteur FROM auteur WHERE nom_auteur LIKE 'p%' Que remarquez vous ? Exercice: écrire l’ordre SQL permettant d’afficher toutes les catégories commençant par la lettre ‘r’ écrire l’ordre SQL permettant d’afficher toutes les formations contenant la lettre ‘a’ Page 79/134 PHP - MySQL avec DreamWeaver 2.24 RECHERCHE A PARTIR D’UN CHAMPS D’INSERTION : FILTRER 2.24.1 Principe : notion de Filtre Filtrer consiste à ne prendre que les enregistrements correspondants à un critère précisé en entrée (un peu comme le filtre en entrée de boite de nuit) 2.24.2 Objectif et démarche Objectif : afficher les auteurs dont le nom contient le mot saisi dans un champ de recherche . La page s’appelle rechercheAuteurs .php La saisie du nom se fera dans un formulaire HTML , avec un simple champ d'insertion (input type text) Le résultat sera affiché dans la même page, dans un tableau dynamique La démarche pour créer le tableau dynamique est la même que pour les exercices précédents mais lors de la construction du jeu d'enregistrements vous ajoutez un filtre.. Le filtre est basé sur la valeur qui est passé dans l’url en provenance du formulaire de sélection. Page 80/134 PHP - MySQL avec DreamWeaver 2.24.3 La création du formulaire HTML Petite révision : création d’un formulaire html: Allez dans le <body> Affichez l'onglet Formulaires Page 81/134 PHP - MySQL avec DreamWeaver Créez un formulaire en cliquant sur l’icône , Sélectionnez le fichier qui affichera le résultat (un_auteur.php) Créez un label <label></label>, Créez un zone de saisie , que vous appelez nomAuteur (attribut name) Créez un bouton envoyer . Page 82/134 PHP - MySQL avec DreamWeaver 2.24.4 La création du tableau dynamique . Le jeu d'enregistrements est le suivant : sur le filtre vous sélectionnez nomAuteur puis Paramètre d'URL et vous laissez nomAuteur en face (puisqu'il correspond au nom du champ de texte dans le formulaire du fichier précédent 4). Dans la fenêtre Tableau Dynamique vous sélectionnez 4 Le critère peut être : FiltreProvenanceParamètre d'URLD'un formulaire de méthode GETVariable de formulaireD'un formulaire de méthode POSTCookieD'un cookieVariable de sessionD'une variable de sessionVariable de serveurD'une variable de portée applicativeValeur entréeD'une constante saisie ici Page 83/134 PHP - MySQL avec DreamWeaver 2.25 LA PAGINATION 2.25.1 Objectif et écran Afficher 1 ou plusieurs enregistrements par pages, mais pas tous, avec des liens ou des boutons de navigation. Ceci est indispensable lorsque vous avez de nombreux enregistrements dans une table ou dans le résultat de la requête. A titre d'exemple afficher la table Villes enregistrement par enregistrement avec des liens ou des boutons de navigation. Les champs de la table sont affichés les uns en dessous des autres. ou Page 84/134 PHP - MySQL avec DreamWeaver 2.25.2 Démarche Créez une page php (villes_paginees.php) Créez un jeu d'enregistrements en cliquant sur . Cliquez-glissez le cp et la ville. Ajoutez des <br />. Vous avez ceci comme code <body> CP : <?php echo $row_rs_villes['cp']; ?><br /> Ville : <?php echo $row_rs_villes['ville']; ?><br /> </body> Sélectionnez les lignes que vous venez d'ajouter (sans les balises <body> et </body>. Cliquez sur région répétée et saisissez 1 dans "Afficher". Cliquez sur (barre de navigation du jeu d'enregistrements) pour obtenir les liens ou les boutons Premier/Précédent/Suivant/Dernier. Page 85/134 PHP - MySQL avec DreamWeaver 2.25.3 Script <?php require_once('Connections/cn_cours.php'); ?> <?php $currentPage = $_SERVER["PHP_SELF"]; $maxRows_rs_villes = 1; $pageNum_rs_villes = 0; if (isset($_GET['pageNum_rs_villes'])) { $pageNum_rs_villes = $_GET['pageNum_rs_villes']; } $startRow_rs_villes = $pageNum_rs_villes * $maxRows_rs_villes; mysql_select_db($database_cn_cours, $cn_cours); $query_rs_villes = "SELECT * FROM villes"; $query_limit_rs_villes = sprintf("%s LIMIT %d, %d", $query_rs_villes, $startRow_rs_villes, $maxRows_rs_villes); $rs_villes = mysql_query($query_limit_rs_villes, $cn_cours) or die(mysql_error()); $row_rs_villes = mysql_fetch_assoc($rs_villes); if (isset($_GET['totalRows_rs_villes'])) { $totalRows_rs_villes = $_GET['totalRows_rs_villes']; } else { $all_rs_villes = mysql_query($query_rs_villes); $totalRows_rs_villes = mysql_num_rows($all_rs_villes); } $totalPages_rs_villes = ceil($totalRows_rs_villes/$maxRows_rs_villes)-1; $queryString_rs_villes = ""; if (!empty($_SERVER['QUERY_STRING'])) { $params = explode("&", $_SERVER['QUERY_STRING']); $newParams = array(); foreach ($params as $param) { if (stristr($param, "pageNum_rs_villes") == false && stristr($param, "totalRows_rs_villes") == false) { array_push($newParams, $param); } } if (count($newParams) != 0) { $queryString_rs_villes = "&" . htmlentities(implode("&", $newParams)); } } $queryString_rs_villes = sprintf("&totalRows_rs_villes=%d%s", $totalRows_rs_villes, $queryString_rs_villes); ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Document sans titre</title> </head> <body> <!--Début de la boucle d'affichage des enregistrements --> <?php do { ?> <!--Affichage des champs --> Page 86/134 PHP - MySQL avec DreamWeaver <?php echo $row_rs_villes['cp']; ?><br /> <?php echo $row_rs_villes['ville']; ?> <!--Affichage des "boutons" premier, précédent, suivant et dernier --> <table border="0" width="50%" align="center"> <tr> <td width="23%" align="center"> <?php if ($pageNum_rs_villes > 0) { // Show if not first page ?> <a href="<?php printf("%s?pageNum_rs_villes=%d%s", $currentPage, 0, $queryString_rs_villes); ?>">Premier</a> <?php } // Show if not first page ?> </td> <td width="31%" align="center"> <?php if ($pageNum_rs_villes > 0) { // Show if not first page ?> <a href="<?php printf("%s?pageNum_rs_villes=%d%s", $currentPage, max(0, $pageNum_rs_villes - 1), $queryString_rs_villes); ?>">Précédent</a> <?php } // Show if not first page ?> </td> <td width="23%" align="center"> <?php if ($pageNum_rs_villes < $totalPages_rs_villes) { // Show if not last page ?> <a href="<?php printf("%s?pageNum_rs_villes=%d%s", $currentPage, min($totalPages_rs_villes, $pageNum_rs_villes + 1), $queryString_rs_villes); ?>">Suivant</a> <?php } // Show if not last page ?> </td> <td width="23%" align="center"> <?php if ($pageNum_rs_villes < $totalPages_rs_villes) { // Show if not last page ?> <a href="<?php printf("%s?pageNum_rs_villes=%d%s", $currentPage, $totalPages_rs_villes, $queryString_rs_villes); ?>">Dernier</a> <?php } // Show if not last page ?> </td> </tr> </table> <!--Fin de la boucle d'affichage des enregistrements --> <?php } while ($row_rs_villes = mysql_fetch_assoc($rs_villes)); ?> </body> </html> <?php mysql_free_result($rs_villes); ?> En rouge et en gras l'élimination des "suppressions" des boutons Page 87/134 PHP - MySQL avec DreamWeaver 2.25.4 En plus !!! Si vous voulez aussi afficher l'état de navigation cliquez sur le bouton Le code ajouté <!--Affichage du numéro de l'enregistrement et du nombre total d'enregistrements dans la table --> Enregistrements <?php echo ($startRow_rs_villes + 1) ?> à <?php echo min($startRow_rs_villes + $maxRows_rs_villes, $totalRows_rs_villes) ?> sur <?php echo $totalRows_rs_villes ?> Et en rouge et en gras le code à enlever Page 88/134 PHP - MySQL avec DreamWeaver 2.25.5 Un peu plus encore Objectif : choisir un à un les "éléments" de navigation à afficher. Navigation. Les quatre derniers boutons correspondent aux boutons première page, page précédente, page suivante ou dernière page (ou premier, précédent, suivant, dernier). Si vous ne voulez pas avoir les quatre boutons d'office, vous cliquez successivement sur les boutons que vous voulez afficher; "Précédent" et "Suivant" par exemple. Etat de la navigation. Les trois derniers boutons permettent d'avoir la position du premier et du dernier enregistrement d'un bloc ainsi que le nombre total d'enregistrements. Si vous ne voulez pas avoir les quatre boutons d'office, vous cliquez successivement sur les boutons que vous voulez afficher; "Enregistrement de début" et "Nombre total" par exemple. Page 89/134 PHP - MySQL avec DreamWeaver Affichage conditionnel des éléments de navigation. Vous pouvez choisir d'afficher ou de ne pas afficher un élément de navigation (ou autre chose d'ailleurs) en fonction de l'état de la navigation. Par exemple, vous pouvez choisir de ne pas afficher le "bouton" précédent si le premier enregistrement est affiché; dans cet exemple-là, vous sélectionnez le "bouton" premier dans le code et vous cliquez sur "Afficher si ce n'est pas la première page". Page 90/134 PHP - MySQL avec DreamWeaver 2.26 VISUALISATION DE DONNEES PROVENANT DE PLUSIEURS TABLES (JOINTURE) 2.26.1 Encore un peu de SQL - Les jointures 2.26.1.1 Rappel Pour afficher les noms et prénoms de tous les enregistrements de la table abonnes nous écrivons SELECT prenom,nom from abonnes. Syntaxe : SELECT champs1[,champs2] FROM table [WHERE condition] Entre [] les options facultatives. 2.26.1.2 Lire dans plusieurs tables Pour voir dans quelle ville habite un abonné nous sommes obligés de noter le cp incrit dans le champ cp de la table abonnes puis d’aller voir à quelle ville il correspond dans la table ville. Nous sommes donc obligés de lire sur deux tables. En langage sql , on dira que nous faisons une jointure 2.26.1.3 Syntaxe 1 Copiez/collez dans le panneau sql la ligne suivante : SELECT idAbonne,prenomAbonne, nomAbonne , ville from abonnes,villes where cpAbonne=cp ; Que remarquez vous ? Cette syntaxe corresppond à une équi-jointure : lecture sur deux tables reliées par une clause where. Seuls les enregistrements satisfont à la clause sont afficher. Dans le cas présent, les abonnés dont le cp n’est pas renseigné ne sont pas affichés. 2.26.1.4 Syntaxe 2 Copiez/collez dans le panneau sql la ligne suivante : SELECT idAbonne,prenomAbonne, nomAbonne , ville from abonnes left join villes on cpAbonne=cp ; Que remarquez vous ? Cette syntaxe correspond à une jointure gauche les enregistrements de la table de gauche sont affichez même s’ils n’ont pas de correspondance dans la table de droite. . Autre syntaxe Copiez/collez dans le panneau sql la ligne suivante : Page 91/134 PHP - MySQL avec DreamWeaver SELECT idAbonne,prenomAbonne, nomAbonne , ville from abonnes right join villes on cpAbonne=cp ; Que remarquez vous ? Cette syntaxe corresppond à une jointure droite les enregistrements de la table de droite sont affichez même s’ils n’ont pas de correspondance dans la table de gauche . Dans le cas présent, tous les cp sont pas affichés. 2.26.2 Objectif Afficher des données provenant de plusieurs tables. A titre d'exemple afficher dans un tableau HTML la liste des abonnés avec le nom de la ville où ils habitent. Les données se trouvent dans les tables abonnes et villes. 2.26.3 Ecran à réaliser Page 92/134 PHP - MySQL avec DreamWeaver 2.26.4 Jeu d'enregistrements avancé. Vous utilisez l'assistant tableau dynamique Au moment de la création du jeu d'enregistrements vous cliquez sur le bouton L'écran précédent apparaît. Accéder aux champs des tables vous cliquez le +. Pour sélectionner un champ à afficher vous cliquez sur le nom du champ puis sur le bouton SELECT, et vous recommencez pour chaque champ. Enfin pour avoir une jointure correcte vous cliquez sur les champs de liaison (clé primaire – clé étrangère) et pour chaque champ vous cliquez sur le bouton WHERE. Vous remplacez le AND par un = . Pour trier, vous sélectionnez un champ et vous cliquez sur le bouton ORDER BY. Pour la jointure Notes : Si vous travaillez sur plus de 2 tables, et ceci autant de fois qu'il y a de liaisons (Vous rajoutez un = entre chaque champ d'une liaison et vous rajoutez un AND entre chaque liaison différente). Page 93/134 PHP - MySQL avec DreamWeaver 2.27 RECHERCHES MULTICRITERES 2.27.1 Objectif Filtrer les d'enregistrements en fonction de plusieurs critères. Exemple : Effectuer dans la table ‘abonnes’ une sélection sur le nom et sur le c ; par exemple tous les abonnés du "75001" dont le nom contient "e". 2.27.2 Ecrans Le formulaire multi-critère Le tableau des résultats Page 94/134 PHP - MySQL avec DreamWeaver 2.27.3 Démarche Créez un formulaire HTML dans un document HTML multi_criteres.html. Les <input text> sont nommés nomAbonne et cp. Créez un document PHP multi_criteres.php. Créez un Jeu d'enregistrements avec un filtre sur nomAbonne Passez en mode . Ajoutez un deuxième argument en cliquant sur Modifiez la condition WHERE en cliquant sur . Remarque : Pour donner la possibilité de chercher à partir d’un cp incomplet , par exemple avec le numéro du département, il suffit d’utiliser l’opérateur LIKE avec le jocker % pour la condition sur le cp . et dans ce cas il faut impérativement déclarer que le colname2 est de type text Page 95/134 PHP - MySQL avec DreamWeaver 2.28 MODIFIER UN JEU D’ENREGISTREMENTS Vous voulez modifier un jeu d’enregistrements existant, ajouter une colonne, enlever une colonne, positionner un filtre, … Dans votre document PHP; vous allez dans la fenêtre Application, l’onglet Liaisons, vous sélectionnez un jeu d’enregistrements et vous double-cliquez dessus Ou bien en allant dans la fenêtre Application, l’onglet Comportements de serveur, vous sélectionnez le jeu d’enregistrements et vous double-cliquez dessus Page 96/134 PHP - MySQL avec DreamWeaver Page 97/134 PHP - MySQL avec DreamWeaver L'AUTHENTIFICATION 2.29 CONNEXION ET AUTHENTIFICATION DE L'UTILISATEUR 2.29.1 Objectif et Ecrans à réaliser Objectif : réaliser un écran d'authentification, pour sécuriser l'accès au site. Connexion réussie Connexion ratée 2.29.2 Démarche Créez une table pour les utilisateurs; appelons-la utilisateurs. Structure Données Utilisateurs(ut, mdp, qualite) p, b, bo a, f, fo Créez trois pages : Une page pour rediriger lorsque la connexion a réussie (connexion_reussie.html) Une page pour rediriger lorsque la connexion a échoué (connexion_ratee.html) La page de connexion : authentification.php Cette dernière page va être créée avec l'assistant PHP Elle doit au préalable contenir un formulaire nommé "authentification" avec deux champs de texte pour la saisie du nom de l'utilisateur (nommé it_ut) et du mot de passe (nommé it_mdp) et un bouton de type Envoyer (Submit) avec comme texte Valider. Il faut que les noms des éléments HTML soient différents des noms des champs de la table. Ensuite allez dans Onglet Données et cliquez sur Connecter l’utilisateur Page 98/134 PHP - MySQL avec DreamWeaver Page 99/134 PHP - MySQL avec DreamWeaver 2.30 DECONNEXION • Objectif Déconnecter l'utilisateur. Utiliser l'assistant : Remplissez cette fenêtre de cette façon-ci ou de cette façon-là • Ecran correspondant à "lien cliqué" Note : préférez l'option 2, l'utilisateur ne cliquera qu'une seule fois pour se déconnecter. Page 100/134 PHP - MySQL avec DreamWeaver 2.31 RESTREINDRE L'ACCES A UNE PAGE EN FONCTION DE LA CONNEXION (ON/OFF) 2.31.1 Objectif et écrans Restreindre l'accès à une page en fonction de l'état de la connexion (On/OFF). L'utilisateur doit être connecté pour visualiser la page en question. Si l'utilisateur n'est pas connecté ou est déconnecté la page ne sera pas accessible. En fait Dreamweaver joue avec la variable de session créée lors de la connexion. ou bien en cas d'échec Page 101/134 PHP - MySQL avec DreamWeaver 2.31.2 Démarche La page HTML à afficher en cas d'échec (absence_de_connexion.html) doit exister au préalable. Créez un nouveau document PHP (villes_tableau_sous_controle.php) et créez un tableau dynamique sur Villes par exemple. Ensuite lancer l'assistant Cette boîte de dialogue apparaît; cliquez sur "Nom et mot de passe", puis cliquez sur "Parcourir" pour affectez le nom de la page de refus. Testez : Connectez-vous Affichez la page villes_tableau_sous_controle.php… c'est OK Déconnectez-vous Affichez la page villes_tableau_sous_controle.php… c'est KO Page 102/134 PHP - MySQL avec DreamWeaver 2.32 RESTREINDRE L'ACCES A UNE PAGE EN FONCTION DE LA QUALITE DE L'UTILISATEUR et 2.32.1 Objectif Contrôler l'usage du site. La visualisation est possible ou impossible en fonction de la "qualité" du client (Back-office/Front-office, …). Page 103/134 PHP - MySQL avec DreamWeaver 2.32.2 Démarche Reprendre la table utilisateurs et éventuellement ajoutez le champ "qualite", ce qui donne cette structure finale : utilisateurs (ut, mdp, qualite). Dans cette table utilisateurs les valeurs pour le champ "qualite" sont bo, fo, adm, … Créez d'abord un document HTML pas_bo.html, pour afficher un message d'erreur aux utilisateurs qui ne sont pas Opérateurs Back-Office. Créez ensuite un document PHP (authentification_qualifiee.php) pour la connexion au site. Dans ce document créez un formulaire nommé "authentification". Créez deux Input Text (it_ut, it_mdp). Créez un bouton Submit (Envoyer). Lancez l'assistant "Connecter l'utilisateur" En bas sélectionnez le bouton radio Ouvrez la liste . … et sélectionnez "qualite". Page 104/134 PHP - MySQL avec DreamWeaver Les pages à accès restreints Ensuite créez autant de pages PHP que nécessaire pour le BO (Opérateur Back-Office) et lui seul. Ajoutez le comportement serveur de contrôle d'accès : Sélectionnez . . Cliquez sur le bouton Cliquez sur le bouton Et saisissez "bo" dans nom. Validez sur OK Dans la première fenêtre cliquez sur le bouton message d'erreur Enfin validez encore sur OK Testez : Connectez-vous avec un utilisateur BO Ouvrez un page réservez aux BO Connectez-vous avec un utilisateur FO. Ouvrez un page réservez aux BO pour sélectionner la page HTML de Si on veut spécifier plusieurs niveaux de qualite autorisés, il faut les sélectionner avant de quitter l’utilitaire – le fait de les ajouter à la liste des droits ne suffit pas !!! Page 105/134 PHP - MySQL avec DreamWeaver 2.33 VERIFIER LE NOM D'UN NOUVEL UTILISATEUR 2.33.1 Objectif et écrans Si deux utilisateurs ne peuvent avoir le même nom, vous pouvez pour contrôler, utiliser ce comportement serveur . 2.33.2 Démarche Il faut en premier lieu créer un fichier HTML (utilisateur_deja_existant.html) qui affichera un message en cas d'échec d'insertion. Ensuite il faut créer un deuxième document, PHP cette fois (utilisateur_insert.php), pour saisir le nouvel utilisateur. Il faut au préalable créer un formulaire de saisie de nouvel utilisateur avec l'assistant suivant Et ensuite utiliser l' assistant : Cet écran vous sera proposé. Page 106/134 PHP - MySQL avec DreamWeaver ANNEXES 2.34 JEUX DE CARACTERES 2.34.1 Présentation En fonction de l'encodage de la page HTML ou PHP (iso-8859-1 ou is-8859-15 ou encore UTF-8) et de la nature des données à transmettre ou afficher, il faudra opérer une conversion de code avec la fonction PHP mb_convert_encoding("texte, "encodage destination", "encodage source"). Exemple : mb_convert_encoding("C'est bientôt l'été", "ISO-8859-15", "auto"). 2.34.2 PHP • Page codée en iso-8859-15 <head> <title>jeux_de_caracteres.php</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15"> </head> <body> C'est bientôt l'été, ça c'est bien. Nous allons dépenser des €<br /> <?php echo "C'est bientôt l'été, ça c'est bien. Nous allons dépenser des €" ; ?> </body> Les caractères accentués et le symbole € sont bien restitués. Note : bien ceci sera restitué correctement avec UTF-8 ou ISO-8859 ça c'est l'été, nous allons dépenser des €<br /> Page 107/134 PHP - MySQL avec DreamWeaver • Page codée en iso-8859-1 <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> C'est bientôt l'été, ça c'est bien. Nous allons dépenser des €<br /> <?php echo "C'est bientôt l'été, ça c'est bien. Nous allons dépenser des €" ; ?> </body> Seuls les caractères accentués sont bien restitués. • Page codée en UTF-8 <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> C'est bientôt l'été, ça c'est bien. Nous allons dépenser des €<br /> <?php echo "C'est bientôt l'été, ça c'est bien. Nous allons dépenser des €" ; ?> </body> Les caractères accentués et le symbole € ne sont pas correctement restitués. Page 108/134 PHP - MySQL avec DreamWeaver • Page codée en UTF-8 et transcodée par PHP. <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> C'est bientôt l'été, ça c'est bien. Nous allons dépenser des €<br /> <?php echo mb_convert_encoding("C'est bientôt l'été, ça c'est bien. Nous allons dépenser des €", "ISO-8859-15", "UTF-8") ; ?> </body> Avec la fonction mb_convert_encoding() de PHP les caractères accentués et le symbole € sont bien restitués. 2.34.3 MySQL et PHP Le même problème surgit. Il faut alors utiliser MB_CONVERT_ENCODING pour insérer les données. Page 109/134 PHP - MySQL avec DreamWeaver 2.35 UPLOADER UN FICHIER 2.35.1 Objectif et écrans à réaliser Objectif : Dans la page d’insertion d’un nouvel auteur, copier un fichier jpg ou autre du poste client vers le fichier images du site bibliotheque(serveur) et enregistrer le nom du fichier dans la base de données bibliotheque. Les fichiers autres que les fichiers images (jpg, jpeg, gif, png, bmp,…) seront interdits. Les fichiers dépassant la taille de 50 000 octets seront aussi interdits. Page 110/134 PHP - MySQL avec DreamWeaver Page 111/134 PHP - MySQL avec DreamWeaver Page 112/134 PHP - MySQL avec DreamWeaver 2.35.2 Démarche Créez le fichier HTML upload_ok.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>upload ok</title> </head> <body> <p style=" color:#930; font-family:Georgia, 'Times New Roman', Times, serif; font-size:22px">Téléchargement du fichier réussi!!</p> </body> </html> Créez la page auteurs_insert.php avec l’assistant de Dreamweavec et précisez comme page suivante upload_ok.html Scripts (les parties à ajouter à la main sont en jaune) auteurs_insert.php modifier le script créer avec l’assistant comme ci-après if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) { $insertSQL = sprintf("INSERT INTO auteurs (nomAuteur, prenomAuteur, bio, pays, photoAuteur, site) VALUES (%s, %s, %s, %s, %s, %s)", GetSQLValueString($_POST['nomAuteur'], "text"), GetSQLValueString($_POST['prenomAuteur'], "text"), GetSQLValueString($_POST['bio'], "text"), GetSQLValueString($_POST['pays'], "int"), GetSQLValueString($_FILES['photoAuteur']['name'], "text"), GetSQLValueString($_POST['site'], "text")); mysql_select_db($database_cn_bibliotheque, $cn_bibliotheque); Expression régulière pour $Result1 = mysql_query($insertSQL, $cn_bibliotheque) or vérifier le format du fichier die(mysql_error()); choisi par l’utilisateur $insertGoTo = "../html/upload_ok.html"; //***** vérification du format du fichier ****// if(!preg_match('#jpg|jpeg|bmp|png|gif|tif#i',$_FILES['photoAuteur']['name'] )) $insertGoTo="upload_notOK.php?erreur=5"; else { //****** upload du fichier ****// $source=$_FILES['photoAuteur']['tmp_name']; $cible="../images/".$_FILES['photoAuteur']['name']; move_uploaded_file($source,$cible); } //******** vérification erreur de transfert if ($_FILES['photoAuteur']['error']!=0) Upload du fichier Page 113/134 PHP - MySQL avec DreamWeaver $insertGoTo="upload_notOK.php?erreur=".$_FILES['photoAuteur']['error']; En cas d’erreur on va vers if (isset($_SERVER['QUERY_STRING'])) { $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?"; upload_notOK.php $insertGoTo .= $_SERVER['QUERY_STRING']; } header(sprintf("Location: %s", $insertGoTo)); } mysql_select_db($database_cn_bibliotheque, $cn_bibliotheque); $query_Recordset1 = "SELECT * FROM pays"; $Recordset1 = mysql_query($query_Recordset1, $cn_bibliotheque) or die(mysql_error()); $row_Recordset1 = mysql_fetch_assoc($Recordset1); $totalRows_Recordset1 = mysql_num_rows($Recordset1); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> L’atttribut enctype <head> obligatoire <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Nouvel auteur</title> </head> <body> <h1>Nouvel Auteur</h1> <form action="<?php echo $editFormAction; ?>" method="post" id="form1" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="5100" /> <table> Taille maximale autorisée en <tr valign="baseline"> octet. <td align="right">Nom:</td> il doit être mis avant le input file <td><input type="text" name="nomAuteur" value="" size="32" /></td> </tr> pour être pris en compte par tous <tr valign="baseline"> les navigateurs <td align="right">Prénom</td> <td><input type="text" name="prenomAuteur" value="" size="32" /></td> </tr> <tr valign="baseline"> <td align="right" valign="top">Bio:</td> <td><textarea name="bio" cols="50" rows="5"></textarea></td> </tr> <tr valign="baseline"> <td align="right">Pays:</td> <td><select name="pays"> <?php do { ?> <option value="<?php echo $row_Recordset1['idPays']?>" ><?php echo $row_Recordset1['nomPays']?></option> <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?> </select></td> </tr> <tr> </tr> <tr valign="baseline"> <td align="right">PhotoAuteur:</td> <td><input type="file" name="photoAuteur" value="" size="32" /></td> </tr> <tr valign="baseline"> Le champ est de type file Page 114/134 PHP - MySQL avec DreamWeaver <td align="right">Site:</td> <td><input type="text" name="site" value="" size="32" /></td> </tr> <tr valign="baseline"> <td align="right"> </td> <td><input type="submit" value="Insérer un enregistrement" /></td> </tr> </table> <input type="hidden" name="MM_insert" value="form1" /> </form> <p> </p> </body> </html> <?php mysql_free_result($Recordset1); ?> upload_notOk.php copiez/collez le script ci-dessous <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>erreur upload</title> </head> <body> <p style=" color:#930; font-family:Georgia, 'Times New Roman', Times, serif; font-size:22px"> <?php // switch ($_GET['erreur']){ case 1: // UPLOAD_ERR_INI_SIZE echo"Le fichier dépasse la limite autorisée par le serveur !"; break; case 2: // UPLOAD_ERR_FORM_SIZE echo "Le fichier dépasse la limite autorisée dans le formulaire HTML !"; break; case 3: // UPLOAD_ERR_PARTIAL echo "L'envoi du fichier a été interrompu pendant le transfert !"; break; case 4: // UPLOAD_ERR_NO_FILE echo "Le fichier que vous avez envoyé a une taille nulle !"; break; case 5: // RESULTAT EXPRESSION REGULIERE SUR LE TYPE echo "seuls les fichiers de type image sont autorisés!!"; break; } ?> </p> </body> Page 115/134 PHP - MySQL avec DreamWeaver </html> 2.36 AJOUT D'UN ABONNE AVEC DES CONTROLES DE SAISIE Objectif : utiliser les expressions régulières pour contrôler côté serveur les saisies de l'internaute. Démarche : créez un formulaire d'insertion pour la table abonnes. La table abonnes contient désormais un champ e_mail de type varchar(50). Modifiez le script généré par l'assistant comme suit : if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) { $erreur=null; // --- Contrôle mailAbonne if(!preg_match("#^[0-9a-zA-Z._-]+@{1}[0-9a-zA-Z._-]{2,}[.]{1}[a-zAZ]{2,5}$#",$_POST['mailAbonne']) $erreur.="format de mail invalide<br/>" ; // --- Contrôle cp if(!preg_match("#^[0-9]{5}$#",$_POST['cpAbonne'])$erreur.="CP incorrect<br/>" ; // --- Contrôle nomAbonne if(!preg_match("#^[A-Z \'-]*$#",$_POST['nomAbonne']) invalide!!"; if ($erreur==null) { $erreur.="Nom $insertSQL = sprintf("INSERT INTO clients (nom, cp, e_mail, adresse_client, prenom_client, photo) VALUES (%s, %s, %s, %s, %s, %s)", GetSQLValueString($_POST['nom'], "text"), GetSQLValueString($_POST['cp'], "text"), GetSQLValueString($_POST['e_mail'], "text"), GetSQLValueString($_POST['adresse_client'], "text"), GetSQLValueString($_POST['prenom_client'], "text"), GetSQLValueString($_POST['photo'], "text")); mysql_select_db($database_cn_cours, $cn_cours); $Result1 = mysql_query($insertSQL, $cn_cours) or die(mysql_error()); } Note : L'e-mail est composé ainsi (cf http://fr.wikipedia.org/wiki/Adresse_%C3%A9lectronique) Page 116/134 PHP - MySQL avec DreamWeaver 2.37 ENVOYER UN MAIL 2.37.1 Généralités La programmation de services de messagerie nécessite l'utilisation de la fonction mail (qui est intégrée au noyau PHP) et éventuellement des fonctions imap_ qui nécessitent l'utilisation des extensions php_imap. Dans php.ini il faut : décommenter extension=php_imap.dll décommenter extension=php_smtp.dll mettre votre smtp à la ligne SMTP = localhost décommenter sendmail_from = [email protected] Nous verrons l'envoi de mails. Dans un premier en statique (Du texte d'abord, des images ensuite). Dans un deuxième temps en dynamique, à partir de données de la BD. 2.37.2 Envoi d'un mail de texte Objectif Envoyer du texte par mail. Le paramètre message contient du texte brut. Fonction utilisée Fonction Mail(destinataire, objet, message, en-têtes supplémentaires ) Description Envoie un mail Script <?php $destinataire = "[email protected]" ; $objet = "test envoi mail php"; $message ="mon premier mail avec php"; $expediteur="[email protected]"; $entetes = "From: $expediteur "; mail($destinataire, $objet, $message, $entetes ) ; ?> Page 117/134 PHP - MySQL avec DreamWeaver Le mail Page 118/134 PHP - MySQL avec DreamWeaver 2.37.3 Envoyer un mail à partir d’un formulaire Envoyer un mail à partir d’un formulaire de contact est chose courante. Dans ce cas le format du mail est en HTML. Le mini-framewvork phpmailer vous permet d’envoyer des mails avec facilité . Le formulaire de contact Créer un formulaire de contact 2.37.4 Envoyer un mail avec une pièce jointe Objectif Envoyer un mail qui ne contient que du texte HTML et une image intégrée avec la balise <img>. C'est la méthode la plus simple pour faire apparaître une image dans le contenu du message. Le mail Script <?php mail ("[email protected]", "Objet : Test MIME à partir de php : une photo", "<html><body>". Page 119/134 PHP - MySQL avec DreamWeaver "<h1>Test envoi HTML</h1>". "<font color=red> Du rouge </font>". "<img src=\"http://pascal.buguet.free.fr/php/saint_pierre.jpg\"". "</body></html>", "Content-Type: text/html; charset=\"iso-8859-1\"" ); ?> Page 120/134 PHP - MySQL avec DreamWeaver 2.37.5 Mails et BD. Objectif Envoyer un mail qui contient du texte HTML et une image à des destinataires stockés dans une BD. Script <?php // --- Connexion à la BD $lien = mysql_connect("localhost","root","") ; // --- Sélection de la base mysql mysql_select_db("cours",$lien) ; // --- Construction de l'ordre SQL et exécution $ls_select = "select e_mail from clients where e_mail is not null" // --- Exécution de la requête $jeu_enrs = mysql_query($ls_select, $lien) ; // --- Boucle de balayage while ($enregistrement = mysql_fetch_row($jeu_enrs)) { $mail_client = $enregistrement[0] ; mail( $mail_client, "Objet : Offre exceptionnelle", "<html><body>". "<img src=\"http://www.serveur.fr/php/logo.jpg\""><br /><br />" . "<h1>Nos promotions</h1>" . "<font color=red>Du 1er au 15 avril</font>" . "</body></html>", "Content-Type: text/html; charset=\"iso-8859-1\"" ); } ?> Page 121/134 PHP - MySQL avec DreamWeaver 2.38 GESTION DES COOKIES 2.38.1 Définition Les cookies, qui nécessitent l'autorisation de l'utilisateur, via la configuration de son navigateur, permettent de stocker dans un fichier situé sur le poste utilisateur des données en petites quantités. Les cookies sont de 4 ko au maximum. Un client ne peut supporter que 300 cookies. Un serveur ne peut créer que 20 cookies sur un poste client. Il est ainsi possible de faire une gestion de panier, de mémoriser les préférences des utilisateurs et visiteurs d'un site. 2.38.2 Syntaxe Pour créer ou affecter une valeur au cookie setCookie("nom_du_cookie",$valeur [ , date expiration]) ; Pour récupérer la valeur du cookie $valeur = $_COOKIE["nom_du_cookie"]; 2.38.3 Exemples setCookie( "cookie1" , "un") ; // --- Durée de vie infinie setCookie( "cookie2" , "deux" , time() + 180) ; // --- Durée de vie de 3 minutes setCookie( "cookie3" , "trois" , time() + ( 3600 * 24 * 7 ) ) ; // --- durée de vie de 7 jours // Durée de vie jusqu'à une date précise mktime(heures, minutes, secondes, mois, jour, année) setCookie( "cookie5" , "quatre" , mktime(19,45,0,3,24,2005) ) ; setCookie( "cookie5" , "cinq" , time() ) ; // Durée de vie nulle foreach($_COOKIE as $cle => $valeur) {print($cle . ":" . $valeur . "<br>" ); } // Pour les afficher tous Page 122/134 PHP - MySQL avec DreamWeaver 2.38.4 Exemple dynamique Ecrans Ecrans Description Une page HTML pour saisir une valeur Une page PHP pour créer le cookie Une page PHP pour récupérer la valeur du cookie Page 123/134 PHP - MySQL avec DreamWeaver Les scripts • cookie_saisie.html <html> <head><title>Saisie Cookie</title></head> <body> <form action="cookie_valider.php" method="post"> Saisissez votre prénom et votre nom : <input type="text" name="tb_prenom_nom" /> <input type="submit" value="Valider" /> </form> </body> </html> • cookie_valider.php <?php $ls_valeur = $_POST["tb_prenom_nom"] ; setCookie("prenom_nom",$ls_valeur) ; echo "$ls_valeur, vos données ont été enregistrées" ; ?> • cookie_affichage.php <?php $ls_valeur = $_COOKIE["prenom_nom"]; echo "Bonjour $ls_valeur" ; ?> Page 124/134 PHP - MySQL avec DreamWeaver 2.39 GESTION DES SESSIONS 2.39.1 Définition Une session permet de conserver au cours de la visite d'un utilisateur sur un site des variables sur le serveur. Au début d'une session utilisateur un identifiant de session est créé et attribué. Si le client accepte les cookies cet identifiant sera stocké dans un cookie autrement il faudra le passer dans l'URL du navigateur en réalisant une réecriture d'URL. Les variables de session dans tous les cas sont stockées dans des fichiers plats sur le serveur. 2.39.2 Syntaxe Pour spécifier que l'on va utiliser les variables de session il faut au début de chaque page PHP solliciter la fonction session_start(). session_start() ; Pour créer une variable de session ou lui affecter une valeur $_SESSION["nom_de_variable"] = $ls_nom ; Pour récupérer une valeur d'une variable de session print($_SESSION["nom_de_variable"]) ; Pour détruire une variable de session unset($_SESSION["nom_de_variable "]) ; Pour détruire toutes les variables de session $_SESSION = array() ; Pour terminer une session (qui détruit aussi les variables) session_destroy() Page 125/134 PHP - MySQL avec DreamWeaver 2.39.3 Exemple dynamique Ecrans Ecrans Description Une page HTML pour saisir une valeur. Une page PHP pour affecter la valeur saisie à une variable de session. Une page PHP pour récupérer la variable de session. Page 126/134 PHP - MySQL avec DreamWeaver Scripts • Session_saisie.html <html> <head><title>Saisie Session</title></head> <body> <form action="session_validation.php" method="get"> Saisissez votre prénom et votre nom : <input type="text" name="tb_prenom_nom" /> <input type="submit" value="Valider" /> </form> </body> </html> • session_validation.php <?php session_start(); $ls_valeur = $_GET["tb_prenom_nom"] ; $_SESSION["prenom_nom"] = $ls_valeur ; echo "$ls_valeur, vos données ont été enregistrées" ; ?> • session_affichage.php <?php session_start(); $ls_valeur = $_SESSION["prenom_nom"]; echo "Bonjour $ls_valeur" ; ?> Page 127/134 PHP - MySQL avec DreamWeaver Mais la gestion de session n'est possible que si l'internaute accepte les cookies. Il est possible de gérer l'état de la session sans cookie, ni session avec des champs de formulaires cachés, des stockages temporaires dans des fichiers serveur ou des tables temporaires de BD. Page 128/134 PHP - MySQL avec DreamWeaver 2.40 GESTION DE PANIER 2.40.1 Objectif Créer une mini application de gestion de panier en utilisant les assistants de Dream et en codant quelques lignes de PHP. 2.40.2 Ecrans Le catalogue avec les liens. L'ajout d'un produit L'ajout d'un autre produit La visualisation du panier Page 129/134 PHP - MySQL avec DreamWeaver 2.40.3 Démarche Les cookies doivent être acceptés par le navigateur. La gestion est réalisée via des variables de session. Créez dans cet ordre 3 documents PHP : • produits_panier_modifier.php : pour remplir le panier. produits_catalogue.php : pour afficher le catalogue. produits_panier_visu.php : pour visualiser le contenu du panier. produits_panier_modifier.php <?php session_start(); $produit = $_GET["id_produit"]; if(isSet($_SESSION["panier"])) $_SESSION["panier"] .= ";" . $produit ; else $_SESSION["panier"] = $produit ; print ("Le produit <strong>$produit</strong> a été ajouté au panier"); ?> • produits_catalogue.php Créez un tableau dynamique sur la table Produits. Modifiez la colonne id_produit comme suit : <td><?php echo $row_rs_produits['id_produit']; ?></td> devient (ce qui est en rouge et en gras a été ajouté) <td><a href='produits_panier_modifier.php?id_produit=<?php echo $row_rs_produits['id_produit']; ?>'><?php echo $row_rs_produits['id_produit']; ?></a></td> • produits_panier_visu.php <?php session_start(); if(isset($_SESSION["panier"])) { $produits = explode(";",$_SESSION["panier"]); print("<br />Le panier comprend <strong>" . count($produits). "</strong> produit(s) : ") ; for($li_ctr=0;$li_ctr< count($produits);$li_ctr++) print("<br />Le produit : $produits[$li_ctr]") ; } else print("<br />Le panier est vide<br />") ; ?> Notes : pour avoir une gestion complète il faut stocker dans des tables cdes et ligcdes le contenu du panier lorsqu'il est validé et en stockant des informations concernant le client dans la table Clients. Page 130/134 PHP - MySQL avec DreamWeaver 2.41 MESURES DE SECURITE 2.41.1 Gérer les mots de passe serveur Mettez un mot de passe à l'utilisateur root. 2.41.2 Protéger vos dossiers Contre le listage du contenu d'un dossier. Créez un fichier index.html ou index.php dans chaque dossier de votre site. Contre l'accès aux utilisateurs non habilités. Créez des fichiers .htaccess et le fichier .htpasswd qui les accompagne dans chaque dossier confidentiel contenant des documents PHP et/ou HTML. .htaccess AuthName "Page d'administration protégée" AuthType Basic AuthUserFile ".htpasswd" Require valid-user .htpasswd pascal:mdp annabelle:mdp Seuls les utilisateurs qui saisiront pascal/mdp ou annabelle/mdp dans la boîte de dialogue suivante pourront accéder aux pages du dossier. Page 131/134 PHP - MySQL avec DreamWeaver 2.41.3 Protéger l'accès à la base de données Nouveaux utilisateurs sur le serveur. Créez de nouveaux utilisateurs serveur/BD et limitez leur droits sur la ou les BD et sur les tables. Authentifiez les utilisateurs Mettez en place la table utilisateurs(ut, mdp, qualite) et les écrans d'authentification vus dans les chapitres précédents. Page 132/134 PHP - MySQL avec DreamWeaver Chiffrez les mots de passe. 1) Créez des utilisateurs en chiffrant le mot de passe avec la fonction PHP md5(). Créez un document PHP (utilisateurs_ajout_md5.php) pour ajouter un nouvel utilisateur dans la table Utilisateurs. En utilisant l'assistant Recherchez la ligne de code généré suivante : GetSQLValueString($_POST['mdp'], "text"), Et modifiez-la ainsi : GetSQLValueString(md5($_POST['mdp']), "text"), Dans la table les valeurs seront les suivantes pour un utilisateur de nom "protege" de mot de passe "mdp" et de qualite "bo" : 2) Créez une page d'authentification (connexion_md5.php) en utilisant la fonction md5() de PHP. Recherchez la ligne de code généré suivante : $password=$_POST['it_mdp']; Et modifiez-la ainsi : $password=md5($_POST['it_mdp']); Page 133/134 PHP - MySQL avec DreamWeaver 2.41.4 Masquer PHP Modifiez le fichier httpd.conf en remplaçant la ligne suivante : AddType application/x-httpd-php .php .php3 … Par celle-ci : AddType application/x-httpd-php .htm .html Tous vos fichiers (HTML, PHP) devront avoir l'extension HTML. Ceci est possible seulement si vous êtes votre propre fournisseur ou si vous possédez un espace dédié chez votre fournisseur. Evitez d'utiliser la méthode GET dans les formulaires. Contrôlez la nature des saisies (Numériques, texte, dates,…) dans les formulaires. Contrôlez la nature et la taille des fichiers Uploadés. Interdisez l'utilisation de certaines fonctions PHP sur votre site (Exec, System,…). Cette dernière protection est possible seulement si vous êtes votre propre fournisseur ou si vous possédez un espace dédié chez votre fournisseur. 2.42 SCRIPT 2.42.1 convertir jj/mm/aaaa en aaaa-mm-jj <?php // déclaration de la fonction function dateFR_EN ($date){ $d=explode('/', $date); $date=$d[2].'-'.$d[1].'-'.$d[0]; return $date; } ?> <?php // appel de la fonction echo dateFR_EN ('28/04/2013'); ?> 2.42.2 convertir aaaa-mm-jj en jj-mm-aaaa <?php // déclaration de la fonction function dateFR_EN ($date){ $d=explode('-', $date); $date=$d[2].'/'.$d[1].'/'.$d[0]; return $date; } ?> <?php // appel de la fonction echo dateFR_EN ('2013-03-24'); ?> Page 134/134
© Copyright 2025 ExpyDoc