1. Trang chủ
  2. » Công Nghệ Thông Tin

Pratique de MySQL et PHP- P23 doc

5 211 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Cấu trúc

  • Table des Matières

  • Avant-propos

  • Première partie – Programmation web avec MySQL/PHP

    • Chapitre 1 – Introduction à MySQL et PHP

      • 1.1 Introduction au Web et à la programmation web

        • 1.1.1 Serveurs web

        • 1.1.2 Documents web : le langage XHTML

        • 1.1.3 Programmation web

        • 1.1.4 Sessions

      • 1.2 Programmation web avec MySQL et PHP

        • 1.2.1 MySQL

        • 1.2.2 PHP

      • 1.3 Une première base MySQL

        • 1.3.1 Création d'une table

        • 1.3.2 L'utilitaire mysql

        • 1.3.3 L'interface PhpMyAdmin

      • 1.4 Accès à MySQL avec PHP

        • 1.4.1 L'interface MySQL/PHP

        • 1.4.2 Formulaires d'interrogation

        • 1.4.3 Formulaires de mises à jour

    • Chapitre 2 – Techniques de base

      • 2.1 Programmation avec fonctions

        • 2.1.1 Création de fonctions

        • 2.1.2 Utilisation des fonctions

        • 2.1.3 À propos de require et include

        • 2.1.4 Passage par valeur et passage par référence

      • 2.2 Traitement des données transmises par HTTP

        • 2.2.1 Échappement et codage des données HTTP

        • 2.2.2 Contrôle des données HTTP

        • 2.2.3 Comment insérer dans la base de données : insertion dans MySQL

        • 2.2.4 Traitement de la réponse

        • 2.2.5 Comment obtenir du texte « pur » : envoi de l'e-mail

        • 2.2.6 En résumé : traitement des requêtes et des réponses

      • 2.3 Mise à jour d'une base par formulaire

        • 2.3.1 Script d'insertion et de mise à jour

        • 2.3.2 Validation des données et expressions régulières

      • 2.4 Transfert et gestion de fichiers

        • 2.4.1 Transfert du client au serveur

        • 2.4.2 Transfert du serveur au client

      • 2.5 Sessions

        • 2.5.1 Comment gérer une session web ?

        • 2.5.2 Gestion de session avec cookies

        • 2.5.3 Prise en charge des sessions dans PHP

      • 2.6 SQL dynamique et affichage multi-pages

        • 2.6.1 Affichage d'une requête dynamique

        • 2.6.2 Affichage multi-pages

    • Chapitre 3 - Programmation objet

      • 3.1 Tour d'horizon de la programmation objet

        • 3.1.1 Principes de la programmation objet

        • 3.1.2 Objets et classes

        • 3.1.3 Les exceptions

        • 3.1.4 Spécialisation : classes et sous-classes

        • 3.1.5 Spécialisation et classes abstraites : la classe BD

        • 3.1.6 Résumé

      • 3.2 La classe Tableau

        • 3.2.1 Conception

        • 3.2.2 Utilisation

        • 3.2.3 Implantation

      • 3.3 La classe Formulaire

        • 3.3.1 Conception

        • 3.3.2 Utilisation

        • 3.3.3 Implantation

      • 3.4 La classe IhmBD

        • 3.4.1 Utilisation

        • 3.4.2 Implantation

  • Deuxième partie – Conception et création d’un site

    • Chapitre 4 – Création d'une base MySQL

      • 4.1 Conception de la base

        • 4.1.1 Bons et mauvais schémas

        • 4.1.2 Principes généraux

        • 4.1.3 Création d'un schéma E/A

      • 4.2 Schéma de la base de données

        • 4.2.1 Transcription des entités

        • 4.2.2 Associations de un à plusieurs

        • 4.2.3 Associations de plusieurs à plusieurs

      • 4.3 Création de la base Films avec MySQL

        • 4.3.1 Tables

        • 4.3.2 Contraintes

        • 4.3.3 Modification du schéma

    • Chapitre 5 – Organisation du développement

      • 5.1 Choix des outils

        • 5.1.1 Environnement de développement intégré Eclipse

        • 5.1.2 Développement en équipe : Subversion

        • 5.1.3 Production d'une documentation avec PhpDoc

        • 5.1.4 Tests unitaires avec PhpUnit

        • 5.1.5 En résumé

      • 5.2 Gestion des erreurs

        • 5.2.1 Erreurs syntaxiques

        • 5.2.2 Gestion des erreurs en PHP

        • 5.2.3 Les exceptions PHP

        • 5.2.4 Gestionnaires d'erreurs et d'exceptions

      • 5.3 Portabilité multi-SGBD

        • 5.3.1 Précautions syntaxiques

        • 5.3.2 Le problème des séquences

        • 5.3.3 PDO, l'interface générique d'accès aux bases relationnelles

    • Chapitre 6 – Architecture du site : le pattern MVC

      • 6.1 Le motif de conception MVC

        • 6.1.1 Vue d'ensemble

        • 6.1.2 Le modèle

        • 6.1.3 La vue

        • 6.1.4 Contrôleurs et actions

        • 6.1.5 Organisation du code et conventions

      • 6.2 Structure d'une application MVC : contrôleurs et actions

        • 6.2.1 Le fichier index.php

        • 6.2.2 Le contrôleur frontal

        • 6.2.3 Créer des contrôleurs et des actions

      • 6.3 Structure d'une application MVC : la vue

        • 6.3.1 Les templates

        • 6.3.2 Combiner des templates

        • 6.3.3 Utilisation d'un moteur de templates comme vue MVC

        • 6.3.4 Exemple complet

        • 6.3.5 Discussion

      • 6.4 Structure d'une application MVC : le modèle

        • 6.4.1 Modèle et base de données : la classe TableBD

        • 6.4.2 Un exemple complet de saisie et validation de données

        • 6.4.3 Pour conclure

    • Chapitre 7 – Production du site

      • 7.1 Authentification

        • 7.1.1 Problème et solutions

        • 7.1.2 Contrôleur d'authentification et de gestion des sessions

        • 7.1.3 Les actions de login et de logout

      • 7.2 Recherche, présentation, notation des films

        • 7.2.1 Outil de recherche et jointures SQL

        • 7.2.2 Notation des films

      • 7.3 Affichage des films et forum de discussion

      • 7.4 Recommandations

        • 7.4.1 Algorithmes de prédiction

        • 7.4.2 Agrégation de données avec SQL

        • 7.4.3 Recommandations de films

    • Chapitre 8 – XML

      • 8.1 Introduction à XML

        • 8.1.1 Pourquoi XML ?

        • 8.1.2 XML et HTML

        • 8.1.3 Syntaxe de XML

      • 8.2 Export de données XML

        • 8.2.1 Comment passer d'une base MySQL à XML

        • 8.2.2 Application avec PHP

      • 8.3 Import de données XML dans MySQL

        • 8.3.1 Simple XML

        • 8.3.2 L'API SAX

        • 8.3.3 Une classe de traitement de documents XML

      • 8.4 Mise en forme de documents avec XSLT

        • 8.4.1 Quelques mots sur XSLT

        • 8.4.2 Application d'un programme XSLT avec PHP

  • Troisième partie – Compléments

    • Chapitre 9 – Introduction au Zend Framework

      • 9.1 Mise en route

        • 9.1.1 Installation d'une application ZF

        • 9.1.2 Redirection des requêtes avec le ZF

        • 9.1.3 Organisation et conventions

        • 9.1.4 Routage des requêtes dans une application Zend

        • 9.1.5 Configuration

        • 9.1.6 Connexion à la base de données

        • 9.1.7 Le registre

        • 9.1.8 Contrôleurs, actions et vues

      • 9.2 Accès à la base de données

        • 9.2.1 Interrogation

        • 9.2.2 Insertion et mise à jour

      • 9.3 Le MVC du Zend Framework

        • 9.3.1 L'objet request

        • 9.3.2 L'objet response

        • 9.3.3 Gérer les exceptions

      • 9.4 La vue dans le Zend Framework

        • 9.4.1 Les vues sont des scripts PHP

        • 9.4.2 Le layout

        • 9.4.3 Créer des Helpers

      • 9.5 Le composant Modèle du Zend Framework

        • 9.5.1 L'ORM du Zend Framework

        • 9.5.2 Le modèle ORM de l'application

        • 9.5.3 Manipulation des données avec les classes ORM

      • 9.6 Pour conclure

    • Chapitre 10 – Récapitulatif SQL

      • 10.1 Sélections

        • 10.1.1 Renommage, fonctions et constantes

        • 10.1.2 La clause DISTINCT

        • 10.1.3 La clause ORDER BY

        • 10.1.4 La clause WHERE

        • 10.1.5 Dates

        • 10.1.6 Valeurs nulles

        • 10.1.7 Clauses spécifiques à MySQL

      • 10.2 Jointures

        • 10.2.1 Interprétation d'une jointure

        • 10.2.2 Gestion des ambiguïtés

        • 10.2.3 Jointures externes

      • 10.3 Opérations ensemblistes

      • 10.4 Requêtes imbriquées

        • 10.4.1 Exemples de requêtes imbriquées

        • 10.4.2 Requêtes corrélées

        • 10.4.3 Requêtes avec négation

      • 10.5 Agrégation

        • 10.5.1 La clause GROUP BY

        • 10.5.2 La clause HAVING

      • 10.6 Mises à jour

        • 10.6.1 Insertion

        • 10.6.2 Destruction

        • 10.6.3 Modification

    • Chapitre 11 – Récapitulatif PHP

      • 11.1 Généralités

        • 11.1.1 Commentaires

        • 11.1.2 Variables et littéraux

        • 11.1.3 Constantes

      • 11.2 Types

        • 11.2.1 Types numériques et booléens

        • 11.2.2 Chaînes de caractères

        • 11.2.3 Tableaux

        • 11.2.4 Conversion et typage

      • 11.3 Expressions

      • 11.4 Opérateurs

        • 11.4.1 Concaténation de chaînes

        • 11.4.2 Incrémentations

        • 11.4.3 Opérateurs de bits

        • 11.4.4 Opérateurs logiques

      • 11.5 Structures de contrôle

        • 11.5.1 Tests

        • 11.5.2 Boucles

        • 11.5.3 Les instructions break et continue

      • 11.6 Fonctions

        • 11.6.1 Passage des arguments

        • 11.6.2 Valeurs par défaut

        • 11.6.3 Fonctions et variables

      • 11.7 Programmation orientée-objet

        • 11.7.1 Classes et objets

        • 11.7.2 Constructeurs et destructeurs

        • 11.7.3 Sous-classes

        • 11.7.4 Manipulation des objets

        • 11.7.5 Compléments

  • Quatrième partie – Annexes

    • Annexe A – Installation Apache/PHP/MySQL

      • A. 1 Mot de passe root

      • A. 2 Création de bases et d'utilisateurs

        • A. 2.1 La commande GRANT

        • A. 2.2 Modification des droits d'accès

      • A. 3 Fichiers de configuration

        • A. 3.1 Format d'un fichier de configuration

        • A. 3.2 Les différents fichiers

        • A. 3.3 Configuration du serveur

        • A. 3.4 Configuration d'un compte administrateur

      • A. 4 Sauvegardes

      • A. 5 phpMyAdmin

    • Annexe B – Référence MySQL

      • B. 1 Types de données MySQL

      • B. 2 Commandes de MySQL

      • B. 3 Fonctions MySQL

    • Annexe C – Fonctions PHP

      • C. 1 Fonctions générales

      • C. 2 Chaînes de caractères

      • C. 3 Dates

      • C. 4 Tableaux

      • C. 5 Fonctions XML

      • C. 6 Accès aux fichiers

      • C. 7 Interface PHP/MySQL

  • Index général

  • Index des fonctions PHP

  • Index des commandes SQL

  • Table des figures

