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

Pratique de MySQL et PHP- P38 ppsx

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

3.3 La classe Formulaire 163 La méthode champLibelle() construit tout d’abord, par appel à la méthode champForm(), une chaîne contenant le champ du formulaire. On dispose alors des variables $champHTML et $pLibelle que l’on place simplement dans le tableau représentant le composant, en indiquant que le type de ce dernier est CHAMP. Le troisième type de composant à créer indique le début d’un tableau permettant d’afficher les champs de manière ordonnée. // Début d ’une table , mode horizontal ou v erti cal public function debutTable ( $orientation=Formulaire ::VERTICAL, $attributs=array () , $nbLignes=1) { // On instancie un objet pour créer ce tableau HTML $tableau = new Tableau (2, $attributs); // Jamais d’affichage de l ’en−tête des lignes $tableau−>setAfficheEntete (1, FALSE ); // Action selon l ’orientation du tableau if ( $ o r i e n t a t i o n == F o r m u l a i r e : : HORIZONTAL) $tableau−>setRepetitionLigne (1, "ligne" , $nbLignes); else // Pas d’affichage non plus de l ’en−tête des colonnes $tableau−>setAfficheEntete (2, FALSE ); // On crée un composant dans lequel on place le tableau $this−>composants [ $this−>nbComposants ] = array( " t y p e " => "DEBUTTABLE" , "orientation"=> $orientation , "tableau"=> $tableau); // Renvoi de l ’ identifiant de la ligne et incrémentation return $this−>nbComposants++; } La présentation basée sur un tableau est, bien entendu, déléguée à un objet de la classe Tableau (voir section précédente) spécialisé dans ce type de tâche. On instancie donc un objet de cette classe quand on sait qu’il faudra produire un tableau, et on le configure selon les besoins de mise en forme du formulaire (revoir si nécessaire la figure 3.4, page 153, pour la conception de la classe et les règles de présentation). Ici : 1. quelle que soit l’orientation, horizontale ou verticale, on n’utilise jamais d’en- tête pour les lignes ; 2. en affichage horizontal, on répète n fois la ligne contenant les différents champs en appelant la méthode repetitionLigne() de la classe Tableau (non présentée précédemment, mais consultable dans le code) ; 3. en affichage vertical, on n’affiche pas non plus d’en-tête pour les colonnes. Une fois configuré, l’objet tableau est inséré, avec l’orientation choisie, dans le composant de type DEBUTTABLE. L’objet sera utilisé dès que l’on demandera la production du formulaire avec la méthode formulaireHTML(). 164 Chapitre 3. Programmation objet Enfin, voici la dernière méthode créant un composant marquant la fin d’une présentation basée sur un tableau HTML. public function finTable () { // Insertion d’une ligne marquant la fin de la table $this−>composants [ $this−>nbComposants++] = array ("type"=>" FINTABLE" ) ; } Méthodes publiques de création de champs Nous en arrivons à la partie publique de la classe correspondant à la création de champs. À titre d’exemple, voici trois de ces méthodes. public function champTexte( $libelle , $nom, $val , $taille , $tailleMax=0) { return $this−>champLibelle($libelle , $nom, $val , "text", array ( "SIZE"=>$taille , "MAXLENGTH"=>$tailleMax)) ; } public function champRadio( $libelle , $nom, $val , $li st e ) { return $this−>champLibelle($libelle , $nom, $val , "radio", array () , $liste); } public function champFenetre($libelle , $nom, $val , $lig , $col) { return $this−>champLibelle($libelle , $nom, $val , "textarea" , array("ROWS"=>$lig , "COLS"=>$col )) ; } Toutes font appel à la même méthode privée champLibelle(), et renvoient l’identifiant de champ transmis en retour par cette dernière. La méthode champLibelle() est plus générale mais plus difficile d’utilisation. Le rôle des méthodes publiques est véritablement de servir d’interface aux méthodes privées, ce qui signifie d’une part restreindre le nombre et la complexité des paramètres, et d’autre part contrôler la validité des valeurs de ces paramètres avant de les transmettre aux méthodes privées. On pourrait contrôler par exemple que le nombre de colonnes d’un champ textarea est un entier positif. Notez, dans l’appel à champLibelle(), le passage du cinquième paramètre sous forme d’un tableau associatif indiquant un des attributs de la balise HTML correspon- dante. Par exemple champTexte(), qui correspond à une balise <input>, indique la taille d’affichage et la taille maximale de saisie en passant comme paramètre array("SIZE"=>$pTaille, "MAXLENGTH"=>$pTailleMax). Cette technique de 3.3 La classe Formulaire 165 passage de paramètres est un peu délicate à utiliser car il est facile d’y introduire des erreurs. En s’en servant uniquement dans le cadre d’une méthode privée, on limite les inconvénients. Production du formulaire Finalement, il reste à produire le formulaire avec la méthode formulaireHTML(). Quand cette méthode est appelée, toute la description du contenu du formulaire est disponible dans le tableau composants. Il s’agit donc essentiellement de parcourir ces composants et de créer la présentation appropriée. On concatène alors successi- vement la balise d’ouverture, en faisant attention à utiliser l’attribut enctype si un champ de type file a été introduit dans le formulaire, puis la chaîne de caractères dans laquelle on a placé tous les composants, enfin la balise fermante. public function formulaireHTML () { // On place un attribut enctype si on transfère un fichier if ($this−>transfertFichier) $encType = "enctype=’multipart /form−data ’"; else $encType=" " ; $formulaire = "" ; // Maintenant , on parcourt les composants et on crée le HTML foreach ($this−>composants as $idComposant => $description ) { // Agissons selon le type de la ligne switch ($description ["type"]) { case " CHAMP" : // C’ est un champ de formulaire $libelle = $description[ ’libelle ’]; $champ = $description [ ’champ’ ]; if ($this−>orientation == Formulaire ::VERTICAL) { $this−>tableau−>ajoutValeur($idComposant , "libelle" , $libelle); $this−>tableau−>ajoutValeur($idComposant , "champ", $champ) ; } else if ($this−> o r i e n t a t i o n == F o r m u l a i r e : : HORIZONTAL) { $this−>tableau−>ajoutEntete (2 , $idComposant , $libelle); $this−>tableau−>ajoutValeur (" ligne " , $idComposant , $champ) ; } else $formulaire .= $libelle . $champ; break ; 166 Chapitre 3. Programmation objet case "TEXTE " : // C’est un texte simple à insérer $formulaire .= $description [ ’texte ’]; break ; case "DEBUTTABLE" : // C’est le début d’un tableau HTML $this−>orientation = $description [ ’ orientation ’ ]; $this−>tableau = $description [ ’tableau ’ ]; break ; case "FINTABLE" : // C’est la fin d’un tableau HTML $formulaire .= $this−>tableau−>tableauHTML() ; $this−>orientation="" ; break ; default : // Ne devrait jamais arriver echo " <p>ERREUR CLASSE FORMULAIRE ! ! < / p> " ; } } // Encadrement du formulaire par les balises $formulaire = "\n<form method=’$this−>methode ’ " . $encType ."action=’$this−>action ’ name=’$this−>nom ’ > " . $formulaire . "</form>"; // Il faut éventuellement le centrer if ($this−>centre) $formulaire = "<center>$formulaire </center>\n" ;; // On retourne la chaîne de caractères contenant le // formulaire return $formulaire ; } Essentiellement le code consiste à parcourir les composants et à agir en fonction de leur type. Passons sur l’ajout de texte et regardons ce qui se passe quand on rencontre un composant de début ou de fin de tableau. Dans le premier cas (début de tableau), on récupère dans le composant courant l’objet de la classe tableau instancié au moment de l’appel à la méthode debutTable() avec les paramètres appropriés. On place ce tableau dans la propriété tableau de l’objet, et on indique qu’on passe en mode table en affectant la valeur de la propriété orientation.À partir de là, cet objet devient disponible pour créer la mise en page des champs rencontrés ensuite. Dans le second cas (fin de tableau), on vient de passer sur toutes les informations à placer dans le tableau et on peut donc produire la représentation HTML de ce dernier avec tableauHTML(), la concaténer au formulaire, et annuler le mode tableau en affectant la chaîne nullle à orientation. 3.4 La classe IhmBD 167 C’est donc l’objet tableau qui se charge entièrement de la mise en forme des lignes et colonnes permettant d’aligner proprement les champs du formulaire. Bien entendu, il faut entre les composants de début et de fin de table alimenter le tableau avec ces champs : c’est ce que fait la partie traitant les composants de type CHAMP. Il suffit d’appeler la méthode ajoutValeur() de la classe Tableau en fonction de l’orientation souhaitée. • En mode Table, vertical, les libellés sont dans la première colonne et les champs dans la seconde. On indexe les lignes par l’identifiant du composant, la première colonne par ’libelle’ et la seconde par ’champ’. • En mode Table, horizontal, les libellés sont dans les en-têtes de colonne, chaque champ forme une colonne. On indexe donc chaque colonne par l’identifiant du composant, et l’unique ligne par ligne. Notez qu’on a indiqué, au moment de l’instanciation du tableau, que cette ligne devait être répétée plusieurs fois. Enfin, en mode libre (orientation est vide), on écrit simplement le libellé suivi du champ. En résumé, la classe Formulaire se limite, du point de vue de l’application, à l’ensemble des méthodes présentées dans le tableau 3.8, page 154. En ce qui concerne la partie privée de la classe, si elle est bien conçue, il n’y aura plus à y revenir que ponctuellement pour quelques améliorations, comme par exemple ajouter des attributs HTML, gérer des classes CSS de présentation, introduire un système de contrôles JavaScript, etc. L’utilisation des objets produits par la classe est beaucoup plus simple que son implantation qui montre un exemple assez évolué de gestion interne d’une structure complexe, pilotée par une interface simple. 3.4 LA CLASSE IHMBD Nous allons conclure par un dernier exemple de classe très représentatif d’un aspect important de la programmation objet, à savoir la capacité d’allier une réalisation générique (c’est-à-dire adaptée à toutes les situations) de tâches répétitives, et l’adap- tation (voire le remplacement complet) de cette réalisation pour résoudre des cas particuliers. Le cas d’école considéré ici est celui des opérations effectuées avec PHP sur les tables d’une base de données. Les quelques chapitres qui précèdent ont montré que ces opérations sont souvent identiques dans leurs principes, mais varient dans le détail en fonction : • de la structure particulière de la table ; • de règles de gestion spécifiques comme, par exemple, la restriction à la liste des valeurs autorisées pour un attribut. Les règles de gestion sont trop hétéroclites pour qu’on puisse les pré-réaliser simplement et en toute généralité. Leur codage au cas par cas semble inévitable. En revanche la structure de la table est connue et il est tout à fait envisageable d’automatiser les opérations courantes qui s’appuient sur cette structure, à savoir : 1. la recherche d’une ligne de la table par sa clé ; . méthode privée champLibelle(), et renvoient l’identifiant de champ transmis en retour par cette dernière. La méthode champLibelle() est plus générale mais plus difficile d’utilisation. Le rôle des méthodes. à un objet de la classe Tableau (voir section précédente) spécialisé dans ce type de tâche. On instancie donc un objet de cette classe quand on sait qu’il faudra produire un tableau, et on le. l’ajout de texte et regardons ce qui se passe quand on rencontre un composant de début ou de fin de tableau. Dans le premier cas (début de tableau), on récupère dans le composant courant l’objet de

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

TỪ KHÓA LIÊN QUAN