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

Pratique de MySQL et PHP- P68 pdf

5 256 1

Đ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

7.4 Recommandations 313 renvoient le résultat. Elles se trouvent dans classes/Util.php. Les deux autres fonctions se chargent de calculer respectivement les formules (7.3) et (7.2), page 306. Afin de calculer une prédiction, on procède en deux étapes : 1. d’abord on calcule le coefficient de corrélation entre l’internaute pour lequel on s’apprête à faire la prédiction et tous les autres : on stocke ces valeurs dans un tableau associatif $tabCorr indexé par le nom des internautes ; 2. puis on prend chaque film non noté par l’internaute, on applique la fonction calculant la prédiction, et on affiche le résultat. Le calcul des prédictions pour un ensemble de films est implanté par la méthode privée prediction() du contrôleur Recomm, donnée ci-dessous. private function prediction ($email , $nb_films) { $films = array() ; // Calcul des corrélations avec les autres internautes $reqInternautes = "SELECT i.∗ FROM Internaute i , Notation n " . " WHERE n.email = i.email AND i.email != ’$email’ " . " GROUP B Y i . e m a i l HAVING COUNT( ∗)>10"; $listeInter = $this−>bd−>execRequete ( $reqInternautes ) ; $tab_corr = array() ; while ($internaute = $this−>bd−>objetSuivant ($listeInter )) $tab_corr [$internaute−>email ] = Util :: calculCorrelation ($email , $internaute−>email , $this−>bd) ; // Recherche des films , en ordre aléatoire $ r eq uet e = "SELECT ∗ FROM Film ORDER BY RAND() " ; $resultat = $this−>bd−>execRequete ($requete) ; $i=1; while ($film = $this−>bd−>objetSuivant ($resultat )) { // On vérifie que ce film n’ est pas noté par l ’ internaute $notation = Util :: chercheNotation ($email , $film−>id , $this −>bd) ; if (! $notation) { // Calcul de la prédiction pour ce film $prediction = Util :: calculPrediction ($email , $film−>id , $tab_corr , $this−>bd ) ; $prediction = round ($prediction∗100) /100; $films [$film−>id] = $prediction ; if ($i++ >= $nb_films) break ; } } // On renvoie le tableau des prédictions return $films; } 314 Chapitre 7. Production du site On constate qu’il faut manipuler beaucoup d’informations pour arriver au résultat, ce qui risque de soulever des problèmes de performance pour une base de données volumineuse. En particulier, le tableau des corrélations contient autant d’éléments qu’il y a d’internautes dans la base, et le passage de ce tableau en paramètre de la fonction CalculPrediction() peut être assez pénalisant. Un passage par référence éviterait cela. Une fois qu’une application est stabilisée, et dans la mesure où elle est conçue de manière véritablement modulaire, il est relativement facile de remettre en cause quelques fonctions pour améliorer les performances. Ici une optimisation simple consisterait à ne pas recalculer systématiquement et en temps réel les corrélations entre internautes, mais à le faire périodiquement – par exemple une fois par jour – en stockant le résultat dans une table MySQL. Au lieu de passer le tableau $tabCorr en paramètre de la fonction CalculPrediction(), cette dernière pourrait alors chercher les corrélations dans la table. La méthode statique Util::calculCorrelation() calcule et renvoie le coeffi- cient de corrélation entre deux internautes, selon la formule (7.3). Elle effectue donc une boucle sur tous les films, prend ceux qui ont été notés par les deux internautes, et calcule les composants de la formule. static function calculCorrelation ($email1 , $email2 , $bd) { $somme_numerateur = 0.; $somme_denom1 = 0 . ; $somme_denom2 = 0 . ; $moyenne1 = self :: moyenneInternaute ($email1 , $bd) ; $moyenne2 = self :: moyenneInternaute ($email2 , $bd) ; $ r eq uet e = "SELECT ∗ FROM Film" ; $listeFilms = $bd−>execRequete ($requete) ; while ($film = $bd−>objetSuivant ( $listeFilms )) { $notation1 = self :: chercheNotation ($email1 , $film−>titre , $bd) ; $notation2 = self :: chercheNotation ($email2 , $film−>titre , $bd) ; if ($notation1 and $notation2) { $somme_numerateur += ( $notation1−>note − $moyenne1) ∗ ($notation2−>note − $moyenne2) ; $somme_denom1 += pow( $notation1 −>note − $moyenne1 ,2) ; $somme_denom2 += pow( $notation2 −>note − $moyenne2 ,2) ; } } $somme_denominateur = sqrt ($somme_denom1 ∗ $somme_denom2) ; if ($somme_denominateur != 0) $corr = abs($somme_numerateur) / $somme_denominateur ; else $corr = 0; 7.4 Recommandations 315 return $corr ; } Les fonctions pow(), sqrt() et abs() font partie du riche ensemble de fonctions de PHP (voir annexe C). Finalement la méthode statique Util::calculPrediction() applique la formule (7.2) pour calculer la prédiction sur un film comme la moyenne des notations des autres internautes sur ce film, pondérées par les coefficients de corrélation. static function calculPrediction ($email , $id_film , $tab_corr , $bd) { // Calcul de la moyenne des notes de l ’ internaute courant $ma_moyenne = self :: moyenneInternaute($email , $bd) ; // Boucle sur toutes les autres notations du même film $ r e q _n o ta ti o ns = "SELECT ∗ FROM Notation WHERE id_film = ’ $id_film ’"; $liste_notations = $bd−>execRequete ($req_notations) ; // Application de la formule de corrélation $somme_corr = 0.; $somme_ponderee = 0.; while ($notation = $bd−>objetSuivant ($liste_notations)) { $moyenne = self :: moyenneInternaute($notation−>email , $bd) ; $somme_corr += (float) $tab_corr ["$notation−>email " ]; $somme_ponderee += ( float ) $tab_corr [ " $notation−>email " ] ∗ ($notation−>note − $moyenne) ; } if ($somme_corr != 0.) return $ma_moyenne + ($somme_ponderee / $somme_corr) ; else return $ma_moyenne; } On peut remarquer dans cette fonction que les variables $sommeCorr et $sommePonderee sont explicitement manipulées comme des réels, avec la commande de conversion (float) placée devant une expression. Comme PHP est libre de convertir une variable en fonction du type qui lui semble le plus approprié, il vaut mieux prendre la précaution de donner explicitement ce type s’il est important. XML 8 Ce chapitre propose une introduction à XML et présente quelques utilisations pos- sibles de ce langage dans le cadre d’un site web basé sur MySQL et PHP. L’intérêt de XML dans un tel contexte consiste essentiellement à faciliter l’échange de données, aussi bien pour exporter des données de la base MySQL et les transmettre sur le réseau, que pour récupérer des données et les insérer dans la base. Nous verrons comment représenter une base de données relationnelle en XML et comment utiliser les fonctions PHP pour extraire des données de cette représentation. Une autre possibilité d’utilisation de XML est la publication de données. Un des atouts de XML est de rendre la représentation de l’information indépendante des applications qui la manipulent. Dans notre cas, cela signifie qu’un document XML produit par un site web MySQL/PHP n’est pas réduit à être affiché dans un navigateur, à la différence des documents HTML construits jusqu’à présent. On peut, après une phase de transformation, proposer les informations de ce document au format HTML, mais aussi PDF pour une lecture ou impression de qualité, SVG pour des graphiques, ou enfin RSS. En d’autres termes on sépare le contenu de la présentation, ce qui rejoint en partie les objectifs des solutions de templates présentées dans le chapitre 5. Notre présentation de XML est bien entendu illustrée dans le cadre du site W EBSCOPE, les fonctionnalités étant rassemblées dans le contrôleur XML dont la page d’accueil est reprise figure 8.1. On peut, à l’aide d’un formulaire semblable à celui utilisé pour la notation (voir page 295), rechercher des films et en obtenir une représentation sous forme de document XML, indépendante donc de MySQL, PHP ou HTML. On peut également appliquer une transformation XSLT à ce même document pour le mettre au format HTML (selon le même principe, on pourrait obtenir de nombreux autres formats). Enfin il est possible d’effectuer l’opération inverse, à savoir transmettre au serveur un fichier contenant un document XML . essentiellement à faciliter l’échange de données, aussi bien pour exporter des données de la base MySQL et les transmettre sur le réseau, que pour récupérer des données et les insérer dans la base. Nous. peut remarquer dans cette fonction que les variables $sommeCorr et $sommePonderee sont explicitement manipulées comme des réels, avec la commande de conversion (float) placée devant une expression base de données relationnelle en XML et comment utiliser les fonctions PHP pour extraire des données de cette représentation. Une autre possibilité d’utilisation de XML est la publication de données.

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

TỪ KHÓA LIÊN QUAN