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

Pratique de MySQL et PHP- P73 pdf

5 191 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

338 Chapitre 8. XML function donneesCaracteres ($parser , $chaine) { global $tab_elements , $element_courant ; if ( trim ($chaine) != "") $tab_elements [ $element_courant ] .= $chaine ; } On reçoit en argument la chaîne de caractères constituant le contenu du nœud de texte. De tels nœuds sont très souvent constitués uniquement d’espaces ou de retours à la ligne, quand il servent uniquement à la mise en forme du document. On élimine ici ces espaces avec la fonction PHP trim() et on vérifie que la chaîne obtenue n’est pas vide. On sait alors qu’on a affaire au contenu d’un élément. La fonction ne permet pas de savoir de quel élément il s’agit (rappelons que les éléments et le texte constituent des nœuds distincts dans l’arborescence d’un document XML, et sont donc traités séparément par le parseur). La seule solution est de s’appuyer sur une variable globale, $element_courant qui stocke le nom du dernier élément rencontré (voir la fonction debutElement()). On utilise ce nom pour mémoriser le contenu dans le tableau $tab_elements, lui aussi déclaré comme une variable globale. Ce style de programmation, assez laborieux, est imposé par l’absence d’informa- tion sur le contexte quand une fonction est déclenchée. On ne sait pas à quelle profondeur on est dans l’arbre, quels sont les éléments rencontrés auparavant ou ceux qui qui vont être rencontrés après, etc. Cette limitation est le prix à payer pour l’efficacité du modèle d’analyse : le parseur se contente de parcourir le document une seule fois, détectant le marquage au fur et à mesure et déclenchant les fonctions appropriées. Le code ci-dessous montre comment faire appel au module, en l’appliquant au document Gladiator.xml (voir page 318). Exemple 8.13 exemples/ExSAX.php : Exemple d’application du parseur <?php // Application des fonctions SAX require ("SAX.php"); Header ("Content-type: text/plain"); // Analyse du document $film = ParseFilm ("Gladiator.xml"); // Affichage des donn´ees extraites while ( list ($nom, $val) = each ($film)) echo "Nom : $nom Valeur : $val\n"; ?> 8.3 Import de données XML dans MySQL 339 On obtient alors le résultat suivant (noter que les noms d’éléments sont mis en majuscules par le parseur, option par défaut qui peut être modifiée) : Exemple 8.14 ResultatSAX.txt : Résultat de l’application du parseur balise ouvrante de FILM balise ouvrante de TITRE balise fermante de TITRE balise ouvrante de ANNEE balise fermante de ANNEE balise ouvrante de CODEPAYS balise fermante de CODEPAYS balise ouvrante de GENRE balise fermante de GENRE balise ouvrante de REALISATEUR balise fermante de REALISATEUR balise fermante de FILM Nom : TITRE Valeur : Gladiator Nom : ANNEE Valeur : 2000 Nom : CODEPAYS Valeur : USA Nom : GENRE Valeur : Drame L’approche très simple employée ici se généralise difficilement à des documents XML plus complexes comprenant des imbrications d’éléments, comme par exemple un film avec son réalisateur et la liste de ses acteurs. Le fait de devoir mémoriser dans des variables globales le positionnement du parseur dans le document rend rapidement la programmation assez laborieuse. Heureusement, une fonctionnalité très intéressante du parseur XML/PHP permet une intégration forte avec la programmation orientée-objet. Nous montrons dans ce qui suit comment utiliser cette fonctionnalité. C’est également l’occasion de revenir sur les notions de spécialisation et d’héritage de la programmation objet, présentées dans le chapitre 3. 8.3.3 Une classe de traitement de documents XML La fonction xml_set_object() permet d’associer un parseur XML et un objet, avec deux effets liés : • les « déclencheurs » seront pris parmi les méthodes de l’objet (ou, plus préci- sément, de la classe dont l’objet est une instance) ; • ces déclencheurs ont accès aux variables d’état de l’objet, ce qui évite d’avoir recours aux variables globales. On peut donc développer des classes, dédiées chacune à un type de document particulier (par exemple nos films), avec un style de programmation beaucoup plus élégant que celui employé précédemment. Chaque classe fournit, sous forme de méthodes, des fonctionnalités de création du parseur, de gestion des erreurs, de défi- nition des déclencheurs, de lancement de l’analyse, etc. Afin d’essayer d’être –encore 340 Chapitre 8. XML une fois– le plus général possible, nous allons distinguer dans ces fonctionnalités celles, génériques, qui sont identiques pour tous les types de document de celles qui sont spécifiques à un type de document donné. Il serait dommage de dupliquer les premières autant de fois qu’il y a de types de documents, avec les inconvénients évidents en termes de maintenance et de modification qui en découlent. Il est donc souhaitable de recourir à la spécialisation objet qui permet de « factoriser » les fonctions génériques et de les rendre disponibles pour chaque classe traitant d’un type de document particulier. Le principe consiste à créer une (super-)classe qui regroupe les fonctions géné- riques au traitement d’un document par SAX, et à créer, par spécialisation, une sous-classe de cette super-classe qui peut réutiliser ses fonctionnalités (héritage), les redéfinir (surcharge), et lui en ajouter d’autres (extension). Voici le code de la super-classe. Nous en décrivons plus bas les principales méthodes. Exemple 8.15 webscope/lib/SAX.php : Une classe générique de traitement d’un document XML <?php /∗∗ ∗ Classe générique d’appel aux fonctions SAX d’ analyse de ∗ documents XML. ∗ Cette classe doit être sous−typée pour chaque type de ∗ document ∗ Au niveau de la super− classe on se contente d’instancier le ∗ parseur , ∗ de gérer les messages d ’erreur , et d’ afficher au fur et à ∗ mesure ∗ le contenu du document analysé . ∗ / class SAX { private $parseur ; protected $donnees; // Données caractères rencontrées en cours d’analyse protected $erreur_rencontree , $message; // Indicateur et message d ’erreur // Constructeur de la classe function __construct ($codage) { // On instancie le parseur $this−>parseur = xml_parser_create($codage) ; // On indique que les déclencheurs sont des méthodes de la // classe xml_set_object ($this−>parseur , &$this ); // Tous les noms d’éléments et d’attributs seront traduits en // majuscules 8.3 Import de données XML dans MySQL 341 xml_parser_set_option($this−>p a r s e u r , XML_OPTION_CASE_FOLDING , true); xml_set_element_handler ($this−>parseur , "debutElement" , " finElement"); xml_set_character_data_handler ($this−>parseur , " donneesCaracteres"); $this−>erreur_rencontree = 0; } // Méthode générique de traitement des débuts d ’ éléments protected function debutElement ($parseur , $nom, $attrs) { // On recherche si une méthode nommée "debut {NomElement}" existe if ( method_exists ($this , "debut$nom" )) { call_user_func ( array( $this , "debut$nom") , $parseur , $nom , $attrs); } else if ( get_class ($this) == "sax") { echo "Début d ’ élément : &lt ; " . $nom . "&gt ;\n" ; } // Effacement des données caractères $this−>donnees = " " ; } // Méthode générique de traitement des fins d ’ élément protected function finElement ($parseur , $nom) { // On recherche si une méthode nommée " fin {NomElement}" // existe if ( method_exists ($this , "fin$nom" )) { call_user_func ( array($this , "fin$nom") , $parseur , $nom) ; } else if ( get_class ($this) == "sax") { echo "Fin d ’élément : &lt ;/ " . $nom . "&gt ;\n" ; } } // Pour les données , on stocke simplement au fur et à mesure // dans la propriété $this −>donnees protected function donneesCaracteres ($parseur , $chaine) { // On ne prend pas les chaînes vides ou ne contenant que des // blancs if (!empty($chaine)) $this−>donnees .= $chaine ; } 342 Chapitre 8. XML // Méthode pour analyser le document public function parse( $fichier ) { // Ouverture du fichier if (!($f=fopen($fichier , "r"))) { trigger_error ("Impossible d’ ouvrir le fichier $fichier\n" , E_USER_ERROR) ; return ; } // Analyse du contenu du document while ($data = fread($f , 4096)) { if (!xml_parse ($this−>parseur , $data , feof($f))) { $this−>erreur ("Erreur rencontrée ligne " . xml_error_string( xml_get_error_code($this−>parseur)) . "%de $fichier : " . xml_get_current_line_number($this−>parseur)); return ; } } fclose ($f); } // Destructeur de la classe function __destruct () { xml_parser_free($this−>parseur); } // Fonction retournant le message d’erreur public function messageErreur ($message) { return $this−>message ; } // Fonction indiquant si une erreur est survenue public function erreurRencontree () { return $this−>erreur_rencontree ; } // Fonction traitant une erreur function erreur ($message) { trigger_error ($message , E_USER_ERROR) ; } } ?> La classe comprend trois méthodes, __construct() (le constructeur), parse() et __destruct() (le destructeur), qui correspondent respectivement aux trois phases de l’analyse d’un document : création du parseur, ouverture du fichier et . précédemment. Chaque classe fournit, sous forme de méthodes, des fonctionnalités de création du parseur, de gestion des erreurs, de défi- nition des déclencheurs, de lancement de l’analyse, etc inconvénients évidents en termes de maintenance et de modification qui en découlent. Il est donc souhaitable de recourir à la spécialisation objet qui permet de « factoriser » les fonctions génériques et de. d’associer un parseur XML et un objet, avec deux effets liés : • les « déclencheurs » seront pris parmi les méthodes de l’objet (ou, plus préci- sément, de la classe dont l’objet est une instance) ; • ces

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

TỪ KHÓA LIÊN QUAN

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

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

TÀI LIỆU LIÊN QUAN