MySQL et CSS- P4

Chia sẻ: Thanh Cong | Ngày: | Loại File: PDF | Số trang:50

0
40
lượt xem
6
download

MySQL et CSS- P4

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

MySQL et CSS- P4: Dans la première partie, lancez-vous dans la création de votre premier site web dynamique en PHP. Au travers d’exemples simples et concrets, apprenez à votre rythme à développer un site web complet, relié à une base de données MySQL

Chủ đề:
Lưu

Nội dung Text: MySQL et CSS- P4

  1. Récapitulation de la syntaxe des requêtes } session_register(tentative); } Ainsi quand l’internaute atteint la fin de la troisième tentative avec une réponse fausse à la question, un nouvel écran lui demande d’envoyer un courriel au webmestre. L’ouverture d’une fenêtre avec une fonction Javascript Le formulaire oubli.php n’a pas besoin de tout l’écran pour s’afficher, nous allons donc créer une nouvelle fenêtre avec une fonction Javascript que nous appellerons ouvrir_vasistas() :
  2. 4 MySQL en action Voici d’abord les principales commandes SQL. Ce sont des commandes communes à la plupart des bases de données. Seule leur syntaxe peut présenter des petites particularités (les types de guillemets…). Tab. 4.9 : Les principales commandes SQL Commande Description Syntaxe CREATE Crée une table CREATE TABLE nom_table (nom_colonne type(longueur)…) DELETE Efface des données DELETE FROM nom_table INSERT Insère des données INSERT INTO nom_table [(colonne1,…)] VALUES (valeur_colonne1,…) SELECT Extrait des données SELECT nom_colonne1… FROM nom_table UPDATE Modifie des UPDATE nom_table SET données nom_colonne1=’nouvelle_valeur’,… Les fonctions de MySQL présentent l’inconvénient de consommer de la ressource serveur, surtout si votre base est bien remplie. Mais elles permettent de vous épargner des lignes de codes en langage PHP. Tab. 4.10 : Quelques fonctions MySQL Fonction Description Syntaxe AVG() Retourne la moyenne des différents AVG(nom_colonne1) nombres COUNT() Compte le nombre de lignes COUNT (*) RAND() Permet d’effectuer un tri aléatoire avec ORDER BY RAND () ORDER BY 152 • Double Poche PHP & MySQL
  3. Récapitulation de la syntaxe des requêtes Voici un certain nombre de clauses SQL qui modulent le résultat : WHERE Détermine les données sur lesquelles s’appliquent les commandes SQL DELETE, SELECT, UPDATE Syntaxe : WHERE nom_colonne=’valeur’ Options AND, OR, NOT Exemple DELETE FROM nom_table where nom_colonne1=2 OR nom_colonne1=5 Explication AND : les deux expressions sont vraies, OR : une expression est vraie, NOT : une expression est fausse. Ces trois opérateurs peuvent se combiner avec des parenthèses Prenons par exemple : SELECT * from membres where (pays=’HTI’ OR pays=’DMA’) AND date_misajour BETWEEN 20020401 AND 20020430. Les parenthèses donnent des priorités, ainsi OR est traité avant AND. DISTINCT Regroupe les données identiques Syntaxe : DISTINCT nom_colonne Options sans Exemple SELECT DISTINCT nom_colonne1 FROM nom_table Explication retire les doublons du résultat GROUP BY Regroupe les données identiques Syntaxe : GROUP BY nom_colonne1, nom_colonne2… Options sans Double Poche PHP & MySQL • 153
  4. 4 MySQL en action Exemple SELECT * FROM nom_table where nom_colonne1=2 GROUP BY nom_colonne2 Explication partitionne les résultats par champ sur lesquels il effectue les fonctions ORDER BY Ordonne les données selon la ou les colonnes choisies Syntaxe : ORDER BY nom_colonne1, nom_colonne2… Options ASC (par défaut) : ordre croissant), DESC : ordre décroissant Exemple SELECT * FROM nom_table where nom_colonne1=2 ORDER BY nom_colonne2 DESC Explication trie selon l’ordre de la table des caractères ASCII (chiffre, capitale, bas de casse…) LIMIT Limite le résultat de la requête à un certain nombre de lignes Syntaxe : LIMIT nombre_de_lignes Options LIMIT [ligne_de_début,] nombre_de_lignes Exemple SELECT * FROM nom_table where nom_colonne1=2 LIMIT 2, 30 Explication Les lignes sont numérotées à partir de 0 Voici encore quelques clauses : Tab. 4.11 : Quelques clauses Clause Description AS Désigne une donnée par un alias. LIKE Permet une recherche sur une partie de la valeur du champ avec des caractères génériques comme % ou _. RLIKE Permet une recherche avec des expressions rationnelles. 154 • Double Poche PHP & MySQL
  5. Récapitulation de la syntaxe des requêtes $sql="select COUNT(*) as compte, pays.nom as nation from membres, pays where pays.code=membres.pays GROUP BY nation"; $resultat=@mysql_query($sql,$id_link); while($rang=@mysql_fetch_array($resultat)){ $nation=$rang[’nation’]; $compte=$rang[’compte’]; echo "$nation : $compte"; } Dans ce programme, vous considérez le nombre de membres de votre club par pays. Nous utilisons la fonction COUNT(*) pour compter le nombre de lignes qui sont ensuite regroupées par pays, ce qui nous donne le nombre de membres par pays. Nous utilisons AS pour donner un alias au nombre et un autre au pays. Nous définissons le champ avec la table, ainsi pays.code désigne le champ code dans la table pays. Voici une requête composée avec LIKE : $sql="select COUNT(*) as compte from membres, pays where membres.nom_usage LIKE ’b%’"; Dans cette requête, % remplace plusieurs caractères. Ainsi la recherche se fait sur le nombre de membres dont le nom d’usage commence par b. Si nous avions utilisé ’%b%’, la requête aurait demandé à la base de trouver un nom d’usage comportant la lettre b. Le caractère _, lui, remplace un seul caractère. $sql="select COUNT(*) as compte from membres, pays where membres.nom_usage LIKE ’b___’"; Dans cette requête, nous avons inséré trois blancs soulignés, cela signifie que nous comptons le nombre de membres dont le nom d’usage commence par b et comprend quatre lettres. Au cours des chapitres suivants, vous retrouvez ces fonctions dans diverses applications. Double Poche PHP & MySQL • 155
  6. 4 MySQL en action 4.14 Les procédures stockées Avec sa version 5, MySQL propose l’utilisation de procédures stockées. Ce type de fonctionnalité économise du code PHP et rend les requêtes réutilisables. Cela crée une sorte d’interface entre la base de données et le script. La commande est compilée sur le serveur et est alors disponible pour des requêtes. L’application PHP appelle la procédure en lui envoyant de nouveaux paramètres, celle-ci s’exécute en une fois et renvoie un résultat. L’opération est plus rapide qu’une requête envoyée simplement par une fonction PHP car la requête n’a besoin d’être analysée qu’une seule fois. Cette version répondra à la norme SQL 2003. 4.15 SQLite SQLite est proposée avec la version 5 de PHP. C’est une base de données sans serveur. Elle se sert de fichiers pour stocker ses données, ce qui la rend très rapide et très simple à mettre en place. Le fichier est verrouillé pour toute requête pendant un accès en écriture, ce qui rend SQLite impropre à une utilisation comportant de nombreux accès écriture. Une des particularités de SQLite est que vous pouvez créer une base dans la mémoire pour faire une opération pendant la durée de votre script. $db = sqlite_open(’:memory:’); Imaginons que vous désirez proposer les codes postaux français sur votre site. $commune=$_POST[’commune’]; if ($commune){ $db = sqlite_open(’codesPostaux.db’); // cette fonction ouvre une base existante ou en crée // une si elle n’existe pas $sql = "SELECT commune, codepostal from liste where commune LIKE ’%$commune%’"; $resultat = sqlite_query($db, $sql ); echo "Résultats trouvés :" while ($rang = sqlite_fetch_array($resultat)){ $commune=$rang[’commune’]; $codepostal=$rang[’codepostal’]; echo "$commune $codepostal" } echo "" sqlite_close($db); 156 • Double Poche PHP & MySQL
  7. SQLite } echo "; echo ’Tapez le nom de la commune ’; Les droits sur votre répertoire de base de données N’oubliez pas de donner des droits d’écriture à votre réper- toire de travail. Cette base est très facile à monter et comporte de nombreuses fonction- nalités comme la possibilité de faire des requêtes imbriquées pour des tables jointes par exemple dans le cas d’un catalogue de livre où la collection est représenté par un numéro qui est reporté dans une table collections avec le nom en clair : SELECT titre FROM catalogue WHERE collection = (SELECT code FROM collections WHERE nom = ’e-poche’) ou SELECT catalogue.titre FROM catalogue, collections WHERE catalogue.collection = collection.code AND collection.nom = ’e-poche’ Un autre des traits de SQLite est la possibilité d’y enregistrer des fonctions PHP. Par exemple, vous pouvez décider, pour continuer l’exem- ple précédent de glisser une espace dans le code postal pour mettre en valeur le numéro de département comme par exemple 35 270 function formater_codepostal($codepostal) { return substr_replace($codepostal, ’ ’, 2, 0); } sqlite_create_function($db, ’format_code’, ’ formater_codepostal’, 1); $rangs = sqlite_array_query($db, ’SELECT format_code(’codepostal’) from ’codePostaux.db’); Cette présentation succincte sert d’introduction à cette base de données qui propose avec simplicité un certain nombre de fonctionnalités très utiles tout en ayant une capacité de 2 téraoctets. Elle est adéquate pour tout site web moyen, c’est-à-dire la grande majorité des sites. Double Poche PHP & MySQL • 157
  8. 5 L e PHP et l’ap proche objet
  9. 5 Le PHP et l’approche objet Le langage PHP, rappelez-vous, est un langage procédural, c’est-à-dire que l’application parcourt le fichier PHP ligne à ligne, de droite à gauche, lisant les instructions au fur et à mesure d’une manière linéaire. PHP 4 a intégré la programmation objet d’une façon hybride, c’est-à-dire sans en intégrer toutes les implications. En PHP 4, on peut éviter d’utiliser la programmation objet et programmer ce que l’on veut. Si maintenant vous désirez exploiter les nouvelles possibilités de PHP 5, qui a particulière- ment développé cet aspect, il vous faut en comprendre les multiples aspects. m Figure 5.1 : Langage procédural Nous verrons les différences de conception entre PHP 4 et PHP 5 en fin de chapitre pour ne pas nuire à la clarté de l’explication. Pourquoi vouloir encombrer PHP avec une option qui lui est étrangère, telle que celle d’objet ? 160 • Double Poche PHP & MySQL
  10. Qu’est-ce que l’objet ? 5.1 Qu’est-ce que l’objet ? Le livre que vous tenez en main est un objet ; le siège sur lequel vous êtes probablement assis est un objet. C’est un élément autonome et entier avec des propriétés et des fonctions. C’est une capsule percée de plusieurs ouvertures. Ces capsules sont des unités indépendantes du contexte dans lequel elles sont utilisées, elles peuvent donc être utilisées dans tous les contextes. Vous pouvez voir ces capsules comme des briques de programme. Ces bouts de programmes sont donc autonomes. m Figure 5.2 : Langage à objets La classe est le modèle, et l’objet est une création à partir de ce modèle (une instance). La classe est le prototype et l’objet, son application dans des situations concrètes. Cet objet a des propriétés ou des attributs. Ces propriétés sont portées par des variables à l’intérieur de la classe. Les fonctions ou méthodes de la classe concernent les actions traitées par cette classe. Une des fonctions de la civilisation est de classer différents objets. Double Poche PHP & MySQL • 161
  11. 5 Le PHP et l’approche objet Pour créer une classe, il faut d’abord modéliser un objet, c’est-à-dire distinguer et choisir les différentes propriétés et méthodes dont vous avez besoin pour le générer. Prenons l’objet deux-roues ; nous allons énumérer les différentes proprié- tés qui le distinguent d’un autre deux-roues : ¶ la couleur ; ¶ la taille ; ¶ l’état. Examinons la liste. La dernière propriété est de moins en moins pertinente, nous l’enlèverons donc de notre liste. On peut déjà créer une classe deux_roues class deux_roues { var $couleur; var $taille=’adulte’; var $etat="est arrêté"; function deux_roues ($couleur, $taille, $etat){ $this-> couleur = $couleur; $this-> taille = $taille; $this-> etat = $etat; } function affiche (){ echo "mon deux-roues ".$this->couleur." ". $this->etat. ". Il est de taille " . $this->taille. " et de type " . $this->type. " avec ".$this->nbreVitesses. " vitesses."; } function rouletil (){ $this->etat; setlocale (LC_ALL, ’fr_FR’); $moment=strftime ("%A %e %B %Y à %H %M"); $this->moment=$moment; echo "Ce deux-roues".$this->etat."$moment"; } } Nous avons ici une classe avec les attributs et la méthode deux_roues(). Comme vous l’avez remarqué, cette méthode porte le même nom que la classe, ce qui la désigne comme constructeur. Cette méthode va servir à construire l’objet quand la classe sera appelée avec la méthode new(). 162 • Double Poche PHP & MySQL
  12. L’héritage À l’intérieur de la fonction, nous employons la variable this accompa- gnée de l’opérateur −>. La variable this est une variable passe-partout qui évite de donner à chaque fois un nom pour une variable qui est locale à la classe et donc temporaire. L’opérateur −> référence une classe, une méthode ou une propriété d’une classe. Pour appeler l’objet deux_roues : include("deux_roues_class.php"); $mondeux_roues=new deux_roues(’vert’, ’enfant’, ’roule’); echo "Mon deux-roues est ".$mondeux-roues ->couleur; echo "Mon deux-roues ". $mondeux-roues ->rouletil(); La première ligne inclut la classe deux_roues. Il est conseillé de mettre une seule classe par fichier pour pouvoir s’y retrouver par la suite. La deuxième ligne appelle la classe deux_roues pour en créer une instance nommée $mondeux_roues à laquelle j’envoie des attributs. Dans le cas du PHP 4, le programme crée une copie de l’objet. Cette opération est consommatrice de ressources, ce qui ralentit l’opération. Le second problème est que vous agissez non pas sur l’objet lui-même mais sur sa copie. 5.2 L’héritage Dans la catégorie, il existe plusieurs types d’objets comme vélo, moto. Ces objets sont dérivés de l’objet deux-roues. La classe deux-roues est la classe parente de la classe vélo, qui est une classe dérivée. Avec le PHP 4, une classe ne peut hériter que d’une seule classe parente. Les héritages se font avec le mot clé ’ extends ’. La classe dérivée hérite des propriétés et des méthodes de la classe parente tout en ayant la possibilité d’ajouter les siennes. class velo extends deux_roues{ var $nbreVitesses=18; var $type="VTT"; function velo ($nbreVitesses, $type){ $this-> nbreVitesses = $nbreVitesses; $this-> type = $type; $this-> etat = $etat; Double Poche PHP & MySQL • 163
  13. 5 Le PHP et l’approche objet } } Pour appeler cette classe dérivée : include("deux_roues_class.php"); include("velo_class.php"); $monvelo=new velo (); $monvelo->etat = "roule"; $monvelo->couleur = "rouge"; $monvelo->taille = "adulte"; $monvelo->nbreVitesses = "12"; $monvelo->type = "VTC"; echo "mon vélo ".$monvelo->couleur." ".$monvelo->etat.". Il est de taille ".$monvelo->taille." et de type ".$monvelo->type." avec "$monvelo->nbreVitesses." vitesses."."; Si la classe dérivée contient une propriété ou une méthode contenue dans la classe parente alors c’est la méthode ou la propriété cette classe dérivée qui prévaut sur celles de la classe parente. class velo extends deux_roues{ var $nbreVitesses=18; var $type="VTT"; function velo ($nbreVitesses, $type){ $this-> nbreVitesses = $nbreVitesses; $this-> type = $type; $this-> etat = $etat; $this-> identite="mon velo "; } function affiche (){ echo $this->identite.$this->couleur." ". $this->etat .". Il est de taille ". $this->taille ." et de type ". $this->type ." avec ". $this->nbreVitesses . " vitesses."; } } Nous utilisons ici une méthode du même nom, affiche(). Si nous utilisons la méthode affiche() de la classe velo, nous n’avons plus accès à la méthode affiche() de la classe deux_roues. Maintenant, nous allons faire une classe vélomoteurs et motos. class velomoteur extends deux_roues{ var $puissance=750; var $type="routière"; var $marque="Honda"; function velomoteur ($puissance, $type, $marque){ 164 • Double Poche PHP & MySQL
  14. Surcharger une méthode $this-> puissance = $puissance; $this-> type = $type; $this-> marque = $marque; $this-> identite="ma moto "; } function affiche (){ echo $this->identite.$this->couleur." " .$this->etat.". Il est de taille " .$this->taille." et de type ".$this->type." avec " .$this->nbreVitesses." vitesses."; } } Cela va devenir plus difficile de s’y retrouver, et nous allons donc utiliser un ersatz de surcharge avec une sorte d’interface. 5.3 Surcharger une méthode Surcharger une méthode ou une propriété consiste, dans la programmation objet, à donner le même nom à deux propriétés ou à deux méthodes ou plus. Cette commodité est exploitée dans des langages typés dans la mesure où ces différentes méthodes utilisent des données de type différent, ou un nombre différent de paramètres, ce qui n’est pas possible en PHP 4 mais le devient en PHP 5. Pour les propriétés de même nom, il faut qu’elles soient de type différent. C’est pratique pour réunir dans une même classe les mêmes fonctions avec des variantes pour des situations différentes sans pour autant créer une classe dérivée. En PHP 4, nous pouvons utiliser une astuce avec la fonction func_num_args(), qui donne le nombre de paramètres envoyés à la fonction. Ainsi, imaginons que les fonctions velo() et velomoteur() soient à l’intérieur de la classe vehicule. Dans la méthode constructeur de la classe vehicule, on inclut une sorte d’aiguillage conditionné par le nombre d’arguments. class vehicule { function vehicule() { if (func_num_args()==2){ $name=’velo’; $argument1=func_get_arg(0); Double Poche PHP & MySQL • 165
  15. 5 Le PHP et l’approche objet $argument2=func_get_arg(1); $this->$name($argument1, $argument2); } elseif (func_num_args()==3){ $name=’velomoteur’; $argument1=func_get_arg(0); $argument2=func_get_arg(1); $argument3=@func_get_arg(2); $this->$name($argument1, $argument2, $argument3); } } function velomoteur ($puissance, $type, $marque){ $this-> puissance = $puissance; $this-> type = $type; $this-> marque = $marque; $this-> identite="ma moto "; } function velo ($nbreVitesses, $type){ $this-> nbreVitesses = $nbreVitesses; $this-> type = $type; $this-> etat = $etat; $this-> identite="mon velo "; } } /* ensuite vous appelez la classe vehicule pour créer un objet véhicule avec la méthode velo().*/ $monvelo=new vehicule("18", "VTT"); Ce type de procédé rend la classe plus simple à utiliser. 5.4 Le polymorphisme Le polymorphisme se définit comme la possibilité pour un objet de déterminer la méthode à invoquer selon l’objet passé comme argument. Cette action est gérée au vol, en temps réel. Dans les exemples précédents, nous avons la classe velo et la classe velomoteur ainsi que la classe parente deux_roues avec pour chacune la méthode affiche() . Le polymorphisme nous évite de choisir, le programme le fait pour nous. $obj1=new velo(18, "VTT"); $obj2=new velomoteur (750, "trial", "Suzuki"); $deux_roues ->affiche($obj1); $deux_roues ->affiche($obj2); 166 • Double Poche PHP & MySQL
  16. Passer un argument par référence 5.5 Passer un argument par référence Avec PHP 4, l’argument passé à une fonction contient par défaut la copie de la variable, ce qui pose un problème si vous modifiez cette variable. Référence et valeur Quand vous créez une variable, le système alloue une case mémoire pour contenir la valeur de la variable. Quand vous passez une valeur à une fonction ou à une méthode, le programme copie la valeur de cette variable en laissant la variable originale intacte. En revanche, quand vous passez une variable par référence, la valeur qui est passée à la méthode est l’adresse de l’original ; donc, les modifications à l’intérieur de cette méthode sont faites sur le contenu de la case mémoire originale, directement sur la source. Pour qu’un argument soit toujours passé par référence à une fonction, ajoutez une esperluette devant l’argument dans la fonction : function convertir_dollar_vers_euro (&$prix) { $prix=(float)$prix; $prix*=0.8; $prix .= ’5’; } $phrase= ’Cet article vaut ’; $prix=’15$’; convertir_dollar_vers_euro ($prix); $phrase.= $prix; echo $phrase; // résultat ’’Cet article vaut 125" Pour qu’un argument soit passé par défaut à une fonction qui ne le fait pas par défaut, ajoutez une esperluette devant l’argument dans l’appel à la fonction : function convertir_dollar_vers_euro ($prix) { $prix=(float)$prix; $prix*=0.8; $prix .= $prix.’5’; } $phrase= ’Cet article vaut ’; $prix=’15$’; convertir_dollar_vers_euro ($prix); $phrase.= $prix; Double Poche PHP & MySQL • 167
  17. 5 Le PHP et l’approche objet echo $phrase; // résultat ’’Cet article vaut 15$" /*il n’a pas été converti, c’est sa copie interne à la fonction qui a été convertie */ convertir_dollar_vers_euro (&$prix); echo $phrase; // résultat ’’Cet article vaut 125" 5.6 PHP 5 et l’objet PHP 5 rejoint Java comme langage objet en s’enrichissant des fonction- nalités d’un vrai langage objet, le rendant ainsi plus rigoureux, reproduc- tible et plus propre. Le pointeur PHP 5 n’utilise plus la copie de l’argument comme PHP 4 mais se sert d’un pointeur (handle) du type de celui utilisé pour les fichiers. Pour continuer à utiliser les objets comme dans PHP 4, vous disposez de la méthode induite _clone(). Les privilèges Les privilèges d’accès aux méthodes et aux propriétés sont de trois types : ¶ private conditionne l’accès à la méthode ou à la propriété pour les méthodes de la classe. ¶ protected conditionne l’accès à la méthode ou à la propriété pour les méthodes de la classe ou des classes héritières ou dérivées. ¶ public ouvre l’accès à la méthode ou à la propriété pour toutes les classes. private $machambre; protected function cloturer () Le constructeur et le destructeur Le constructeur est la méthode qui permet à la classe de construire l’objet. Dans PHP 4, elle est homonyme à la classe ; dans PHP 5, elle se nommera _construct() ou sera homonyme. 168 • Double Poche PHP & MySQL
  18. PHP 5 et l’objet De la même manière, la méthode _destruct() permet de détruire l’objet. D’autres fonctionnalités enrichissent cette version, qui révolutionne l’ap- proche du développeur PHP. Nous les développons encore dans les quelques chapitres suivants, en particulier dans le chapitre intitulé Parsez-vous XML ? Double Poche PHP & MySQL • 169
Đồng bộ tài khoản