Support- DM-CS3
Transcription
Support- DM-CS3
A.F.C.I NEWSOFT 12 – 16 Rue de Vincennes – 93100 Montreuil – TEL : 01.42.87.40.20 – FAX : 01. 42.87.38.28 SAS au capital de 154 000 € - SIRET 349 343 384 00039 – APE 8559A – AGREE FORMATION : 11930129393 Site : www.afci.fr - Email ; [email protected] - TVA Intracommunautaire : FR66349343384 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L Création de pages web dynamiques PHP / MySQL avec Dreamweaver CS3 1 INTRODUCTION......................................................................................................................................................... 4 2 QU'EST-CE QUE LE PHP ? ..................................................................................................................................... 5 2.1 2.2 2.3 LA PETITE HISTOIRE ................................................................................................................................................5 LE VRAI PHP............................................................................................................................................................5 LE SUPER PHP ! .......................................................................................................................................................5 3 COMMENT ÇA MARCHE ? .................................................................................................................................... 6 4 PHP ET MYSQL........................................................................................................................................................... 7 4.1 4.2 5 PHP ...........................................................................................................................................................................7 M YSQL ....................................................................................................................................................................7 INSTALLER ET CONFIGURER ............................................................................................................................ 8 5.1 5.2 5.3 6 EASYPHP ...................................................................................................................................................................8 CREATION DES DOSSIERS POUR LE SITE...............................................................................................................9 CREATION D'UN ALIAS............................................................................................................................................9 JEUX DE CARACTERES & INTERCLASSEMENTS ...................................................................................11 6.1 6.2 6.3 6.4 6.5 6.6 7 LES JEUX DE CARACTERE S ...................................................................................................................................11 LES INTERCLASSEMENTS......................................................................................................................................12 PRESENTATION DES FONCTIONNALITES DE M YSQL........................................................................................13 JEUX DE CARACTERES ET INTERCLASSEMENTS UTILISES POUR LE STOCKAGE .............................................14 CORRIGER UNE INCOHERENCE DE JEUX DE CARACTERES................................................................................15 JEUX DE CARACTERES ET INTERCLASSEMENTS DE CONNEXION.....................................................................15 ADMINISTRER UNE BASE DE DONNEES MYSQL....................................................................................17 7.1 7.2 7.3 7.4 CREATION DE LA BASE AVEC PHPM YA DMIN...................................................................................................17 A JOUTER UN NOUVEL UTILISATEUR POUR LA BASE .........................................................................................18 CREER UNE TABLE.................................................................................................................................................19 A FFICHER LES ENREGIST REMENTS......................................................................................................................21 8 EXPORTER - IMPORTER DES TABLES SQL...............................................................................................22 9 DEPLACER – COPIER OU RENOMMER UNE TABLE.............................................................................23 10 DEFINIR LE SITE DANS DREAMWEAVER CS3....................................................................................24 11 ÉTABLIR UNE CONNEXION A LA BASE DE DONNEES ....................................................................26 12 CREER UNE FICHE DYNAMIQUE (REQUETE SELECT) ..................................................................27 12.1 12.2 12.3 12.4 13 CONCEPTION DE LA PAGE .....................................................................................................................................27 CREATION DU JEU D 'ENREGISTREMENTS............................................................................................................27 CREER UNE BARRE DE NAVIGATION ...................................................................................................................28 CREER UN ETAT DE NAVIGATION ........................................................................................................................29 AJOUTER UN ENREGISTREMENT (REQUETE INSERT INTO) .....................................................30 13.1 13.2 14 CREER LE FORMULAIRE ........................................................................................................................................30 CREER LA PAGE DE CONFIRMATION....................................................................................................................32 SUPPRIMER UN ENREGIS TREMENT (REQUETE DELETE) ...........................................................32 14.1 14.2 14.3 page 2/3 CREER LE FORMULAIRE POUR CHOISIR...............................................................................................................32 CREER LA PAGE DE VERIFICATION......................................................................................................................34 SUPPRIMER L’ENREGISTREMENT SELECTIONNE................................................................................................36 ADO BE Dreamweaver CS 3 15 Pages web dynamiques : PHP /MyS Q L MODIFIER UN ENREGISTREMENT (REQUETE UPDATE) ..............................................................37 15.1 15.2 CREER LE FORMULAIRE POUR CHOISIR...............................................................................................................37 CREER LA PAGE DE VERIFICATION/MODIFICATION...........................................................................................37 16 AJOUTER UN CHAMP DANS UNE TABLE...............................................................................................40 17 RECHERCHER DES ENREGISTREMENTS (CLAUSE WHERE) .....................................................41 17.1 17.2 CREER LE FORMULAIRE DE RECHERCHE ............................................................................................................41 CREER LA PAGE DE RESULTATS...........................................................................................................................44 18 LES IMAGES DYNAMIQUES ..........................................................................................................................47 19 CREER UN LIEN DYNAMIQUE.....................................................................................................................50 20 RECHERCHE MULTICRITERES ..................................................................................................................52 21 REQUETE DE JOINTURE (INNER JOIN) ..................................................................................................55 22 PARAMETRE D'URL..........................................................................................................................................57 23 ACCES RESTREINT ...........................................................................................................................................62 23.1 23.2 CREATION DE LA TABLE DES IDENTIFIANTS......................................................................................................62 CREATION DES PAGES...........................................................................................................................................62 ANNEXES ...............................................................................................................................................................................66 23.3 23.1 23.2 LES OPERATEURS : LA " GRAMMAIRE" DE PHP .................................................................................................66 LES TYPES DE DONNEES DES CHAMPS DANS M YSQL......................................................................................70 INITIATION AU LANGAGE SQL (S TRUCTURE QUERY LANGUAGE )...................................................................73 page 3/4 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 1 Introduction Adobe Dreamweaver CS3 constitue un environnement professionnel destiné à la création d'applications web. Une application web est un ensemble de pages interagissant les unes avec les autres, ainsi qu'avec les différentes ressources d'un serveur web, notamment les bases de données (sites dynamiques). Dreamweaver CS3 offre le choix de piloter des bases de données de provenances diverses. Dreamweaver CS3 propose plusieurs langages pour interagir sur ces bases de données et sur les comportements de serveur. La solution retenue pour ce cours, outre l'utilisation de Dreamweaver CS3 sous Windows, est la combinaison PHP et MySQL. Une connaissance d'un système de gestion de base de données (par exemple avec MS Access) et de la conception de sites Web "statiques" (par exemple sous Dreamweaver) est indispensable pour assimiler toutes les leçons. Des notions du langage SQL seraient bienvenues ! page 4/5 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 2 Qu'est-ce que le PHP ? PHP est un langage de programmation, qui permet de générer des pages web dynamiques. C'est un langage assez étonnant, car il est accessible très facilement aux néophytes, tout en permettant aux experts de descendre assez bas au niveau du système, ou d'accéder à des librairies très intéressantes. De plus, il permet une programmation procédurale, ou orientée objets. Mais voyons cela plus en détails... 2.1 La petite histoire PHP a été inventé et distribué par Rasmus Lerdorf. Il est né au Groenland le 22 novembre 1968. Au départ, en 1995, le projet s'appelait PHP/FI (pour Personal Home Page Tools/Form Interpreter), et était utilisé comme une bibliothèque de scripts perl, qui permettait à Rasmus de gérer son CV. Baptisé alors : 'Personnal Home Page', cette bibliothèque s'étoffa peu à peu via des librairies en C, permettant notamment l'accès à des bases de données. Le "bonhomme" travaillant avec Unix depuis 1985 et avec Perl, on voit donc bien d'où vient la philosophie du PHP ! Le projet continua de grandir, et en 1997, déjà 1% des sites de la toile étaient passés au PHP ! Mais le langage, écrit totalement en C, restait peu cohérent et brouillon. 2.2 Le vrai PHP En 1997, deux étudiants, Andi Gutmans et Zeev Suraski décident de réécrire PHP/FI, et sortent la version 3 de PHP. Cette version est plus stable, mais permet également le système d'extensions, ce qui attire des dizaines de développeurs dans le projet. On voit également apparaître la syntaxe orientée objets, et un nouveau nom : Hypertext Preprocessor. En 1998, PHP occupait 10% du Web. PHP 4 voit le jour en mai 2000 et atteint alors 20% du Web mondial. Le moteur de PHP, appelé Zend Engine1 est maintenant plus performant, réécrit une nouvelle fois en C. 2.3 Le super PHP ! Après 4 ans de développement, la version 5 de PHP sort le 13 juillet 2004. Doté du Zend Engine 2.0, il permet des fonctionnalités encore plus intéressantes, avec par exemple une syntaxe orientée objets encore plus grande. 1 Zend Engine : est un moteur de script Open Source, surtout connu pour le rôle qu'il joue dans le langage de script PHP. Il a été originellement développé par Andi Gutmans et Zeev Suraski. Le nom Zend est un mot-valise de leurs prénoms Zeev et Andi. page 5/6 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L En 2004, PHP est utilisé par plus de 15 millions de personnes, soit deux fois plus qu'en 2002 ! 3 Comment ça marche ? Le PHP est un langage 100% côté serveur. Autrement dit, un client (votre navigateur par exemple) ne gère pas et ne voit pas le PHP. Mais où est-il alors ? En réalité, le code PHP est interprété (et non pas compilé, même si c'est possible. D'ailleurs, Rasmus insiste bien sur le fait qu'un code compilé est plus rapide ) sur le serveur, afin de générer du code HTML. Ce code HTML est alors envoyé sur le serveur via des requêtes HTTP au client, qui gère le code reçu et l'affiche : 1 Le navigateur envoie l'adresse vers le serveur. 4 3 PHP continue d'analyser la page, puis retourne le fichier dépourvu du code PHP au serveur web. Le serveur web renvoie donc un fichier ne contenant plus de PHP, donc seulement du HTML au navigateur qui l'interprète et l'affiche. 2 Le serveur web vérifie l'existence du fichier, et si celui-ci porte une extension reconnue il transmet ce fichier à PHP. Le code PHP est analys é et exécuté (script entre les balises <?php et ?>). Si ce code contient une requête qui appelle une base de données MySQL, PHP envoie cette requête SQL. La base de données renvoie les informations au script qui peut les exploiter (pour les afficher par exemple). Vous remarquerez que PHP s'exécute uniquement côté serveur. Il n'y a plus aucune trace du code PHP lorsque vous regardez le code source de la page dans votre navigateur. page 6/7 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 4 PHP et MySQL 4.1 PHP PHP (officiellement, ce sigle est un acronyme récursif pour "PHP: Hypertext Preprocessor") est un langage de scripts généraliste, Open Source, spécialement conçu pour le développement d'applications web. PHP est un langage de programmation qui s'intègre dans vos pages HTML. Il permet entre autres de rendre automatiques des tâches répétitives, notamment grâce à la communication avec une base de données (utilisation la plus courante de PHP). Techniquement, PHP tient la comparaison avec ses concurrents : ASP, ColdFusion, Perl ou Java Server Pages. Il n'y a plus de doutes sur le fait que PHP est devenu un standard du développement web. Très rapidement, on s'est aperçu aussi que PHP pourrait servir à autre chose que le web. C'est maintenant une réalité avec la sortie d'une version PHP-GTK, qui permet d'écrire des applications autonomes sous Unix ou Windows. 4.2 MySQL MySQL est un système de gestion de Bases de Données (SGBD) fonctionnant sous Linux et Windows. Il est très souvent utilisé avec PHP afin de créer un site entièrement dynamique et une mise à jour simplifiée. On retiendra que MySQL est devenu très populaire ces derniers temps. Relativement simple à prendre en main, il est déployé chez la plupart des hébergeurs (free ou pro) et répond parfaitement à des problématiques simples. A ce titre, il est parfaitement adapté pour gérer le stockage et la mise en ligne de contenu (informations, etc.). PHP est maintenant clairement un outil de premier plan, et on ne compte plus les articles et les analyses qui présentent le trio : Apache - PHP - MySQL comme la nouvelle formule gagnante du web. Après un succès immédiat dans la communauté Linux et Open Source, PHP s'est imposé dans le monde du business et de l'internet professionnel. page 7/8 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 5 Installer et Configurer Les hébergeurs de sites dynamiques PHP / MySql sont nombreux. Les prestations et les coûts sont variés. Chacun peut trouver l'hébergeur qui lui convient, du "free" au "pro". Pour tester le site développé en local à l'aide de Adobe Dreamweaver CS3, on a besoin d'installer en local : serveur web, PHP et MySQL. Easyphp installe et configure automatiquement un environnement de travail complet permettant de mettre en œuvre toute la puissance et la souplesse qu'offrent le langage dynamique PHP et son support efficace des bases de données. EasyPHP est un package WAMP2, une plateforme de développement Web, permettant de faire fonctionner localement (sans se connecter à un serveur externe) des scripts PHP. EasyPHP n'est pas en soi un logiciel, mais un environnement comprenant deux serveurs (un serveur web Apache et un serveur de bases de données MySQL), un interpréteur de script (PHP), ainsi qu'une administration SQL PhpMyAdmin. Il dispose d'une interface d'administration permettant de gérer les alias (dossiers virtuels disponibles sous Apache), et le démarrage/arrêt des serveurs. Il permet donc d'installer en une seule fois tout le nécessaire au développement local du PHP. Par défaut, le serveur Apache crée un nom de domaine virtuel (en local) http://127.0.0.1 ou http://localhost. Ainsi, quand on choisit "Web local" dans le menu d'EasyPHP, le navigateur s'ouvre sur cette URL et affiche la page index.php de ce site qui correspond en fait au contenu du dossier www d'EasyPHP. 5.1 Easyphp Installation de Easyphp : • Télécharger gratuitement (licence GPL libre de droit) Easyphp sur le site www.easyphp.org Dans ce support nous travaillerons avec la version 2.0 • Double cliquer sur l'exécutable téléchargé • Sélectionner le répertoire d'installation et suivre la procédure… 2 WAMP est un acronyme info rmatique signifiant : - « Windows » - « A pache » - « My S Q L » - « PH P » Les rôles de ces quatre composants sont les suivants : - Apache est le serveur web « frontal » : il est « devant » tous les autres et répond directement aux requêtes du client web (navigateur) ; Le langage de script PHP sert la logique ; MySQL stocke toutes les données de l'application ; Windows assure l'attribution des ressources à ces trois composants. page 8/9 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L Lancement de Easyphp : Lancez Easyphp par le raccourci sur le bureau ou dans le menu "démarrer". Il s'agit alors de la mise en route du serveur Apache et de MySQL. Remarque : Si un message d'erreur apparaît concernant le lancement de Apache ( port requis déjà utilisé), il faut alors vérifier que votre antivirus/Firewall ne bloque pas le port (80) ! Une fois Easyphp lancé, une icône apparaît dans la barre de notification (en bas à droite à coté de l'heure ). Cliquez droit sur cette icône pour ouvrir le "menu contextuel" d'Easyphp et accéder aux fonctionnalités suivantes : • Fichier Log : renvoie aux erreurs générées par Apache et MySQL • Configuration : donne accès aux différentes configurations d'Easyphp • Web local : ouvre la page http://localhost/ • Administration : permet de gérer vos bases de données et de créer vos alias, • Démarrer/Arrêter : démarre/arrête Apache et MySQL • Quitter : ferme Easyphp 5.2 Création des dossiers pour le site L’ensemble des fichiers du site doivent être regroupés dans un seul et même dossier (appelé dossier racine), à l'intérieur duquel, on pourra créer des sousdossiers afin d'organiser au mieux ses fichiers (images, pages…) ! Exemple : E:\supportphp Important : L'ensemble des fichiers et des dossiers devront être nommées sans espace et sans accent !! 5.3 Création d'un alias L'alias (dossier virtuel) permet de représenter l'emplacement du dossier racine du site. Ainsi, vous pourrez créer votre dossier où vous le souhaitez. De ce fait, l'alias sera utilisé pour tester vos pages web dynamiques depuis Dreamweaver (touche F12) vers l'adresse du domaine virtuel : http://localhost (serveur d’évaluation). Quand Easyphp est démarré, faire un clic droit sur l'icône à droite de la barre des tâches) et sélectionner "Administration". page 9/10 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L Dans la page d'accueil d'Easyphp, cliquer sur : [ajouter] : - Nommer l'alias (sans accent et sans espace !)) - Copier/Coller l'adresse du dossier du site, (afin d'éviter les erreurs de frappe !) - Redémarrer Apache (clic droit sur logo) afin de valider l'enregistrement de l'Alias. Remarques importantes : Un alias ne peut pas être modifié. Si vous renommez ou déplacez le dossier racine du site, il vous faudra supprimer et créer un nouvel alias ! Chaque projet web nécessitera la création d'un dossier racine et d'un alias. L'ensemble des alias est affiché sur la page d'accueil d'EasyPHP. page 10/11 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 6 Jeux de caractères & interclassements 6.1 Les jeux de caractères Afin de mieux comprendre la notion de jeu de caractères, lisez ce qui suit. Si vous savez déjà de quoi il s'agit, vous pouvez passer directement à la section suivante ! Un peu d'histoire… L'ordinateur ne connaît pas la notion de caract ères à proprement parler ; il ne connaît que les nombres. Du coup, on a inventé une table de conversion qui fait correspondre un nombre à un caractère : il s'agit de l'ASCII. Ce dernier définit 128 caractè res, sur 7 bits. Cela fonctionnait très bien lorsque l'informatique n'était encore qu'à ses débuts. Mais ensuite, on s'est rendu compte qu'on avait oublié dans ce code d'inclure les caractères accentués de nos chères langues nationales. Ainsi, il était imp ossible d'écrire un "é", un "è", un "à" ou un "ù", et encore moins des glyphes arabes, chinois ou japonais. Pour remédier à cela, on a utilisé le huitième bit, qui était jusqu'alors inutilisé (enfin, pas vraiment. I l était utilisé à des fins de contrôle de l'intégrité des données, mais cela n'est plus très utile car cette fonction est maintenant prise en charge par les protocoles de communication ), pour créer des "extensions" au code ASCII. Ces extensions particulières sont des encodages, ou encore des jeux de caractères (charsets) particuliers. En utilisant le huitième bit, on pouvait créer 128 caractères supplémentaires, ce qui était plus que suffisant pour y placer pas mal de caractères accentués. Ainsi, toute une flopée de jeux de caractères ont été créés, chacun couvrant une plage de langues ou d'alphabets précis : ISO -8859-1 à ISO-8859-15 notamment. Celui correspondant à notre alphabet occidental est l'ISO-8859-1, mais il est de plus en plus remplacé par l'ISO -8859-15 car ce dernier, plus récent, ajoute le support du signe euro "¬". Ces nombreux encodages ont rapidement créé des problèmes d'incompatibilité. En effet, en l'absence d'informations, comment savoir si le caractère portant la valeur 233 est un "é", comme en ISO-8859-1, ou la lettre hébraïque " yod", comme en ISO-8859-8 (alphabet hébreu) ? Pour éviter ce genre de dilemme, chaque document transmis ou enregistré porte en général à "proximité", par exemple, dans un en-tête HTTP, voire dans le document lui-même un champ indiquant le jeu de caractères dans lequel il a été encodé. Le cas échéant, le logiciel de lecture se replie en général vers un encodage par défaut (souvent, le plus répandu). Mais que se passe-t-il si le logiciel se trompe et choisit le mauvais encodage, parce que l'encodage par défaut n'est pas le bon, ou parce que l'information d'encodage livrée avec le document est erronée ? Eh bien, vous vous en doutez, on a droit à quelques problèmes ! Le plus souvent, le logiciel arrivera tout de même à afficher le document, mais tous les caract ères accentués seront tout simplement massacrés (les caractères "normaux" sont épargnés car il s'agit de la base ASCII, commune à tous les encodages). Le plus souvent, on est confronté à deux cas : soit le document est lu en ISO -8859-1 alors qu'il est encodé en UTF-8 (encodage que nous verrons un peu plus loin), auquel cas vous verrez des caractères de ce style à la place des accents : "é" (très joli, n'est-il pas ?), soit le document est lu en UTF-8 alors qu'il est encodé en ISO -8859-1 (plus rare), auquel cas tous les accents seront tout simplement remplacés par des "?". D'où l'intérêt de faire attention à bien vérifier que l'encodage spécifié est bien celui avec lequel on encode le document ! page 11/12 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L D'accord pour les problèmes d'encodage, mais il y en a un autre : comment faire pour écrire des glyphes latins, hébreu, chinois et russes dans la même page ? Par exemple, pour un cours d'histoire des langues ? Quel encodage ISO -8859-truc dois-je utiliser ? Aucun. En fait, il n'est pas possible de stocker toutes ces p ossibilités dans les 128 combinaisons possibles. On n'a donc pas le choix : il faut agrandir l'espace, c'est-à-dire s'étendre sur plus d'un octet par caractère. Oui, mais si on double chaque caractère (par exemple), la taille du document va doubler ! Il n'y a pas une meilleure solution ? Si. En fait, on va utiliser le fameux huitième bit comme "indicateur d'encodage" : par exemple, on peut dire que s'il est à 0, il s'agit d'un caractère ASCII, et s'il est à 1, on est en présence d'un glyphe non standard et qu'ici, et ici uniquement, on va le coder avec deux octets. Cela nous donne donc les 7 bits du premier octet plus les 8 bits du second octet, soit 15 bits, soit encore 32768 possibilités. D'un coup, on se sent plus à l'aise ! Ce type d'encodage existe : il s'agit du "célèbre" UTF-8. Alors pourquoi tout le monde ne se met pas à utiliser de l'UTF-8, puisqu'il est bien meilleur que les encodages de la série ISO ? Pour plusieurs raisons : • • UTF-8 est un jeu de caractères récent par rapport aux autres. Il est longtemps resté méconnu et peu utilisé. Du coup, l'habitude d'utiliser ISO -8859-1 reste encore solidement répandue. UTF-8 n'est d'aucune utilité si vous êtes absolument certains que vous allez rester dans un alphabet bien précis (l'alphabet latin, par exemple). Auquel cas, il peut s'avérer plus judicieux d'utiliser un encodage de la série ISO car un caractère accentué y prend moins de place qu'en UTF-8. Attention : Il faut vraiment être certain de chez certain ! P ar exemple, irez-vous jurer sur votre tête que vous n'insérerez jamais de caractère hébreu ou russe sur votre blog ? Sur un billet ayant pour sujet l'encodage des caractères par exemple, ou sur une langue précise ? • Surtout, le principal obstacle à la généralisation d'UTF-8 est que, contrairement aux encodages classiques, il faut que les logiciels soient adaptés. Pourquoi ? Parce que dans un encodage classique, le nombre d'octets est le même que le nombre de caractères (vu qu'un octet égale un caractère). Avec UTF-8, cette égalité ne tient plus. Du coup, le comportement des programmes non conçus pour gérer l'UTF-8 peut se révéler étrange avec ces types de documents. Il faut également signaler que pour cette même raison, une chaîne en UTF-8 est plus longue à traiter qu'une chaîne en encodage classique. Tout ça est bien joli, mais je ne sais même pas quel jeu de caractères j'utilise pour mon application/page web/documents ! Si vous ne savez pas quel encodage vous utilisez, il y a gros à parier qu'il s'agit de ISO -8859-1 (aussi appelé latin1). 6.2 Les interclassements Maintenant que vous avez appris en quoi consistent les jeux de caractères, voyons maintenant ce que sont les interclassements, et à quoi ils servent. Un interclassement (aussi appelé collation) est une table de correspondance spécifique à u n jeu de caractères. Un jeu de caractères peut avoir plusieurs interclassements : en général, un par langue (par exemple, latin1 français, latin1 suédois). Il a deux fonctions : page 12/13 ADO BE Dreamweaver CS 3 • Pages web dynamiques : PHP /MyS Q L il permet l'ordonnancement correct d'une liste de caractères. Par exemple, si l'on classe une liste par ordre alphabétique, qu'est-ce qui indique au logiciel que le "é" vient après le "e", ou que les majuscules viennent avant les minuscules (par exemple) ? Eh bien c'est l'interclassement. Ces ordres sont en général spécifiques à une langue. MySQL s'en sert pour les clauses ORDER BY des requêtes. En l'absence d'interclassement, les codes des caractères sont utilisés ; or, ceux-ci ne reflètent pas le véritable ordre des glyphes. • Il permet de savoir quand un caractère est "équivalent" à un autre. Par exemple, avec un interclassement adapté, le logiciel peut "prendre conscience" du fait que le caractère "e" est équivalent à "E", mais aussi à "é", "è" ou "ê". Cela peut se révéler extrêmement pratique pour la recherche : ainsi, une recherche sur "élément" retournera les résultats contenant "élément" mais aussi "Element", "element", voire "élEmeNt". D'où des recherches plus efficaces. En l'absence d'interclassement, aucun caractère n'est équivalent à un autre. Avec le jeu de caractères UTF-8, en plus des principales langues, un interclassement "générique" permet de gérer le cas des langues mélangées. Les interclassements vous seront très utiles pour obtenir des classements ORDER BY plus exacts avec les chaînes de caractères, ou pour rendre vos recherches plus efficaces (notamment les recherches de type FULLTEXT). 6.3 Présentation des fonctionnalités de MySQL Depuis la version 2.0 d'Easyphp, MySQL (version 5.0.022) gère une foule de jeux de caractères, parmi lesquels on retrouve les "classiques" ISO-8859-* et UTF-8, mais aussi des codages chinois, russes, japonais, coréens... Pour afficher la liste de tous les jeux de caractères supportés par votre serveur MySQL, exécutez la requête suivante : Code : SQL SHOW CHARACTER SET Et pour les interclassements : Code : SQL SHOW COLLATION Les interclassements se terminant par _ci sont insensibles à la casse ("E" = "e"), ceux se terminant par _cs sont sensibles à la casse, et enfin, ceux se terminant par _bin signifient classement binaire (autreme nt dit, pas d'interclassement). MySQL fait preuve d'une grande souplesse dans la définition de ces paramètres. Il est ainsi possible de spécifier dans quel jeu de caractères et interclassement les données sont stockées séparément pour chaque colonne. Il e st également possible pour un client de préciser le jeu de caractères utilisé lors de la transmission des données, de sorte que le serveur fasse automatiquement la traduction, si nécessaire. La manipulation de ces fonctions est quelque peu compliquée à expliquer (et donc à comprendre). Néanmoins, une fois que vous aurez compris, vous réaliserez que MySQL peut vous simplifier la vie dans bien des cas. page 13/14 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 6.4 Jeux de caractères et interclassements utilisés pour le stockage Il est possible de spécifier un jeu de caractères et / ou un interclassement pour une base de données, pour une table, et pour une colonne d'une table. Les paramètres des bases de données et des tables ne sont en fait que des valeurs par défaut pour les nouvelles colonnes : seul le jeu de caractère / interclassement de la colonne est en fait exploité lors d'une opération. En plus clair, cela signifie que si vous ne spécifiez pas de jeu de caractères (par exemple) lorsque vous créez ou "altérez" une colonne, ce sera le jeu de caractères de la ta ble qui sera utilisé et écrit comme étant le jeu de caractères de la colonne. Même principe pour le jeu de caractères des tables et celui des des bases de données. Voici les différentes requêtes à utiliser pour spécifier les jeux de caractères et les inte rclassements utilisés pour le stockage des données : Pour une base de données : Code : SQL CREATE DATABASE base_de_donnees [...] CHARACTER SET jeu_de_caracteres COLLATE interclassement Code : SQL ALTER DATABASE base_de_donnees CHARACTER SET jeu_de_caracteres COLLATE interclassement Pour une table : Code : SQL CREATE TABLE table [...] CHARACTER SET jeu_de_caracteres COLLATE interclassement Code : SQL ALTER TABLE table CHARACTER SET jeu_de_caracteres COLLATE interclassement Pour une colonne (champ) : Code : SQL 1 2 3 4 5 CREATE TABLE table ( colonne [...] CHARACTER SET jeu_de_caracteres COLLATE interclassement [...] ) [...] Code : SQL ALTER TABLE table CHANGE colonne colonne type CHARACTER SET jeu_de_caracteres COLLATE interclassement !! Attention : le fait de modifier le jeu de caractères d'une colonne avec ALTER entraîne automatiquement la conversion des données déjà présentes dans la colonne ! page 14/15 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L Notez que la requête suivante permet de convertir toutes les colonnes de la table à un jeu de caractères précis : Code : SQL 1 ALTER TABLE table CONVERT TO CHARACTER SET jeu_de_caracteres COLLATE interclassement 6.5 Corriger une incohérence de jeux de caractères J'ai une colonne déclarée en latin1, mais j'ai stocké à l'intérieur des données en UTF-8 ! Comment rétablir la cohérence de mes données ? Ce problème se produit très souvent, notamment lorsque vous mettez à jour une base de données MySQL 4.0 en une version plus récente, prenant en compte les jeux de caractères, et que vous stockiez vos données en UTF-8 sans vous préoccuper de la déclaration de la colonne. La documentation MySQL indique une astuce pour rétablir la situation : convertir la colonne en type binaire (BLOB, par exemple), puis la reconvertir en type texte en spécifiant le jeu de caractères voulu : Code : SQL 1 ALTER TABLE table CHANGE colonne colonne type_binaire; 2 ALTER TABLE table CHANGE colonne colonne type_texte CHARACTER SET jeu_de_caracteres; Par exemple : Code : SQL 1 2 ALTER TABLE t1 CHANGE c1 c1 BLOB; ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8; 6.6 Jeux de caractères et interclassements de connexion Considérez le problème suivant : vous avez une colonne dont les données sont stockées en UTF-8, et votre client (par exemple, un script PHP) utilise ISO-8859-1. Comment manipuler les données de la colonne ? Il faudrait d'abord convertir les données envoyées en UTF-8, puis les données reçues en ISO -8858-1... Pas très pratique, surtout lorsqu'on a plusieurs clients utilisant des encodages différents. C'est là que MySQL va nous aider : il peut se charger lui-même de la traduction. Dans notre exemple, il suffirait de dire à MySQL que le client est en ISO -8859-1, pour qu'il effectue tout seul les conversions d'encodage là où c'est nécessaire ! Ainsi, il convertirait les données envoyées par le client en UTF-8, et vice-versa, pour les données que le serveur envoie . Pour cela, il faut manipuler quatre variables MySQL : • • character_set_client indique au serveur l'encodage que le client utilise, c'est-à-dire dans quel jeu de cara ctères sont transmises les données du client vers le serveur. character_set_connection indique dans quel jeu de caractères le serveur va convertir les données avant de les traiter. Sauf rares exceptions, on indiquera la même valeur que pour character_set_client, afin d'éviter les conversions intermédiaires qui ne servent pas à grand-chose dans la plupart des cas. page 15/16 ADO BE Dreamweaver CS 3 • • Pages web dynamiques : PHP /MyS Q L collation_connection indique quel interclassement sera utilisé dans la comparaison de chaînes littérales, c'est-à-dire par exemple "machin" = "chose". Cette variable n'a aucun effet sur les comparaisons impliquant des colonnes, car celles-ci ont leur propre interclassement. character_set_results indique au serveur dans quel jeu de caractères celui-ci doit transmettre les résultats. Généralement, on indiquera le même encodage que pour character_set_client. Une variable peut se définir de la manière suivante : Code : SQL 1 SET variable = valeur Évidemment, les 4 variables décrites plus haut doivent être redéfinies à chaque connexion. On retie ndra, la formule simplifiée ! : Code : SQL 1 SET NAMES jeu_de_caracteres Qui a le même effet que : Code : SQL 1 SET character_set_client = jeu_de_caracteres; 2 SET character_set_results = jeu_de_caracteres; 3 SET character_set_connection = jeu_de_caracteres; page 16/17 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 7 Administrer une base de données MySQL 7.1 Création de la base avec PHPMyAdmin Cliquez droit sur le logo d'Easyphp (à côté de l'h eure dans la barre des taches ) et choisissez "Administration", puis Cliquer sur MYSQL ADMINISTRATION pour accéder à l'outil de gestion de bases de données : PHPMYADMIN. L'écran ci-dessous doit apparaître : - Saisir le nom de la nouvelle base (sans espaces et sans accent) - Et choisir ici l'interclassement : latin1_general_ci - puis cliquer sur le bouton Créer. Un message de confirmation indique que la base de données a été créée. Remarques importantes : Si vous disposez des paramètres du serveur distant de votre hébergeur, respecte z les informations communiquées par celui-ci (nom de la base de données ; nom utilisateur et mot de passe. Sinon, avant de faire le transfert FTP du site, il vous faudra modifier le fichier php de connexion ! page 17/18 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 7.2 Ajouter un nouvel utilisateur pour la base Après avoir créé la base, vous devez maintenant définir un utilisateur, selon les instructio ns de votre hébergeur. - Revenir à l'Accueil de PHPMyAdmin (à gauche de l'écran). - Ensuite cliquer sur le lien Privilèges, puis cliquer sur Ajouter un utilisateur. L'écran ci-dessous apparaît : Ø Saisir le nom d'utilisateur ainsi que le mot de passe selo n instructions de votre hébergeur. Ø Saisir le nom du serveur (localhost) et sélectionner "Entrez une valeur", Ø Cocher les privilèges à accorder à l'utilisateur (tous) Ø Enfin, Exécuter pour créer ce nouvel utilisateur. Remarque : Cet utilisateur vous sera demandé lors de la création de la connexion MySql dans Dreamweaver CS3. page 18/19 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 7.3 Créer une table 7.3.1 Définir la structure de la table • Sélectionner la base de données dans le menu de gauche, • Ensuite saisir le nom de la table (tboissons) et le nombre de champs à créer puis cliquer sur le bouton Exécuter • Nommer les champs (sans accent et sans espace !!!!), Ne pas choisir l'interclassement des champs de type texte (nomboisson – web commentaires). Il sera par défaut le même que celui précisé pour la base, soit latin1_general_ci ! • Définir un type pour chacun des champs, • Définir le champ "clé primaire" (idboisson), • Cliquer le bouton Sauvegarder pour créer la table . Le champ idboisson est le champ "clé primaire" de la table . Choisir auto_increment (dans la colonne Extra) pour obtenir la "numérotation automatique" des enregistrements et cocher le bouton radio Primaire Ce champ permet d'identifier de manière unique chaque enregistrement de la table !! Pour mieux comprendre la structure de la table, voici la description des différents types choisis : • SMALLINT représente un n ombre entier entre 0 et 65535 (l'attribut UNSIGNED pour non signé (facultatif), ne permet que des nombres positifs). Par rapport au type INT, SMALLINT prend moins de place mémoire et permet de coder des nombres moins grands. Il reste néanmoins amplement suffisant pour notre compteur. • VARCHAR représente une chaîne de caractères alphanumériques de longueur variable à préciser dans la colonne "taille/valeurs" avec un maximum de 255. • TEXT est un type d e données pouvant stocker jusqu'à 65 535 caractères. • LONGTEXT, lui, peut en stocker jusqu'à 4 294 967 295 ! Ces types sont utiles pour stocker un contenu dont on ne connaît pas la taille à priori. page 19/20 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L L'écran ci-dessous apparaît : 7.3.2 Saisir les enregistrements (données) Pour saisir les données dans la table, cliquer sur le bouton Saisir 4 enregistrements minimum ! (haut de la fenêtre). Depuis la version 2.0 d'Easyphp, vous pouvez ajouter 2 enregistrements en même temps ! Saisir les données dans la colo nne "Valeur". Ne rien saisir pour le champ "idboisson", car nous avons crée une clé primaire en auto_incrément (numérotation automatique)!!! Avant de cliquer sur le bouton "Exécuter", choisir dans la liste déroulante, l'action souhaitée : Retourner à la page précédente ou Insérer un nouvel enregistrement. page 20/21 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 7.4 Afficher les enregistrements Cliquer sur pour voir les enregistrements. Vous pourrez aussi modifier ou supprimer en cliquant sur page 21/22 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 8 Exporter - Importer des tables SQL L'export de table(s) ou de base de données entière , génère un fichier texte au format sql contenant les instructions SQL de structure (création de table) et/ou de données (insertion des enregistrements ). Vous pourrez ensuite importer ces tables dans une autre base de données sur un autre poste (local) ou vers un serveur distant (hébergeur de votre site web). • Sélectionner la base de données (pour exporter plusieurs tables !) ou sélectionner la table concernée dans le menu de gauche, • Cliquer le bouton Exporter pour accéder au "Schéma et données de la base" • Sélectionner la ou les table (s) à exporter, • Choisir (à gauche) le format d'exportation : SQL • Cocher "structure" et " données", • Cocher " transmettre" avant de cliquer sur Exécuter • Enregistrer le fichier sql Ce fichier sql pourra être utilisé plus tard lors de l'importation dans une autre base !! page 22/23 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L Pour importer des tables SQL : • Sélectionner la base de données puis, cliquer sur le bouton Importer • Puis, cliquer sur le bouton Parcourir… pour sélectionner le fichier SQL (requêtes à exécuter !) • Choisir le Jeu de caractères (ex : latin1), puis cliquer sur Exécuter. Un message de confirmation assure que la requête a été exécutée avec succès ! 9 Déplacer – Copier ou Renommer une table • Sélectionner la table, puis cliquer sur le bouton • Définir les propriétés de l'action souhaitée et cliquer le bouton Exécuter correspondant !! page 23/24 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 10 Définir le site dans Dreamweaver CS3 • Dans le menu Site, choisir Nouveau site… 1 ère étape de l'assistant : • Nommer le projet du site , • Saisir l'adresse HTTP – Il s'agit ici de l'adresse du serveur d’évaluation (localhost) suivi du nom de l'alias, soit : http://localhost/nom_de_votre_alias • Cliquer sur Suivant> 2 ème étape : • Choisir la technologie de serveur PHP / MySQL, puis Cliquer sur Suivant > page 24/25 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 3 ème étape : • Choisir Modifier et Tester localement (option 1), • puis cliquer sur le bouton pour définir le chemin du dossier racine de votre site 4 ème étape : • Définir l'URL pour naviguer jusqu'à la racine de votre site (idem que l'étape 1) http://localhost/nom_de_votre_alias • Cliquer sur Test de l'URL avant de Cliquer sur Suivant > A l'étape 5, on peut définir un serveur distant (paramètres communiqués par l'hébergeur). Dans le cas contraire, on utilise un logiciel externe "client FTP", tel que Filezilla ou ftp expert, Leech... afin de transférer les fichiers (upload) de votre site vers le serveur de votre hébergeur. • Nous choisirons : Non, (pas de serveur distant) • Cliquer sur Suivant> puis Terminer page 25/26 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 11 Établir une connexion à la base de données Pour établir une connexion à une base de données lors du développement d'une application PHP dans Dreamweaver, vous devez disposer d'une ou plusieurs bases de données MySQL et le serveur MySQL doit être démarré ! Dans un premier temps, il faut ouvrir un nouveau document au format PHP : • Cliquer le menu Fichier choisir Nouveau, puis cliquer sur Page vierge • Choisir le type de page : PHP, puis cliquer Créer • Dans le panneau Application cliquer sur le bouton + de l'onglet Bases de données • puis choisir Connexion MySQL • Définir les paramètres de connexion : 1.Nom mer la connexion (ex : cnxboissons), 2.Saisir le serveur MySQL : localhost 3.Saisir Utilisateur et mot de passe pour la base définis dans PhpMyAdmin, 4.Toujours cliquer sur le bouton Selectionner… pour choisir la base de données. Remarques : Après avoir cliqué OK, 1 nouveau dossier " Connections" apparaît dans l'arborescence du site (panneau Fichiers à droite). Ce dossier contient un fichier php (code php permettant d'établir la connexion à la base de données). Ces paramètres de connexion pourront être modifiés directement dans le fichier php avant transfert FTP, s’ils s’avèrent être différents de ceux de l’hébergeur (serveur distant). Cette connexion pourra désormais être utilisée dans toutes les pages du site ! page 26/27 ADO BE Dreamweaver CS 3 12 Pages web dynamiques : PHP /MyS Q L Créer une fiche dynamique (requête SELECT) 12.1 Conception de la page La conception et la mise en page sont réalisées dans Dreamweaver CS3 (voir le support de cours concerné), • Dans un nouve au document PHP, créer un tableau exemple : • Enregistrer la page dans le dossier de votre site (ex : ficheboissons.php). 12.2 Création du jeu d'enregistrements Un jeu d'enregistrements est une requête SQL qui va permettre à partir de la connexion, de sélectionner des champ(s) d’une ou plu sieurs table(s). Ces champs appelés aussi textes dynamiques pourront ensuite être affichés dans la page web par un simple cliquer-glisser vers le tableau. Dans le panneau Application sur l'onglet Liaisons, cliquer sur le + et choisir Jeu d’enregistrement (Requête) : La boite de dialogue ci-dessous apparaît : Dans l'exemple ci-contre, la requête permet d'afficher tous les champs (colonnes) de la table "tboissons" selon la connexion "cnxboissons". Cliquer sur le bouton OK pour valider. page 27/28 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L Afficher les textes dynamiques du jeu d'enregistrements dans la page : • Cliquer-glisser les champs dynamiques du jeu d'enregistrements (onglet liaisons – Panneau Application) vers la cellule du tableau correspondante . 12.3 Créer une barre de navigation Afin de pouvoir atteindre l'enregistrement Suivant ou Précédent, nous allons créer une barre de navigation. Préparer la barre de navigation : • Dans un nouveau tableau (1 ligne et 4 colonnes), saisir les légendes ( Début – Précédente – Suivante – Fin). On peut aussi insérer des boutons (images) à la place des légendes. Créer les liens : - Sélectionner dans la page la source du lien (ex : début) - Dans le panneau Application, choisir l'onglet Comportements de serveur page 28/29 ADO BE Dreamweaver CS 3 • Pages web dynamiques : PHP /MyS Q L Cliquer sur le + et choisir Pagination du jeu d’enregistrement puis le comportement qui convient : Ø Ø Ø Ø Déplacer vers la Déplacer vers la Déplacer vers la Déplacer vers la première page page précédente page suivante dernière page Pour n'a fficher ces liens que lorsqu'ils sont nécessaires, il est possible d ’ajouter un comportement de serveur. Exemple : pour le lien « début » : Sélectionner le texte, puis choisir : Ø Afficher la région è Afficher si ce n’est pas la première page 12.4 Créer un état de navigation Afin de numéroter les fiches (X sur Y) : • Placer le curseur dans votre page et choisir le comportement de serveur Afficher le nombre d'enregistrements puis - Afficher le numéro de l’enregistrement de début (index de départ : X) - Afficher le nombre total d’enregistrements (index total : Y) Résultats ! Etat de navigation Barre de navigation • Enregistrer et tester votre page web dynamique dans votre navigateur (F12). Vous devez obtenir ceci : page 29/30 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 13 Ajouter un enregistrement (Requête INSERT INTO) Ici, nous allons voir comment insérer un nouvel enregistrement dans une table à l’aide d’un formulaire HTML. Pour ce faire, 2 pages seront nécessaires. La première pour saisir les données (ex : ajouter1.php), et une seconde pour confirmer l’ajout (ex : ajouter2.php). 13.1 Créer le formulaire Dans la page "ajouter1.php" : • A l’aide du panneau Insertion - onglet Formulaires, Insérer un formulaire en cliquant sur le premier bouton de la barre d'outils • Insérer un tableau dans ce formulaire pour tabuler les données • Ajouter les champs de texte nécessaires (2 ème bouton de la barre d'outils) Barre d'outils Formulaires Formulaires Panneau Propriétés • Nommer chacun des champs de texte (noms identiques aux champs de la table !) à l'aide du panneau des Propriétés (bas de l'écran) • Ajouter un bouton de commande pour poster le formulaire. page 30/31 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L Pour déclencher l'action vers la base de données, nous allons créer un comportement de serveur : • Dans le panneau Application, cliquer l'onglet Comportements de serveur, choisir Insérer un enregistrement La fenêtre ci-dessous apparaît : • Sélectionner votre connexion, la table , et la page à atteindre après l'insertion des données (ajout2.php pour l'exemple). • Dans l’encadré Colonnes : Vérifier que chaque champ de la table trouve une correspondance avec le champ du formulaire. Si ce n'est pas le cas, il suffit de faire l’association en sélectionnant le champ dans l’encadré colonnes avec le champ du formulaire correspondant dans la liste valeur. • La clé primaire est bien entendu inutilisée, car elle s ’incrémente automatiquement dans la table ! • Valider par OK Remarque : Prévoir le mode NULL (lors de la création de la table) pour les champs qui ne seront pas obligatoires dans le formulaire ! page 31/32 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 13.2 Créer la page de confirmation Dans la page "ajouter2.php" : Dans cette page, un message de confirmation suffit, avec un lien de retour sur une la page souhaitée (ex : ficheboissons.php). Enregistrer vos 2 pages et tester l'ajout depuis la page de saisie des données (ajouter1.php). 14 Supprimer un enregistrement (requête DELETE) Afin de supprimer un enregistrement de la table via un formulaire, nous allons créer 3 pages : - une page pour choisir l'enregistrement à supprimer (ex : supprime1.php) - une page pour vérifier et confirmer (ex : supprime2.php) - une page pour la suppression et la confirmation (ex : supprime3.php) 14.1 Créer le formulaire pour choisir Dans la page "supprime1.php" : • Créer un formulaire, puis un tableau • Insérer un champ liste/menu • Dans le panneau des Propriétés (bas de l'écran) Nommer la liste "boissons", IMPORTANT : le nom donné au champ (variable de formulaire) nous servira en page 2 pour effectuer le filtre de l'enregistrement à afficher !! • Insérer un bouton valider (champ de formulaire) pour poster le formulaire page 32/33 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L • Créer un jeu d'enregistrements pour la liste dynamique (Sélectionner Tous les champs de la table : Tboissons), • Sélectionner le champ liste dans la page web et cliquer le bouton dynamique dans le panneau Propriétés : • Définir ici le contenu de la liste (étiquettes) et sa valeur (champ posté en page 2) Valeurs : idboisson Etiquettes : nomboisson champ clé primaire de la table permettant d'identifier l’enregistrement à supprimer champ utilisé pour le contenu de la liste Afin de pouvoir atteindre la page 2 au clic du bouton valider, définir l'action du formulaire : • Sélectionner le formulaire en cliquant sur la balise <form#form1> • Définir les propriétés du formulaire : Action : supprime 2.php (cliquer parcourir pour sélectionner page PHP) Méthode : POST page 33/34 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L Remarque : Les paramètres de formulaire sont envoyés au serveur au moyen d'un f ormulaire HTML qui utilise la méthode POST ou GET. Si la méthode utilisée est POST, les paramètres sont envoyés dans le corps du message. La méthode GET, en revanche, annexe les paramètres à l'URL demandée. Résultats ! 14.2 Créer la page de vérification Dans la page "supprime2.php" : Cette page affiche l'enregistrement choisi dans la page précédente dans le but d'être supprimé. • Création d'un formulaire, puis un tableau • Ajouter un bouton pour supprimer • Créer un jeu d'enregistrement (Rboissons) avec filtre (pour afficher uniquement l'enregistrement à supprime r) Le filtre est établi à partir du champ "idboisson" (champ défini comme valeur de la liste dynamique ) strictement égal à (=) la variable de formulaire "boissons" (nom du champ liste/menu de la page supprime1.php) • Glisser chacun des champs dynamiques du jeu d'enregistrement dans le tableau • Définir les propriétés du formulaire (pour atteindre la page 3 ) Action : supprime3.php - Méthode : POST • Dans la zone de formulaire (pointillés rouge), ajouter un champ masqué, de façon à pouvoir identifier la boisson à supprimer dans la table en utilisant la clé primaire : - Placer le curseur dans le formulaire, cliquer sur le bouton champ masqué page 34/35 ADO BE Dreamweaver CS 3 • Pages web dynamiques : PHP /MyS Q L Sélectionner le champ masqué et définir ses propriétés : - Nommer ce champ "idboisson" (comme le champ clé primaire de la table ) - Cliquer sur le petit bouton "eclair", dans le panneau des propriétés afin de définir la valeur dynamique au champ masqué - Sélectionner, comme ci-dessus, le champ clé primaire "idboisson" Vous devez obtenir ceci : page 35/36 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 14.3 Supprimer l’enregistrement sélectionné Dans la page "supprime3.php" : La 3 ème page permet de supprimer l'enregistrement choisi dans la page 1. • Dans la liste des comportements de serveur, choisir " Supprimer l’enregistrement" Ici, on utilise, bien entendu, le champ clé primaire "idboisson" pour effectuer la suppression dans la table "tboissons", selon la variable de formulaire "idboisson" (nom du champ masqué). • Saisir un message de confirmation et créer lien(s) de redirection. page 36/37 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 15 Modifier un enregistrement (requête UPDATE) Pour modifier un enregistrement, nous allons créer 3 pages : - une page pour choisir l'enregistrement à modifier (ex : modif1.php) - une page pour vérifier et modifier (ex : modif2.php) - une p age pour la confirmation (ex : modif3.php) 15.1 Créer le formulaire pour choisir Dans la page "modif1.php" (idem que page supprime1) : • Créer un formulaire, puis un tableau • Insérer un champ liste/menu et Nommer la liste "boissons", • Insérer un bouton de commande pour poster le formulaire • Créer un jeu d'enregistrements pour la liste dynamique, • Sélectionner la liste et cliquer le bouton Valeurs : idboissson Etiquettes : nomboisson • Il ne reste plus qu'à renseigner les propriétés du formulaire. Action : modif2.php - Méthode : POST dans le panneau Propriétés : 15.2 Créer la page de vérification/modification Dans la page "modif2.php" : Cette page affiche l'enregistrement à modifier, choisi dans la page précédente. • Création d'un formulaire et insérer un tableau • Ajouter des champs de texte (pour pouvoir saisir les modifications) • Nommer chacun d es champs du formulaire ( utiliser les mêmes noms que les champs de la table • Insérer un bouton pour envoyer le formulaire : nomboisson – web – commentaires) page 37/38 ADO BE Dreamweaver CS 3 • Pages web dynamiques : PHP /MyS Q L Créer un jeu d'enregistrement (Rboissons) avec filtre (pour afficher uniquement l'enregistrement à modifier) Le filtre est établi à partir du champ " idboisson" (champ défini comme valeur de la liste dynamique ) strictement égal à (=) la variable de formulaire "boissons" (nom du champ liste/menu de la page modif1.php) • Glisser les champs dynamiques du jeu dans les champs du formulaire (voir ci-dessus) • Insérer un champ masqué dans le formulaire : nommer idboisson avec valeur dynamique idboisson (cliquer le bouton « éclair »). page 38/39 ADO BE Dreamweaver CS 3 • Pages web dynamiques : PHP /MyS Q L Créer le comportement de serveur : Modifier l’enregistrement Après avoir vérifié la correspondance entre les éléments de formulaire et les champs de la table, il convient de préciser la page à atteindre après la mise à jour (ex : modif3.php). • Valider par OK Dans la page "modif3.php" : • Saisir un message de confirmation et créer lien(s) de redirection. page 39/40 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 16 Ajouter un champ dans une table A tout moment vous pourrez ajouter un ou plusieurs champs dans vos tables. Mais il ne faudra pas oublier d'actualiser chacune de vos pages web (jeu d'enregstrements) ! • Sélectionner la base et la table " tboissons" • Définir le nombre de champ(s) à ajouter et leur position, puis • Cliquer Exécuter • Créer le champ ci-dessous puis sauvegarder Nous utiliserons ce champ au chapitre suivant pour apprendre à rechercher des enregistrements ! • Afficher la table (données) • Modifier chacun des enregistrements pour saisir le type page 40/41 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L Vous devez obtenir ceci (on en profite pour ajouter des nouveaux enregistr ements !) : 17 Rechercher des enregistrements (Clause WHERE) Pour rechercher un ou plusieurs enregistrement(s), nous allons maintenant créer 2 pages, une pour définir le critère de recherche (ex : rech1.php), et une seconde pour afficher le résultat (ex : rech2.php). Dans un premier temps, nous allons faire une recherche simple, portant sur 1 seul critère (type) ! 17.1 Créer le formulaire de recherche Dans la page "recherche1.php" : • Dans un formulaire, insérer un tableau • Insérer un champ liste/menu nécessaire pour la recherche • Nommer ce champ liste : "types" (variable de formulaire !), • Insérer un bouton de commande (Go !) pour poster le formulaire. page 41/42 ADO BE Dreamweaver CS 3 • Pages web dynamiques : PHP /MyS Q L Créer un jeu d'enregistrements pour la liste dynamique (type), Cette requête sélectionne uniquement le champ "type" de la table "tboissons" et trie les enregistrements par ordre croissant de type. Le test de la requête vous donne ceci : Nous devons maintenant regrouper les type(s) identiques de façon à annuler les doublons ! • • Afficher la requête en mode Avancé… Saisir l'instruction SQL : GROUP BY type Important : l'instruction ORDER BY (trier) devra toujours être positionnée en fin de requête ! Vous devez maintenant obtenir ceci: page 42/43 ADO BE Dreamweaver CS 3 • Sélectionner la liste, cliquer le bouton Pages web dynamiques : PHP /MyS Q L dans le panneau Propriétés, Pour pouvoir obtenir tous les types (en plus des 3 définis par la requête), nous ajoutons ici une option statique : L’étiquette "Tous" sera affichée au chargement de la page dans la liste. La valeur "%" est la valeur qui sera interprétée et analysée dans la requête SQL comme Tous. • Cliquer sur le bouton + pour ajouter l'option statique ! • Enfin, Sélectionner la balise <form> et définir les propriétés du formulaire : Vous devez obtenir ceci : Aperçu dans le navigateur (Touche F12) : page 43/44 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 17.2 Créer la page de résultats Dans la page "recherche2.php" : La page de résultats doit afficher tous les enregistrements correspondants au critère défini dans la page 1. • Créer un tableau • Créer un jeu d'enregistrements avec le Filtre suivant : champ "type" contient la variable de formulaire "types" Le tri est facultatif. • Glisser les champs dynamiques du jeu dans le tableau de résultats • Placer le curseur (haut de page) et insérer le Comportements de serveur suivant : Afficher le nombre d'enregistrements è Afficher le nombre total • Choisir le Jeu et cliquer OK page 44/45 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L Vous devez obtenir ceci : Créer un comportement de serveur "Région Répétée" qui va permettre l'affichage de tous les enregistrements trouvés (boucle While). • Sélectionner les lignes du tableau à répéter (pour notre exemple : les 2 dernières lignes) • Dans la fenêtre des Comportements de serveur, cliquer bouton • Choisir Région répétée • Choisir le jeu d'enregistrements et cliquer "tous les enregistrements", puis Ok. • Créer un lien de retour vers la page 1. + page 45/46 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L Vous devez obtenir ceci : Exemple de résultats à partir du critère (page rech1) : Eau minérale page 46/47 ADO BE Dreamweaver CS 3 18 Pages web dynamiques : PHP /MyS Q L Les images dynamiques Pour afficher une image dynamique dans une page PHP, nous avons besoin de 2 choses : - 1 champ dans une table qui va stocker le nom du fichier image avec son extension (.gif ; .jpg…), - Les fichiers images dans un dossier du site !! J • Si nécessaire, dans le dossier racine du site, créer un nouveau dossier "photos" • Placer dans ce dossier les fichiers images pour chacune des 8 boissons, • Ajouter un nouveau champ dans la table "tboissons" - voir chapitre page 40 • Saisir le champ "photo" de type VARCHAR (30) et sauvegarder, • Modifier chaque enregistrement de la table de façon à saisir le nom du fichier de la photo. Vous devez obtenir ceci : • Reprendre la page de résultats de recherche "rech2.php" • Actualiser le Jeu d'enregistrement (pour y ajouter le champ "photo") • Sélectionner le Jeu, puis • Cliquer ici pour Actualiser le jeu (requête) Le nouveau champ doit apparaître dans le Jeu d'enregistrements ! page 47/48 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L • Ajouter une colonne au tableau, • Placer le curseur dans la cellule et cliquer sur bouton "image" : • Cliquer Source de données • Développer le jeu d'enregistrements (+) si besoin, et sélectionner le champ "photo" • Dans la zone URL, saisir devant le code php le nom du dossier des images, soit : photos/ • Cliquer Ok pour valider. L'image dynamique ! Remarque : La taille de l'image peut accessoirement être réduite dans le panneau des Propriétés de Dreamweaver - Attention ! Redimensionnez soit la hauteur (H), soit la largeur (L) de façon à conserver la proportionnalité de l'image. page 48/49 ADO BE Dreamweaver CS 3 • Pages web dynamiques : PHP /MyS Q L Enregistrer et Tester (F12) depuis la page reche1.php (choisir Tous les types). Vous devez obtenir quelque chose comme ceci : page 49/50 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 19 Créer un lien dynamique Dans la page rech2.php, nous allons créer un lien dynamique vers le site web de la marque: • Ouvrir la page "rech2.php" • Sélectionner dans le tableau le texte dynamique "web" : • Dans le panneau "propriétés", cliquer parcourir (dossier jaune !) de la zone de texte Lien, • Cliquer sur Source de données • Si besoin, cliquer sur + pour développer le jeu d'enregistrements , puis sélectionner le champ dynamique (web pour l'exemple) • OK pour valider. Dans la zone URL, si besoin, ajouter le protocole "http://" s'il n'a pas été saisi dans le champ de votre table, ("http://", "ftp://" ou "mailto:") Ajouter la cible _blank pour que le lien s'ouvre dans une nouvelle fenêtre de navigateur! page 50/51 ADO BE Dreamweaver CS 3 • Pages web dynamiques : PHP /MyS Q L Enregistrer et Tester votre page web dans votre navigateur (F12). Vous devez obtenir ceci : page 51/52 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 20 Recherche multicritères Nous allons maintenant ajouter un second critère de recherche dans la page de rech1.php. • Tout d'abord, Ouvrir votre base de données (phpmyadmin) • Ajouter un nouveau champ (stock) dans votre table "tboissons" : • Mettre à jour chaque enregistrement, de façon à obtenir ceci : • Retourner dans Dreamweaver CS3 et ouvrir les pages "rech1.php" et "rech2.php" page 52/53 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L Dans la page "rech1.php" : • Dans le formulaire ajouter un champ de texte, • Nommer ce champ "stockmaxi" (sans les guillemets !! J ) • Enregistrer votre page. Vous devez obtenir ceci : • NE PAS OUBLIER de nommer le champ (variable de formulaire) Dans la page "rech2.php" : Nous allons maintenant ajouter un deuxième filtre concernant ce nouveau critère d'enregistrement existant !! dans le jeu • Ouvrir le jeu d'enregistrement "Rboissons" par un double clic dans la fenêtre Liaisons du panneau "Application", • Cliquer sur bouton " Avancé" pour ajouter le 2 ème filtre : page 53/54 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L En mode Avancé, saisir dans la zone "SQL" le 2 ème filtre (clause "WHERE") : Cliquer sur le + pour déclarer la 2ème variable colname2 utilisée dans la clause WHERE. • Ajouter le nouveau texte dynamique "stock" dans le tableau, • Enregistrer et Tester dans le navigateur. Vous devez obtenir ceci : Exemple : Recherche de tous les types avec un stock maxi de 65 page 54/55 AND stock <= colname2 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 21 Requête de Jointure (INNER JOIN) • Pour notre exemple , nous allons créer une nouvelle table "tboissons_types" et modifier la structure de la table (mère) "tboissons" ! Schéma de la jointure : • Désormais, ce champ (type) n'a plus lieu d'exister ! • Nouveau champ à ajouter (pour la jointure) Tboissons idboisson (clé) nom web commentaires (type) photo stock idtype Tboissons_types idtype (clé) type • Saisir les différents types de boissons existants : • Dans la table "tboissons" supprimer l'ancien champ "type" Pour pouvoir établir la jointure entre les 2 tables (tboissons et tboissons_types), nous allons modifier la structure de la table "tboissons en y ajoutant le champ (idtype), ce qui permettra d'affecter un type à chaque boisson (en utilisant la valeur idtype de tboissons) ! • Sélectionner la table "tboissons", et ajouter 1 champ en fin de table page 55/56 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L Pour pouvoir créer la jointure entre les 2 tables le type de champ doit être identique, soit ici "smallint" ! • Modifier chacun des enregistrements de "tboissons". Vous devez obtenir ceci : Pour saisir la valeur du type de la boisson, vous pouvez aussi exécuter des requêtes de mise à jour (UPDATE) – voir annexe "Commandes SQL". Supprimer l'ancien champ "type" de la table "tboissons" ! Reprendre les pages rech1.php et rech2.php : • Ouvrir la page "rech 2.php" • Ouvrir le jeu d'enregistrement existant et compléter le code SQL : Dans l'instruction SELECT : Sélectionner tous les champs (*) des 2 tables Dans l'instruction FROM : Créer une jointure… (INNER JOIN) en utilisant les champs… (ON) Dans la clause WHERE (filtre) : Préciser la table. page 56/57 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 22 Paramètre d'URL Jusqu'à présent nous avons appris à transmettre des valeurs d'une page web à l'autre par le biais de formulaire (variables) en utilisant la méthode POST. D'où le traitement des variables en PHP avec $_POST ! Dans ce nouveau chapitre , nous allons apprendre à transmettre une ou plusieurs valeurs d'une page web à l'autre par le biais d'un lien (balise HTML <a>) enrichi d'un paramètre URL. Pour notre exemple, à p artir d'une page de résultats (rech2.php), nous allons créer un lien ( avec paramètre d'URL) pour afficher la "fiche détaillée" de l'enregistrement. Deux pages seront donc nécessaires pour notre exemple : • Créez une nouvelle page php et enregistrez la sous : fichedetail.php • Ouvrir la page rech2.php créée précédemment Créer le lien avec paramètre URL : Syntaxe du lien : nom_fichier.PHP?nom_parametreURL=valeur_parametreURL C'est la page php à atteindre (fiche détaillée) Nom quelconque, mais il est préférable de reprendre le même nom que le champ "clé primaire" de la table (ex : idboisson). Valeur dynamique provenant du jeu d'enregistrement crée dans la page rech2. (champ idboisson) • Dans la page rech2.php, ajouter une colonne au tableau • Insérer une image clipart "loupe" par exemple ou saisir le texte Voir • Modifier le tableau de résultats de façon à obtenir ceci : • Sélectionnez la source du lien (image "loupe ou texte Voir) • Dans le panneau des Propriétés, zone de Lien, cliquez le bouton " Rechercher le fichier" page 57/58 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L • Sélectionnez le fichier PHP à atteindre : (fichedetail.php), puis cliquer le bouton Paramètres… • Saisir le nom du paramètre (nom du champ clé primaire de la table : idboisson) • Cliquer sur page 58/59 (de droite, colonne valeur) pour attribuer la valeur dynamique au paramètre, ADO BE Dreamweaver CS 3 • Pages web dynamiques : PHP /MyS Q L Sélectionnez dans le jeu d'enregistrement le champ idboisson et cliquez OK Vous devez obtenir ceci : • Cliquer sur OK pour valider, vous devez obtenir ceci : • Enregistrer la page. page 59/60 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L Voici le code du lien que vous devez obtenir dans votre page : Remarque : Il est possible de transmettre plusieurs paramètres dans un même lien. Les paramètres seront alors attachés avec le caractère de concaténation ! : & Syntaxe double paramètres : nom_fichier.PHP ?nom_parametreURL-1 =valeur_parametreURL-1 & nom_parametreURL-2=valeur_parametreURL-2 Créer la page "fichedetail.php" : • Dans la page " fichedetail.php", créer un nouveau jeu d'enregistrements - Cette requête devra avoir une jointure (car 2 tables !) et un filtre (paramètre URL : idboisson) page 60/61 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L • Créer la fiche détaillée avec tous les champs du jeu, vous devez obtenir ceci : • Enregistrer (CTRL S) et tester (F12) dans le navigateur depuis la page rech1 ! Vous devez obtenir ceci : page 61/62 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 23 Accès restreint Pour limiter l'accès à certaines pages d 'un site, 2 étapes sont à considérer : Ø La première étape est la connexion de l'utilisateur (identification par "login" et "mot de passe") et la vérification de ses droits. Ø La deuxième étape restreint l'accès à la page en fonction de la connexion établie. Pour notre exemple, nous allons créer un accès réservé à l'administrateur avec un niveau "chef" ! Mais cette technique peut être utilisée pour des accès membres dans la partie "publique" du site ! 23.1 Création de la table des identifiants • • Créer la structure de la table tadmin avec 4 champs: - l'email (clé primaire), - le nom ou pseudo (login), - le mot de passe (password), - le droit de l'utilisateur (niveau). Créer 2 enregistrements avec niveau différent 23.2 Création des pages Créer les 4 pages php suivantes : connexion.php accueil.php Page permettant l'identification (avec contrôle du niveau !) pour atteindre la page accueil.php Page à afficher après correcte identification et restriction en tant que "chef" ! page 62/63 erreur.php Page si erreur de frappe du mot de passe accesrefuse.php Page si autre que "chef" essaye de se connecter ou si pas de connexion ! ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L Page connexion.php : • Créez un formulaire avec un tableau de 4 lignes et 2 colonnes… • Insére z les 2 champs de texte (input) et nommez les respectivement : "login" et " password" (sans les guillemets !! J ) Pour le mot de passe, cocher l'option mot de passe dans le panneau des propriétés, afin de masquer la saisie. • Ajoutez un bouton de formulaire . Vous devez obtenir ceci : • Dans la fenêtre Application, onglet Comportements de serveur, choisir " Authentification de l'utilisateur" puis "Connecter l'utilisateur" : page 63/64 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L Page accueil.php Dans cette page, nous devons "Restreindre l'accès" avec le niveau : "chef" ! • Dans la fenêtre Application, l'onglet Comportements de serveur, choisir Authentification de l'utilisateur puis Accès restreint à la page • Choisir l'option de restriction : - utilisateur, mot de passe et niveau d'accès • Cliquer sur le bouton Définir…, pour préciser le niveau : chef • Saisir le nom du niveau crée dans la table (soit : chef, pour notre exemple !) et cliquer sur + pour ajouter le niveau (plusieurs niveaux peuvent être crées !), cliquez OK • Cliquez Parcourir… pour sélectionner la page à afficher en cas de refus Remarque : Toutes les pages qui seront appelées depuis l'accueil devront également avoir un "accès restreint" ! page 64/65 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L Créer le lien de déconnexion : • Dans la page accueil.php, sélectionner texte "se déconnecter" ou une image, puis • Choisir le comportement de serveur Authentification de l'utilisateur puis Déconnecter l'utilisateur Dans la page erreur.php : • Saisir un message et créer un lien de redirection vers la page connexion.php. Dans la page accesrefuse.php : • Saisir un message et créer un lien de redirection. page 65/66 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L ANNEXES 23.3 Les opérateurs : la "grammaire" de PHP Source : phpfrance.com Bien que la liste des différents opérateurs soit disponible dans n'importe quel livre ou documentation aux chapitres correspondant, il semblait judicieux de les regrouper également pour avoir une vue d'ensemble de ceux-ci afin de savoir dans quel contexte ils s'utilisent. Voici donc un petit résumé des opérateurs les plus utilisés en php et de leur usage. Attention : il s'agit là d'un usage générique, certains opérateurs peuvent avoir d'autres significations selon le contexte, comme par exemple dans les expressions régulières. - les slashes ( // ), dièse (#) et slash-etoile ( /* ... */ ) : Ils servent à mettre en commentaire une partie du code. Le double slash et le dièse sont des commentaires de ligne : ils mettent en commentaire tout ce qui les suit sur la ligne. Le slash-étoile est un commentaire de bloc : il met en commentaire tout ce qui le suit jusqu'à ce qu'il trouve le étoile-slash fermant : PHP: $var = 'xx'; // ceci est un commentaire de ligne, on peut aussi utiliser le # /* ceci est un commentaire de bloc */ Nota : Vous trouverez parfois des commentaires de bloc commençant par /** au lieu de /*. Cette syntaxe provient de Java qui permet de générer une documentation technique à partir des informations contenues dans les commentaires qui débutent ainsi et qui respectent une syntaxe particulière. - le point-virgule ( ; ) : Il sert à spécifier la fin d'une instruction. On en retrouve donc généralement au bout de chaque ligne, à l'exception des blocs d'instructions (if, par exemple) qui eux sont délimités par des accolades PHP: $somme = 1 + 1; // fin de l'instruction un point-virgule if ($somme == 2) { // pas de ; pour les if, for, while, etc. mais une paire d'accolades echo "Ca fait 2"; } echo "abc"; echo "def"; // on peut avoir deux instructions sur une même ligne - Les opérateurs arithmétiques ( + - * / % ) : Ils servent aux calculs (addition, soustraction, multiplication, division et modulo (le reste entier de la division) ) PHP: $total = 5 + (3 * $valeur) / 2; page 66/67 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L - Les opérateurs d'affectation ( = += -= .... ) : L'opérateur d'assignation le plus simple est le signe égal "=". Il permet d'affecter la valeur de droite dans la variable de gauche. PHP: $a = 3; // affecte la valeur 3 à la variable $a Il existe des "opérateurs combinés" pour tous les opérateurs arithmétiques. Ils permettent d'utiliser la valeur d'une variable dans une expression et d'affecter le résultat de cette expression à cette variable : PHP: $a = 3; // affecte la valeur 3 à la variable $a $a += 5; // équivaut à "$a = $a + 5" ce qui affecte la valeur 5+3 = 8 à la variable $a - Les opérateurs d'incrémentation et décrémentation (++ et --) : Ces opérateurs incrémente ou décrémente la valeur d'une variable. Comprendre qu'il incrémente (ou décrémente) la variable avant ou après l'avoir utilisé. PHP: ++$a; $a++; --$a; $a--; // // // // incrémente $a de 1, puis retourne $a retourne $a, puis l'incrémente de 1 décrémente $a de 1, puis retourne $a retourne $a, puis décrémente $a de 1 - Les opérateurs de comparaison ( == != === ... ) Les opérateurs de comparaison, comme leur nom l'indique, vous permettent de comparer deux valeurs, voire deux type : PHP: $a $a $a $a $a == $b // Cette comparaison retourne TRUE si $a est égal à $b === $b // Retourne TRUE si $a est égal $b ET si elles ont le même type (String, int ..) != $b // Retourne TRUE si $a est différent de $b <> $b // Retourne TRUE si $a est différent de $b !== $b // Retourne TRUE si $a est différent de $b OU si elles n'ont pas le même type Il est également possible de comparer des valeurs numérique avec les opérateurs "supérieur ou égal", "supérieur", "inférieur ou égal" et "inférieur" , respectivement : ">=", ">", "<=" et "<". - le point ( . ) : Il sert à la concaténation de chaines : PHP: $chaine = "chaine1" . "chaine2"; echo $chaine; // affiche : chaine1chaine2 $chaine .= "chaine3"; // équivaut à $chaine = $chaine . "chaine3" echo $chaine; // affiche : chaine1chaine2chaine3 page 67/68 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L - la virgule ( , ) : Elle sert à séparer les arguments passés en paramètre d'une fonction lors de l'appel et de la déclaration. Elle permet également de séparer les valeurs d'un tableau. PHP: function additionne($param1, $param2) { // dans la déclaration $total = $param1 + $param2; return $total; } $resultat = additionne(123, 321); // lors de l'appel echo $resultat; // affiche : 444 - Les opérateurs logiques ( && et || ) : Ils servent à ajouter des conditions obligatoires ( ET ) ou facultatives ( OU ). Il est également possible d'utiliser les instructions "AND" et "OR", mais attention, la priorité de celles-ci est différente (notamment par rapport à l'opérateur d'affectation) et vous pourriez avoir des résultats inattendus dans vos tests. Si vous avez un doute, privilégiez l'usage des premiers PHP: // cette condition est vraie si $val1 ET $val2 sont //toutes les deux vraies OU BIEN si $val3 est vraie if ( ($val1 && $val2) || $val3) { ... } Il existe également un opérateur "XOR" (le shériff de l'espace.. hum..) qui correspond à un OU exclusif. La condition sera remplie si l'un ou l'autre des tests est vérifié, mais pas si les deux le sont en même temps. - le point d'exclamation ( ! ) : Il correspond à une négation. Utilisé dans un if, il indique le contraire de la condition spécifiée : PHP: $condition= true; if ($condition) { echo 'La variable $condition est à vrai'; } if (!$condition) { // condition inverse, elle équivaut ici à un else. echo 'La variable $condition n\'est pas à vrai'; } Cela peut par exemple s'avérer utile lorsque seul le "else" d'une condition vous intéresse, vous n'avez ainsi pas à implémenter le "if()" associé, mais directement le "if()" équivalent à votre "else". - Guillemets et apostrophes ( ' " ) : Elles servent à délimiter une chaine de caractères. A l'intérieur de guillemets les variables sont interprétées, mais ce n'est pas le cas avec les apostrophes. D'une manière générale, il vaut mieux sortir les variables des chaines et utiliser le point pour les concaténer. PHP: $chaine1 = "chaine 1"; $chaine2 = 'chaine 2'; echo "Ma chaine est : $chaine1"; // affiche : Ma chaine est : chaine 1 echo 'Ma chaine est : $chaine1'; // affiche : Ma chaine est : $chaine1 (la variable n'est pas interprétée) echo 'Ma chaine est : ' . $chaine1; // affiche : Ma chaine est : chaine 1 page 68/69 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L - l'antislash ( \ ) : Il permet d'échapper un caractère pour souligner un comportement particulier. Pour une apostrophe (ou un guillemet) il signifie que celle -ci ne termine pas la chaine mais doit être interprétée comme le caractère qu'il représente. Dans une chaine délimitée par des guillemets, il n'est pas nécessaire d'échapper les apostrophes, mais les guillemets doivent l'être. De même, il ne faut pas échapper les guillemets d'une chaine délimitée par des apostrophes, mais les apostrophes doivent l'être. Certains caractères échappés ont également d'autres fonctions et peuvent correspondre à certain caractère spécifique. Ainsi : PHP: "\n" : retour à la ligne "\t" : tabulation - le point d'interrogation ( ? ) et les deux points ( : ) : Il s'agit de "l'opéra teur ternaire". C'est une syntaxe simplifiée de l'instruction if/else : PHP: echo (($maCondition) ? 'Le test est vrai' : 'Le test est faux'); // cette syntaxe revient au même que d'écrire : if ($maCondition) echo 'Le test est vrai'; else echo 'Le test est faux'; // on peut ainsi facilment l'utiliser pour cocher/décocher par défaut une checkbox : echo '<input type="checkbox" name="case" '.(($maCondition) ? 'checked' : '').' />'; - La flèche simple ( -> ) : Elles est utilisée lorsque l'o n travail avec des "objets", elle permet de faire appel à une méthode ou un attribut d'un objet instancié (pas la peine de te focaliser là dessus si tu débutes ) PHP: $monObjet = new Objet(); $monObjet->maMethode(); $monObjet->monAttribut; - l'arobase ( @ ) : Il s'agit de l'opérateur de silence. Il permet d'empêcher une fonction de retourner un éventuel message d'alerte ou d'erreur : PHP: // si le fichier n'existe pas, la fonction unlink() renverrait un message d'alerte @unlink('dossier/fichier.dat'); /* grâce à l'arobase, elle ne le fera pas, et ne polluera pas l'écran en informant l'utilisateur que le fichier qu'il veut supprimer n'existe pas et ne peut être supprimé.. ce dont il doit royalement se moquer :) */ Attention : Si le fichier existe mais qu'il y a une erreur de la suppression (problème de droits ou autre) vous ne le saurez pas non plus... a manipuler avec précaution, voire à éviter en effectuant les tests adéquats pour éviter les erreurs. page 69/70 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L 23.1 Les types de données des champs dans MySQL MySQL supporte un grand nombre de types de colonnes, qui peuvent être rassemblés en trois groupes : les nombres, les dates et les chaînes de caractères. Cette section présente les types disponibles et leurs tailles de stockage, puis présente en détail chaque type. L'introduction est volontairement brève. Une section plus précise est dédiée à chaque type, qui présente tous les formats valides. Les types de colonnes de MySQL sont listés ci-dessous. Les codes suivants sont utilisés dans les descriptions : M Indique la taille maximale d'affichage. Le maximum légal est 255. D S'applique aux nombres à virgule flottante, et indique le nombre de décimales qui suivent la virgule. Le nombre maximum est de 30, mais ne doit pas être plus grand que M -2. Les crochets ( '[' et ']' ) indiquent les spécifications optionnelles. Notez que si vous spécifiez ZEROFILL pour une colonne, MySQL ajoutera automatiquement l'attribut UNSIGNED à la colonne. Attention : vous devez garder à l'esprit que lors de la soustraction de deux entiers dont l'un est de type UNSIGNED , le résultat ne sera pas signé ! Les types de données numériques • TINYINT[(M)] [UNSIGNED] [ZEROFILL] Un très petit entier. S'il est signé, sa valeur varie entre -128 et 127 , sinon elle varie de 0 à 255 . • BIT BOOL Ce sont des synonymes de TINYINT(1) . • SMALLINT[(M)] [UNSIGNED] [ZEROFILL] Un petit entier. S'il est signé, sa valeur varie entre -32768 et 32767 , sinon elle varie de 0 à 65535 . • MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] Un entier de taille moyenne. S'il est signé, sa valeur varie entre -8388608 et 8388607 , sinon elle varie entre 0 et 16777215 . • INT[(M)] [UNSIGNED] [ZEROFILL] Un entier. S'il est signé, sa valeur varie entre -2147483648 et 2147483647 , sinon elle varie entre 0 et 4294967295 . • INTEGER[(M)] [UNSIGNED] [ZEROFILL] C'est un synonyme de INT . • BIGINT[(M)] [UNSIGNED] [ZEROFILL] Un grand entier. S'il est signé, sa valeur varie entre -9223372036854775808 et 9223372036854775807 , sinon elle varie entre 0 et 18446744073709551615 .Quelques choses à savoir pour bien utiliser les colonnes de type BIGINT : Toute l'arithmétique est effectuée en utilisant des BIGINT signés ou des valeurs de type DOUBLE , vous ne devez donc pas utiliser de grands entiers non signés plus grand que 9223372036854775807 (63 bits) excepté avec les fonctions sur les bits ! Si vous le faites, certains des derniers chiffres du résultat risquent d'être faux à cause des erreurs d'arrondissage lors de la conversion de BIGINT à DOUBLE .MySQL 4.0 peut gérer les BIGINT dans les cas suivants : Utilisation d'entiers pour stocker une grande valeur non signée dans une colonne BIGINT . Avec MIN(colonne_big_int) and MAX(colonne_big_int) . Lors de l'utilisation des opérateurs ( + , - , * , etc.) lorsque les deux opérandes sont des entiers. Vous pouvez toujours stocker la valeur exacte d'un entier dans une colonne de type BIGINT en l'enregistrant en tant que chaîne. Dans ce cas, MySQL effectuera une conversion chaîne à nombre qui ne fait entrer en jeu aucune représentation intermédiaire en réel. '-' , '+' , et '*' utiliseront l'arithmétique BIGINT quand les deux arguments sont des valeurs entières ! Cela signifie que si vous multipliez deux grands entiers (ou des résultats de fonctions qui retournent des entiers) vous obtiendrez peut être des résultats inattendus quand le résultat est supérieur à 9223372036854775807 . page 70/71 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L • FLOAT(précision) [UNSIGNED] [ZEROFILL] Un nombre à virgule flottante. précision <=24 pour un nombre à virgule flottante de précision simple, entre 25 et 53 pour une précision double. Ces types correspondent aux types FLOAT et DOUBLE décrits ci-dessus. FLOAT(X) a le même intervalle de validité que FLOAT et DOUBLE , mais la taille d'affichage et le nombre de décimales sont indéfinis. Dans la version 3.23 de MySQL, c'est un véritable nombre à virgule flottante. Dans les anciennes versions de MySQL, FLOAT(précision) avait toujours deux décimales. Notez que l'utilisation du type FLOAT peut vous créer des problèmes inattendus car tous les calculs internes de MySQL sont fait en double précision. Résoudre les problèmes des lignes non retournées . Cette syntaxe est fournie pour assurer la compatibilité avec ODBC. • FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] Un petit nombre à virgule flottante (précision simple). L'intervalle de validité va de -3.402823466E+38 à -1.175494351E-38 , 0 et de 1.175494351E-38 à 3.402823466E+38 . Si UNSIGNED est spécifié, les valeurs négatives sont interdites. M représente la taille d'affichage et D est le nombre de décimales. FLOAT sans arguments, ou avec un argument <= 24 représente un nombre à virgule flottante de précision simple. • DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] Un nombre à virgule flottante (précision double). L'intervalle de validité va de 1.7976931348623157E+308 à -2.2250738585072014E-308 , 0 et de 2.2250738585072014E-308 à 1.7976931348623157E+308 . Si UNSIGNED est spécifié, les valeurs négatives sont interdites. M représente la taille d'affichage et D est le nombre de décimales. FLOAT sans arguments, ou avec un argument compris entre 25 et 53 (inclus) représente un nombre à virgule flottante de précision double. • DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL] REAL[(M,D)] [UNSIGNED] [ZEROFILL] C'est un synonyme de DOUBLE . • DECIMAL[(M[,D ])] [UNSIGNED] [ZEROFILL] Un nombre à virgule flottante. Il doit être signé. Ce type se comporte comme une colonne de type CHAR : la valeur est stockée comme une chaîne, chaque caractère représentant un chiffre de la valeur. La virgule et le signe ' -' des nombres négatifs ne sont pas comptés dans l'option M (mais de l'espace de stockage est réservé pour eux). Si D vaut 0, les valeurs n'auront pas de valeur décimale. L'intervalle de validité des valeurs DECIMAL est le même que DOUBLE , mais il peut être limité par les valeurs choisies pour M et D . Si UNSIGNED est spécifié, les valeurs négatives sont interdites. Si D est omis, la valeur par défaut est 0. Si M est omis, la valeur par défaut est 10. Avant la version 3.23 de MySQL, l'argument M doit inclure l'espace requis pour le signe et le point des décimales. • DEC [(M[,D])] [UNSIGNED] [ZEROFILL] NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL] Ce sont des synonymes de DECIMAL . Les types de données dates • DATE Une date. L'intervalle de validité va de '1000-01-01' à '9999-12-31' . MySQL affiche les valeurs DATE au format 'AAAA-MM-JJ' (année-mois-jour), mais vous pouvez assigner des valeurs aux colonnes DATE en utilisant différents formats numériques ou de chaînes de caractères. • DATETIME Une combinaison de date et d'heure. L'intervalle de validité va de '1000-01-01 00:00:00' à '9999-1231 23:59:59' . MySQL affiche les valeurs DATETIME au format 'AAAA-MM-JJ HH:MM:SS' (année-moisjour heure:minutes:secondes), mais vous pouvez assigner des valeurs aux colonnes DATETIME en utilisant différents formats numériques ou de chaînes de caractères. • TIMESTAMP[(M)] Un timestamp. L'intervalle de validité va de '1970-01-01 00:00:00' à quelque part durant l'année 2037. MySQL affiche les valeurs de type TIMESTAMP au format AAAAMMJJHHMMSS , AAMMJJHHMMSS , AAAAMMJJ , ou AAMMJJ , suivant que le paramètre M vaut 14 (ou omis), 12 , 8 , ou 6 , mais vous pouvez assigner des valeurs aux colonnes TIMESTAMP sous forme de nombre ou de chaînes. Une colonne de type TIMESTAMP est pratique pour enregistrer une date, lors d'une commande INSERT ou UPDATE , car elle est automatiquement mise à la date et l'heure du moment de la commande, si vous ne fournissez pas de valeur vous-même. Vous pouvez aussi lui donner la date et l'heure courante en lui assignant la valeur NULL . Types dates et heures . Un TIMESTAMP est toujours stocké sur 4 octets. L'argument M n'affecte que le mode d'affichage de ce type de colonne. Notez bien que les colonnes de type TIMESTAMP(X) où X vaut 8 ou 14 sont considérées comme des nombres tandis que les autres colonnes TIMESTAMP(X) sont considérées comme des chaînes. Ceci est fait pour s'assurer que l'on peut exporter et importer les tables avec ces types. • TIME Une heure. L'intervalle de validité va de '-838:59:59' à '838:59:59' . MySQL affiche les colonnes de page 71/72 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L type TIME au format 'HH:MM:SS' , mais vous pouvez assigner une valeur de type TIME en lui passant des chaînes ou des entiers • YEAR[(2|4)] Une année au format 2 ou 4 chiffres (par défaut, c'est 4 chiffres). L'intervalle de validité va de 1901 à 2155 , 0000 pour le format à 4 chiffres, et de 1970 à 2069 pour le format à deux chiffres. MySQL affiche les valeurs de type YEAR au format AAAA , mais vous pouvez leur assigner des chaînes ou des nombres. (le type YEAR est nouveau depuis la version 3.22 de MySQL) The YEAR type . Les types de données textes • [NATIONAL] CHAR(M) [BINARY] Une chaîne de caractères de taille fixe, qui est toujours complétée à droite, par des espaces, lors du stockage. Le paramètre M peut valoir de 0 à 255 caractères. (1 à 255 dans les versions antérieures à la 3.23) Les espaces terminaux sont supprimés lorsque la chaîne est lue dans la base. Les valeurs de type CHAR sont triées et comparées sans tenir compte de la casse et en utilisant le jeu de caractères par défaut. Toutefois, vous pouvez utiliser l'opérateur BINARY pour effectuer des recherches sensibles à la casse. NATIONAL CHAR (forme courte : NCHAR ) est la dénomination ANSI SQL pour les colonnes de type CHAR qui doivent utiliser le jeu de caractères par défaut. C'est la configuration par défaut de MySQL. MySQL autorise la création de colonne de type CHAR(0) . Cela ne sert réellement que si vous devez être compatible avec une vieille application, dont le bon fonctionnement repose sur l'existence de la colonne, mais qui n'utilise pas vraiment ses valeurs. C'est aussi pratique lorsque vous devez stocker un booléen (ou une valeur à deux états) dans une colonne : une colonne de type CHAR(0) , qui n'a pas l'attribut NOT NULL, n'occupera qu'un seul octet, et peut prendre deux valeurs : NULL et "" . • CHAR est une forme courte de CHARACTER . CHAR C'est un synonyme de CHAR(1). • [NATIONAL] VARCHAR(M) [BINARY] Une chaîne de c aractères de longueur variable. NOTE : les espaces terminaux sont supprimés lors du stockage des valeurs (ce qui diffère des spécifications ANSI SQL). L'intervalle de taille de M va de 1 à 255 caractères. Les valeurs de type VARCHAR sont triées et comparées sans tenir compte de la casse et en utilisant le jeu de caractères par défaut. Toutefois, vous pouvez utiliser l'opérateur BINARY pour effectuer des recherches sensibles à la casse. • VARCHAR est une forme courte de CHARACTER VARYING. • TINYBLOB TINYTEXT Une colonne BLOB ou TEXT avec une longueur maximale de 255 (2^8 - 1) caractères. Silent column changes . Les types BLOB et TEXT . • BLOB TEXT Une colonne BLOB ou TEXT avec une longueur maximale de 65535 (2^16 - 1) caractères. Silent column changes . Les types BLOB et TEXT . • MEDIUMBLOB MEDIUMTEXT Une colonne BLOB ou TEXT avec une longueur maximale de 16777215 (2^24 - 1) caractères. Silent column changes . Les types BLOB et TEXT . • LONGBLOB LONGTEXT Une colonne BLOB ou TEXT avec une longueur maximale de 4294967295 (2^32 - 1) caractères. Silent column changes . Notez que puisque le protocole serveur/client et les tables de type MyISAM ont une limitation de 16M par paquet communiqué / ligne, vous ne pourrez utiliser la totalité de la longueur de ce type. Les types BLOB et TEXT . • ENUM('valeur1','valeur2',...) Une énumération. Une chaîne de caractères qui ne peut prendre qu'une valeur, issue d'une liste de valeurs 'valeur1' , 'valeur2' , ... , NULL ou la valeur spéciale d'erreur "" . Un ENUM peut avoir un maximum de 65535 valeurs distinctes. Le type ENUM . • SET('valeur1','valeur2',...) Un ensemble. Une chaîne de caractères qui a zéro ou plusieurs valeurs issues d'une liste : 'valeur1' , 'valeur2' , ... Un SET peut avoir au maximum 60 éléments. Le type SET . page 72/73 ADO BE Dreamweaver CS 3 23.2 Initiation au langage SQL Pages web dynamiques : PHP /MyS Q L (Structure Query Language) Cette annexe explique brièvement comment rédiger des requêtes SQL simples pour créer des jeux d'enregistrements. L'instruction SQL la plus courante est l'instruction SELECT, qui extrait des champs spécifiques d'une ou plusieurs table s de base de données pour g énérer un jeu d'enregistrements (requête). La syntaxe de base de l'instruction SELECT est la suivante : SELECT NomChamp FROM NomTable Vous pouvez également ajouter des sauts de ligne, des tabulations et autres espaces blancs à vos instructions pour les rendre plus claires : SQL ignore tous les espaces blancs. Par exemple, l'instruction suivante est correcte : SELECT nomboisson FROM tboissons Sélection d'une table complète : Si vous voulez insérer tout le contenu d'une table dans votre jeu d'enregistrements, utilisez l'astérisque (*) comme caractère générique pour inclure l'ensemble des champs. Prenons l'exemple d'une table nommé e tboissons. Pour en extraire tous les champs, tapez l'instruction SELECT suivante : SELECT * FROM tboissons Limite du nombre de champs (colonne) : Supposons maintenant que vous ayez seulement besoin des données contenues dans deux colonnes du tableau Clients : les colonnes AnneeNaissance et DateDernierAchat. Pour créer un jeu d'enregistrements contenant uniquement les données de ces deux colonnes, tapez l'instruction SELECT suivante : SELECT AnneeNaissance, DatedeNaissance FROM Clients Limite du nombre d'enregistrements (ligne) : Utilisez la clause WHERE pour filtrer le nombre d'enregistrements dans un jeu d'enregistrements. Par exemple, vous souhaitez afficher les boissons dont le stock est supérieur ou égal à 50. Votre instruction SELECT devra se présenter ainsi : SELECT nomboisson, stock FROM tboissons WHERE stock >= 50 Si l'élément comparé est du texte, mettez-le entre simple quotte (apostrophes) comme dans l'exemple suivant : WHERE type = 'soda' page 73/74 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L Liste des opérateurs : = Egal à (distingue les majuscules/minuscules) LIKE Egal à (ne distingue pas les majuscules/minuscules) <> Différent de (distingue les majuscules/minuscules) NOT LIKE Différent de (ne distingue pas les majuscules/minuscules) < Inférieur à > Supérieur à <= Inférieur ou égal à >= Supérieur ou égal à Vous pouvez utiliser les caractères génériques dans les expressions conditionnelles. Le caractère générique standard est le pourcentage (%) : Afficher toutes les boissons dont le type commence par eau : WHERE type LIKE 'eau%' Spécification de plusieurs conditions dans la clause WHERE : Vous pouvez spécifier plusieurs conditions dans la clause WHERE afin de limiter le nombre d'enregistrements dans votre jeu d'enregistrements. Les conditions sont combinées à l'aide des opérateurs logiques AND, OR et NOT. S'il faut que toutes les conditions soient vraies pour inclure un enregistrement dans le jeu d'enregistrements, utilisez l'opérateur AND : WHERE Pays = 'Allemagne' AND Voiture = 'Ford' S'il faut qu'une des conditions (au choix) soit vraie pour inclure un enregistrement dans le jeu d'enregistrements, utilisez l'opérateur OR : WHERE Pays = 'Allemagne' OR Pays = 'Hongrie' S'il faut qu'une des conditions soit vraie et qu'une autre soit fausse pour inclure un enregistrement dans le jeu d'enregistrements, utilisez l'opérateur NOT : WHERE Pays = 'Allemagne' NOT Voiture = 'BMW' Vous pouvez employer des parenthèses pour regrouper plusieurs clauses : WHERE (Pays = 'Allemagne' AND DateDeNaissance < #1/1/70#) OR Pays = 'Hongrie' Spécification d'une plage de valeurs dans la clause WHERE : Vous pouvez spécifier une plage de valeurs dans la clause WHERE afin de limiter le nombre d'enregistrements dans votre jeu d'enregistrements. La plage est définie à l'aide des mots-clés BETWEEN...AND. Supposons, par exemple, que vous souhaitez inclure tous les employés nés entre le 1er janvier 1960 et le 31 décembre 1974. Votre clause WHERE peut avoir la forme suivante : WHERE DateDeNaissance BETWEEN #1/1/1960# AND #12/31/1974# page 74/75 ADO BE Dreamweaver CS 3 Pages web dynamiques : PHP /MyS Q L Tri des enregistrements : Utilisez la clause ORDER BY pour trier les enregistrements de votre jeu d'enregistrements. Par exemple, supposons que vous vouliez trier l es enregistrements par revenu des clients, en allant du moins élevé au plus élevé. L'ordre des enregistrements dans l'instruction SQL sera alors le suivant : SELECT Nom, Prénom, Revenus FROM Clients ORDER BY Revenus Par défaut, la clause ORDER BY trie les enregistrements dans l'ordre croissant (1,2,3... ou A, B, C...). Si vous souhaitez les trier dans l'ordre décroissant (du revenu le plus élevé au moins élevé), utilisez le mot-clé DESC de la façon suivante : ORDER BY Revenus DESC page 75/76