Nội dung

88 Chapitre 2. Techniques de base Les expressions régulières autorisent une recherche par motif beaucoup plus puissante. Une expression décrit un motif en indiquant d’une part le caractère ou la sous-chaîne attendu(e) dans la chaîne, et en spécifiant d’autre part dans quel ordre et avec quel nombre d’occurrences ces caractères ou sous-chaînes peuvent apparaître. L’expression régulière la plus simple est celle qui représente une sous-chaîne constante comme, par exemple, le « ver » dans ce qui précède. Une recherche avec cette expression a la même signification que la requête SQL ci-dessus. Il est possible d’indiquer plus précisément la place à laquelle doit figurer le motif : 1. le « ˆ » indique le début de la chaîne : l’expression « ∧ ver » s’applique donc à toutes les chaînes commençant par « ver » ; 2. le $ indique la fin de la chaîne : l’expression « ver$ » s’applique donc à toutes les chaînes finissant par « ver » ; On peut exprimer de manière concise toute une famille de motifs en utilisant les symboles d’occurrence suivants : 1. « m* » indique que le motif m doit être présent 0 ou plusieurs fois ; 2. « m+ » indique que le motif m oit être présent une (au moins) ou plusieurs fois, ce qu’on pourrait également exprimer par « mm* » ; 3. « m? » indique que le motif m peut être présent 0 ou une fois ; 4. « m{p,q} » indique que le motif m peut être présent au moins p fois et au plus q fois (la syntaxe {p,} indique simplement le « au moins », sans maximum, et {p} est équivalent à{p,p}). Par défaut, les symboles d’occurrence s’appliquent au caractère qui précède, mais on peut généraliser le mécanisme avec les parenthèses qui permettent de créer des séquences. Ainsi (ver)+ est une expression qui s’applique aux chaînes contenant au moins une fois la sous-chaîne ver, alors que ver+ s’applique aux sous-chaînes qui contiennent ve suivi d’un ou plusieurs r. Le choix entre plusieurs motifs peut être indiqué avec le caractère « | ». Par exemple l’expression ver+|lie+ s’applique aux chaînes qui contiennent au moins une fois ver ou au moins une fois lie. Pour vérifier qu’une chaîne contient un chiffre, on peut utiliser l’expression 0|1|2|3|4|5|6|7|8|9 mais on peut également encadrer tous les caractères acceptés entre crochets : [0123456789]. Une expression constituée d’un ensemble de caractères entre crochets s’applique à toutes les chaînes contenant au moins un de ces caractères. Si le premier caractère entre les crochets est ∧ , l’interprétation est inversée : l’expression s’applique à toutes les chaînes qui ne contiennent pas un des caractères. Voici quelques exemples : • [ver] : toutes les chaînes avec un v, un e ou un r ; • [a-f] : toutes les chaînes avec une des lettres entre a et f ; 2.3 Mise à jour d’une base par formulaire 89 • [a-zA-Z] : toutes les chaînes avec une lettre de l’alphabet. • [ ∧ 0-9] : toutes les chaînes sans chiffre. Pour simplifier l’écriture des expressions certains mot-clés représentent des classes courantes de caractères, données dans la table 2.2. Ils doivent apparaître dans une expression régulière encadrés par « : » pour éviter toute ambiguité comme, par exemple, « :alpha: ». Tableau 2.2 — Classes de caractères Mot-clé Description alpha N’importe quel caractère alphanumérique. blank Espaces et tabulations. cntrl Tous les caractères ayant une valeur ASCII inférieure à 32. lower Toutes les minuscules. upper Toutes les majuscules. space Espaces, tabulations et retours à la ligne. xdigit Chiffres en hexadécimal. Enfin le point « . » représente n’importe quel caractère, sauf le saut de ligne NEWLINE. Le point, comme tous les caractères spéciaux ( ∧ ,.,[,],(,),*, +, ?, {, , }, \) doit être précédé par un \ pour être pris en compte de manière littérale dans une expression régulière. Expressions régulières et PHP Les deux principales fonctions PHP pour traiter des expressions régulières sont ereg() et ereg_replace(). La première prend trois arguments : l’expression régu- lière, la chaîne à laquelle on souhaite appliquer l’expression, enfin le dernier para- mètre (optionnel) est un tableau dans lequel la fonction placera toutes les occur- rences de motifs, rencontrés dans la chaîne, satisfaisant l’expression régulière. Voici un exemple pour notre fonction de contrôle. On veut tester si l’utilisateur place des balises dans les chaînes de caractères, notamment pour éviter des problèmes à l’affichage. Voyons d’abord l’expression représentant une balise. Il s’agit de toute chaîne commençant par « < », suivi de caractères à l’exception de « > », et se terminant par « > ». L’expression représentant une balise est donc <[^>]*> Voici le test appliqué au nom du metteur en scène : if ( ereg ("<[^>]∗ >" , $film [ ’nom_realisateur ’] , $balises )) $message .= "Le nom contient la balise : " . htmlEntities ($balises [0]) ; La fonction ereg() recherche dans le nom toutes les balises, et les place dans le tableau $balises. Elle renvoie true si au moins un motif a été trouvé dans la chaîne. 90 Chapitre 2. Techniques de base On donne alors dans le message d’erreur la balise rencontrée (on pourrait les affi- cher toutes avec une boucle). Attention : pour qu’une balise apparaisse textuellement dans la fenêtre d’un navigateur, il faut l’écrire sous la forme &lt;balise&gt; pour éviter qu’elle ne soit interprétée comme une directive de mise en forme. La fonction htmlEntities() remplace dans une chaîne tous les caractères non-normalisés d’un texte HTML par l’entité HTML correspondante. Voici un autre exemple testant que le nom du metteur en scène ne contient que des caractères alphabétiques. Si on trouve un tel caractère, on le remplace par une «*»aveclafonctionereg_replace() afin de marquer son emplacement. if ( ereg ("[^A−Za−z ]" , $film [ ’ nom_realisateur ’ ])) $message .= "Le nom contient un ou plusieurs caractères " ." non−alphabétiques : " . ereg_replace ("[^A−Za−z]", "∗ " , $film [ ’ nom_realisateur ’ ]) ."<br/>"; La fonction ereg_replace() a pour but de remplacer les motifs trouvés dans la chaîne (troisième argument) par une sous-chaîne donnée dans le second argument. Les expressions régulières sont indispensables pour valider toutes les chaînes dont le format est contraint, comme les nombres, les unités monétaires, les adresses élec- troniques ou HTTP, etc. Elles sont également fréquemment utilisées pour inspecter la variable USER_AGENT et tester le navigateur utilisé par le client afin d’adapter l’affichage aux particularités de ce navigateur (voir également la fonction PHP get_browser()). 2.4 TRANSFERT ET GESTION DE FICHIERS Nous montrons maintenant comment échanger des fichiers de type quelconque entre le client et le serveur. L’exemple pris est celui d’un album photo en ligne (très limité) dans lequel l’internaute peut envoyer des photos stockées sur le serveur avec une petite description, consulter la liste des photos et en récupérer certaines. La première chose à faire est de vérifier que les transferts de fichier sont autorisés dans la configuration courante de PHP. Cette autorisation est configurée par la directive suivante dans le fichier php.ini : ; Whether to allow HTTP file uploads. file_uploads = On Une seule table suffira pour notre application. Voici le script de création. Exemple 2.20 exemples/Album.sql : Table pour l’album photos # Création d ’une table pour un petit album photo CREATE TABLE Album ( i d INTEGER AUTO_INCREMENT NOT NULL , description TEXT, 2.4 Transfert et gestion de fichiers 91 compteur INTEGER DEFAULT 0, PRIMARY KEY ( i d ) ) ; L’attribut compteur, de valeur par défaut 0, donnera le nombre de télécharge- ments de chaque photo. 2.4.1 Transfert du client au serveur Voici le formulaire permettant d’entrer le descriptif et de choisir le fichier à transmettre au serveur. Il est très important, pour les formulaires transmettant des fichiers, d’utiliser le mode post et de penser à placer l’attribut enctype à la valeur multipart/form-data dans la balise <form> (voir chapitre 1, page 10). Le transfert d’un fichier donne en effet lieu à un message HTTP en plusieurs parties. En cas d’oubli de cet attribut le fichier n’est pas transmis. Rappelons que les champs <input> de type file créent un bouton de formulaire permettant de parcourir les arborescences du disque local pour choisir un fichier. Dans notre formulaire, ce champ est nommé maPhoto. Notez le champ caché max_file_size qui limite la taille du fichier à transférer. Exemple 2.21 exemples/FormTransfert.html : Formulaire pour sélectionner le fichier à transmettre <?xml version=" 1.0 " encoding=" iso −8959−1"?> <!DOCTYPE h t m l PUBLIC " −/ /W3C / / DTD XHTML 1 . 0 S t r i c t / / EN " "http ://www.w3. org/TR/xhtml1/DTD/xhtml1−strict .dtd"> <html xmlns="http ://www.w3. org/1999/xhtml" xml: lang=" fr " > <head> < title>Formulaire de transfert de photographie</ title> < link rel =’stylesheet ’ href="films .css" type=" text / css " /> </head> <body> <h1>Transfert de photographies dans l ’album</h1> <form enctype=" multipart /form−data" action="TransfertFichier .php " method=’post ’> <p> < textarea name="description" cols =’50’ rows=’3’>Entrez ici la description de la photographie </ textarea> </p><p> Choisissez le fichier : <br /> <input type =’hidden ’ name=’max_file_size ’ value= ’2000000 ’/> <input type =’file ’ size=’40’ name=’maPhoto ’ /> 92 Chapitre 2. Techniques de base </p> <input type =’submit ’ value=’Transférer ’/> </form> </body> </html> Voici maintenant le script TransfertFichier.php associé à ce formulaire, montrant comment le fichier est traité à l’arrivée sur le serveur. L’instruction switch,analogue à celle du C ou du C++, permet de choisir une action à effectuer en fonction de la valeur d’une variable (ici $codeErreur) ou d’une expression : voir page 431 pour plus de détails. Les informations relatives aux fichiers transférés sont disponibles dans un tableau $_FILES à deux dimensions. La première est le nom du champ de formulaire d’où provient le fichier (dans notre cas, maPhoto) ; la seconde est un ensemble de propriétés décrivant le fichier reçu par le serveur, énumérées dans la table 2.3. La propriété error permet de savoir si le transfert s’est bien passé ou, si ce n’est pas le cas, quel type de problème est survenu. Les valeurs possibles du code d’erreur sont les suivantes : • UPLOAD_ERR_OK : pas d’erreur, le transfert s’est bien effectué ; • UPLOAD_ERR_INI_SIZE : le fichier transmis dépasse la taille maximale auto- risée, cette dernière étant paramétrée dans le fichier php.ini : ; Maximum allowed size for uploaded files. upload_max_filesize = 2M • UPLOAD_ERR_FORM_SIZE : la taille du fichier dépasse celle indiquée dans la directive max_file_size qui peut être spécifiée dans le formulaire HTML ; • UPLOAD_ERR_PARTIAL : le fichier a été transféré seulement partiellement ; • UPLOAD_ERR_NO_FILE : aucun fichier n’a été transféré. Tableau 2.3 — Variables décrivant un transfert de fichier (seconde dimension du tableau $_FILES) Nom Description name Nom du fichier sur la machine du client. tmp_name Nom du fichier temporaire sur la machine du serveur. size Taille du fichier, en octets. type Le type MIME du fichier, par exemple « image/gif» error Code d’erreur si le fichier n’a pu être transmis correctement (depuis la version 4.2 de PHP). Exemple 2.22 exemples/TransfertFichier.php : Script de traitement du fichier <?xml version=" 1.0" encoding="iso −8959−1"?> <!DOCTYPE htm l PUBLIC " −/ /W3C / / DTD XHTML 1 . 0 S t r i c t / / EN " "http ://www.w3. org /TR/xhtml1/DTD/xhtml1−strict .dtd"> <html xmlns="http ://www.w3. org/1999/xhtml" xml:lang=" fr "> . formulaire permettant d’entrer le descriptif et de choisir le fichier à transmettre au serveur. Il est très important, pour les formulaires transmettant des fichiers, d’utiliser le mode post et de penser. envoyer des photos stockées sur le serveur avec une petite description, consulter la liste des photos et en récupérer certaines. La première chose à faire est de vérifier que les transferts de fichier. : toutes les chaînes avec une des lettres entre a et f ; 2.3 Mise à jour d’une base par formulaire 89 • [a-zA-Z] : toutes les chaînes avec une lettre de l’alphabet. • [ ∧ 0-9] : toutes les chaînes

Ngày đăng: 06/07/2014, 00:20

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN