Pratique de MySQL et PHP- P18 ppsx

5 200 0
Pratique de MySQL et PHP- P18 ppsx

Đang tải... (xem toàn văn)

Thông tin tài liệu

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

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

Mục lục

    Première partie – Programmation web avec MySQL/PHP

    Chapitre 1 – Introduction à MySQL et PHP

    1.1 Introduction au Web et à la programmation web

    1.1.2 Documents web : le langage XHTML

    1.2 Programmation web avec MySQL et PHP

    1.3 Une première base MySQL

    1.3.1 Création d'une table

    1.3.2 L'utilitaire mysql

    1.3.3 L'interface PhpMyAdmin

    1.4 Accès à MySQL avec PHP

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan