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

Pratique de MySQL et PHP- P18 ppsx

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

2.1 Programmation avec fonctions 63 $cetteAnnee = date(’Y’); // Rien à renvoyer ! } ?> Voici maintenant la fonction équivalente renvoyant la date courante sous forme d’un tableau à trois entrées, jour, mois et an. Exemple 2.6 exemples/RenvoiTableau.php : Fonction renvoyant la date courante <?php // Exemple de fonction renvoyant plusieurs valeurs grâce à un // tableau function aujourdhui_tab () { // Initialisation du retour $retour = array () ; // On calcule le jour , le mois et l ’année courante $retour [] = date(’d’); $retour [] = date(’m’); $retour [] = date(’Y’); // Renvoi du tableau return $retour ; } ?> L’exemple ci-dessous montre l’utilisation des deux fonctions précédentes. On utilise la décomposition du tableau en retour grâce à l’opérateur list,maison pourrait également récupérer une seule variable de type tableau, et la traiter ensuite : Exemple 2.7 exemples/QuelJour.php : Appel des fonctions précédentes <?php // Exemple d’appel à une fonction renvoyant plusieurs // valeurs : passage par référence et passage par tableau require_once( ’RenvoiTableau.php ’); require_once( ’References .php’); // On veut obtenir le jour , le mois, l ’an. $an = $mois = $jour = "" ; // Passage des valeurs par référence aujourdhui_ref ($jour , $mois , $an); echo "Nous sommes le $jour / $mois / $an<br/> " ; // Appel, et récupération des valeurs du tableau 64 Chapitre 2. Techniques de base list($jour , $mois , $an) = aujourdhui_tab() ; echo "Confirmation : nous sommes le $jour / $mois/$an<br/>"; ?> Une caractéristique de cette syntaxe est que l’on ne sait pas, en regardant ce code, que la fonction aujourdhui_ref() modifie les valeurs de ses paramètres et a donc un impact invisible sur le script appelant. Si on commence à utiliser le passage par référence pour certaines fonctions, on se retrouve donc dans un monde incertain où certaines variables sont modifiées après un appel à une fonction sans que l’on sache pourquoi. Du point de vue de la compréhension du code, le passage des paramètres par valeur est donc préférable. Ce qui nous amène au second argument en faveur du passage par référence : le passage par valeur entraîne des copies potentiellement pénalisantes. Cet argument est à prendre en considération si on pense que la fonction en cause est appelée très fréquemment et manipule des données volumineuses, mais on doit être conscient que le recours aux références est plus délicat à manipuler et rend le code moins sûr. Dans le cadre de ce livre, où la lisibilité des exemples et du code est un critère primordial, aucune fonction n’utilise de passage par référence (et encore moins de variable globale). Cela montre, incidemment, qu’il est tout à fait possible de se passer totalement de ces mécanismes. Dans la plupart des cas on y gagne un code sain, sans impacter les performances. Je reviendrai à quelques occasions sur ce choix pour discuter d’une autre stratégie de développement consistant à recourir au passage par références. Comme indiqué ci-dessus, les objets sont une exception en PHP : ils sont toujours passés par référence. 2.2 TRAITEMENT DES DONNÉES TRANSMISES PAR HTTP Pour étudier de manière concrète les problèmes soulevés par l’échange de données via HTTP (et leurs solutions), nous allons étudier une application très simplifiée d’envoi de courrier électronique (terme que nous simplifierons en e-mail) dont la figure 2.1 donne le schéma. Il s’agit d’un script unique, Mail.php, qui fonctionne en deux modes : 1. Si aucune donnée ne lui est soumise, le script affiche un formulaire de saisie d’un e-mail. L’utilisateur peut alors entrer les données du formulaire et les soumettre. Elles sont transmises, au même script, via HTTP. 2. Si des données sont soumises (cas où on est donc passé par le mode précédent), le script récupère les données et doit : • envoyer l’e-mail, • stocker l’e-mail dans la base de données, • l’afficher en HTML pour confirmer la prise en charge de l’envoi. Ce qui nous intéresse ici, c’est le traitement des données transférées dans trois contextes différents : envoi sous forme de texte pur, insertion dans MySQL et 2.2 Traitement des données transmises par HTTP 65 affichage avec HTML. Chaque traitement est implanté par une fonction détaillée dans ce qui suit. Voici le script général, Mail.php, qui appelle ces différentes fonctions. Message à envoyer ? OuiNon Saisie, puis soumission Affichage du formulaire Stockage dans la base Affichage à l’écran Transmission des données par HTTP Envoi du mail Texte MySQL HTML Figure 2.1 — Le schéma de l’application d’envoi d’un e-mail Exemple 2.8 exemples/Mail.php : Script de gestion d’un e-mail <?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 "> <head> <title >Envoi d’un e−mail </ title > <link rel=’ stylesheet ’ href="films. css" type="text/ css" /> </head> <body> <h1>Envoi de mail </h1> <?php // Inclusion des fichiers contenant les déclarations de fonctions require_once (" Normalisation .php") ; require_once ("ControleMail .php") ; require_once (" StockeMail .php") ; require_once (" AfficheMail .php") ; require_once ("EnvoiMail.php") ; // Normalisation des entrées HTTP Normalisation() ; // Si la variable $envoyer existe , des données ont été saisies // dans le formulaire 66 Chapitre 2. Techniques de base if (isSet($_POST[’envoyer’])) { // Contrôle des données en entrée if (! ControleMail($_POST)) { // Un problème quelque part ? Il faut réagir echo "<p>Quelque chose ne va pas </ p >"; exit ; } // On a passé le test : stockage dans la base StockeMail($_POST) ; // On affiche le texte de l ’e−mail AfficheMail ($_POST); // Envoi de l ’e−mail EnvoiMail($_POST) ; } else { // On affiche simplement le formulaire require ("FormMail . html" ) ; } ?> </body> </html> Le premier mode de l’application, avec le formulaire de saisie, est présenté figure 2.2. Figure 2.2 — Formulaire d’envoi d’un e-mail 2.2 Traitement des données transmises par HTTP 67 2.2.1 Échappement et codage des données HTTP Quand l’utilisateur soumet un formulaire, le navigateur code les données saisies dans les champs pour les inclure dans un message HTTP. Rappelons que : • en mode get les paramètres sont placés dans l’URL appelée ; • en mode post les paramètres sont transmis dans le corps du message HTTP. Nous allons utiliser le mode post car la méthode get a l’inconvénient de créer des URL très longues pour y stocker les paramètres. Une partie de ces derniers peut d’ailleurs être perdue si la taille limite (256 caractères selon le protocole HTTP) est dépassée. Un mode de passage des paramètres imposant le mode get est celui où l’on place directement les paramètres dans une ancre du document HTML. Supposons par exemple qu’on place quelque part dans le document HTML une ancre dans laquelle on passe le sujet de l’e-mail : echo "<a href=’Mail.php?sujet=$sujet’>Message</a>"; Il faut être attentif dans ce cas à bien coder l’URL selon les règles HTTP. Si le sujet est par exemple Wallace & Gromit ou l’ours ?, l’esperluette « & » et le point d’interrogation « ? », placés littéralement dans l’URL, rendront le message HTTP incompréhensible pour le script. On obtiendra en effet : echo "<a href=’Mail.php?sujet=Wallace & Gromit ou l’ours ?>Message</a>"; Le codage s’obtient en appliquant la fonction urlEncode() aux chaînes placées dans les ancres. Voici donc la bonne version : $sujet = " Wallace & Gromit ou l ’ ours ? " ; $sujetPourURL = urlEncode( $sujet ) ; echo "<a href =’Mail .php? sujet=$sujetPourURL’>Message </a>" ; L’URL sera alors codée comme suit : Mail.php?sujet=Wallace+%5C%26+Gromit+ou+l%27ours+%3F Revenons au cas où l’on utilise un formulaire, ce qui garantit que le navigateur effectuera le codage pour nous. Après soumission, le message est transmis au script indiqué dans l’attribut action du formulaire. Dans notre cas, le script est « réen- trant » car il reçoit lui-même les données soumises par le formulaire qu’il a affiché. Il suffit d’être capable de déterminer, à l’entrée du script, si le formulaire vient d’être soumis ou non. On utilise un champ caché, de nom envoyer, qui provoquera donc l’instanciation d’une variable PHP après soumission. Exemple 2.9 exemples/FormMail.html : Le formulaire de saisie des e-mails <!−− Formulaire basique pour l ’envoi d’un e−mail −−> <form action=’Mail .php’ method=’post ’> <!−− Champ caché pour indiquer que le formulaire a été soumis −−> . courante $retour [] = date(’d’); $retour [] = date(’m’); $retour [] = date(’Y’); // Renvoi du tableau return $retour ; } ?> L’exemple ci-dessous montre l’utilisation des deux fonctions précédentes et rend le code moins sûr. Dans le cadre de ce livre, où la lisibilité des exemples et du code est un critère primordial, aucune fonction n’utilise de passage par référence (et encore moins de variable. Une partie de ces derniers peut d’ailleurs être perdue si la taille limite (256 caractères selon le protocole HTTP) est dépassée. Un mode de passage des paramètres imposant le mode get est celui

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