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

Pratique de MySQL et PHP- P20 pptx

5 427 0
Tài liệu đã được kiểm tra trùng lặp

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 221,95 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

2.2.4 Traitement de la réponse Avant afficher, dans un document HTML, un texte saisi dans un formulaire, il faut se poser les questions suivantes : • Quelle sera la mise en forme obtenue

Trang 1

mysql> INSERT INTO Mail (destinataire, sujet, message, date_envoi)

-> VALUES (’rigaux@lri.fr’, ’Essai’, ’Test du mail’, NOW());

Query OK, 1 row affected (0,00 sec)

La fonction LAST_INSERT_ID() permet de savoir quelle est la dernière valeur générée pour un champ AUTO_INCREMENT

mysql> SELECT LAST_INSERT_ID() ;

+ -+

| last_insert_id() |

+ -+

+ -+

1 row in set (0.06 sec)

mysql>

Enfin, on peut vérifier qu’il est impossible d’insérer deux fois un e-mail avec le même identifiant

mysql> INSERT INTO Mail (id_mail, destinataire, sujet,

-> VALUES (36, ’rigaux@dauphine.fr’, ’Essai’, ’Test du mail’, NOW()); ERROR 1062 (23000): Duplicate entry ’36’ for key 1

Nous reviendrons sur ces questions – essentielles – d’identification dans le cha-pitre 4

La fonction ci-dessous prend un tableau en paramètre, traite ses entrées en échappant les apostrophes, et exécute enfin la requête

Exemple 2.14 exemples/StockeMail.php:Commande d’insertion dans MySQL

<? php

r e q u i r e _ o n c e ( " UtilBD php " ) ;

/ / F o n c t i o n s t o c k a n t un e−m a i l d a n s l a b a s e Le t a b l e a u en

/ / p a r a m è t r e d o i t c o n t e n i r l e s e n t r é e s d e s t i n a t a i r e , s u j e t

/ / e t m e s s a g e NB: i l f a u d r a i t v é r i f i e r l e s v a l e u r s

f u n c t i o n S t o c k e M a i l ( $ m a i l )

{

/ / C o n n e x i o n au s e r v e u r

$ c o n n e x i o n = Connexion (NOM, PASSE , BASE , SERVEUR) ;

/ / On " é c h a p p e " l e s c a r a c t è r e s g ê n a n t s

$ d e s t i n a t a i r e = m y s q l _ r e a l _ e s c a p e _ s t r i n g ( $ m a i l [ ’ d e s t i n a t a i r e ’ ] ) ;

$ s u j e t = m y s q l _ r e a l _ e s c a p e _ s t r i n g ( $ m a i l [ ’ s u j e t ’ ] ) ;

$ m e s s a g e = m y s q l _ r e a l _ e s c a p e _ s t r i n g ( $ m a i l [ ’ m e s s a g e ’ ] ) ;

/ / C r é a t i o n e t e x é c u t i o n d e l a r e q u ê t e

Trang 2

$ r e q u e t e = " INSERT INTO M a i l ( d e s t i n a t a i r e , s u j e t , m e s s a g e ,

d a t e _ e n v o i ) "

"VALUES ( ’ $ d e s t i n a t a i r e ’ , ’ $ s u j e t ’ , ’ $ m e s s a g e ’ , NOW( ) ) " ;

E x e c R e q u e t e ( $ r e q u e t e , $ c o n n e x i o n ) ;

}

? >

Suite à notre décision d’éliminer tout échappement automatique en entrée d’un script PHP, il faudra penser systématiquement à traiter avec la fonction mysql_real_escape_string() les chaînes à insérer dans MySQL2

2.2.4 Traitement de la réponse

Avant afficher, dans un document HTML, un texte saisi dans un formulaire, il faut

se poser les questions suivantes :

Quelle sera la mise en forme obtenue ? Rend-elle correctement la saisie de l’utilisateur ?

Le texte peut-il contenir lui-même des balises HTML qui vont gêner l’affi-chage ?

Voici un exemple de texte que l’utilisateur pourrait saisir dans le formulaire, potentiellement source de problème :

Pour cr´ eer un formulaire, on utilise la balise <form> et une

suite de balises <input> Voici un exemple ci-dessous:

<form action=’monscript’>

<input type=text name==’n1’ size=’10’/>

<input type=text name==’n2’ size=’10’/>

<input type=’submit’/>

</form>

Bonne r´ eception!

PR

Quand on transmet le texte saisi dans une fenêtre de formulaire au script et que ce dernier le renvoie au navigateur pour l’afficher, on obtient le résultat de la figure 2.3 Les balises apparaissent littéralement et ne sont pas interprétées par le navigateur Pourquoi ? Parce que nous les avons traitées avec htmlSpecialChars() et que le texte <input> a été remplacé par &lt;input&gt; Faites l’essai, et retirez le filtrage par htmlspecialChars() pour constater les dégâts à l’affichage

2 Il est d’usage d’appeler addSlashes() qui suffira dans la très grande majorité des cas, mais mysql_real_escape_string() est un peu plus complète et adaptée à MySQL, pour la prise en compte des jeux de caractères par exemple.

Trang 3

Par ailleurs, pour conserver les sauts de ligne en HTML, il faut insérer

explicite-ment des balises <br/> PHP fournit une fonction, nl2br(), qui permet de convertir les caractères de sauts de ligne en balises <br/>, préservant ainsi l’affichage.

Figure 2.3 — Affichage du texte d’un e-mail comprenant des balises

La chaîne de caractères obtenue après ces traitements prophylactiques est donnée ci-dessous, ce qui permet d’afficher le résultat donné figure 2.3

<h1>Envoi de mail</h1>

<b>On a envoy´ e le message suivant: </b>

<p>Pour cr´ eer un formulaire, on utilise<br />

la balise &lt;form&gt; et une suite de balises<br />

&lt;input&gt; Voici un exemple ci-dessous:<br />

<br />

&lt;form action=’monscript’&gt;<br />

&lt;input type=text name==’n1’ size=’10’&gt;<br />

&lt;input type=text name==’n2’ size=’10’&gt;<br />

&lt;input type=’submit’&gt;<br />

&lt;/form&gt;<br />

Bonne r´ eception!<br />

<br />

PR

La présence de lettres accentuées dans un document HTML ne pose pas de problème à un navigateur employant le jeu de caractères standard occidental ou l’UTF-8 Rappelons que ce réglage est spécifié au début du document avec l’option suivante pour Latin1 :

<?xml version="1.0" encoding="iso-8859-1"?>

Trang 4

Une autre possibilité est de remplacer toutes les lettres accentuées (et de manière générale tous les caractères spéciaux) par un appel à l’entité correspondante (par exemple « é » devient « &eacute; ») On obtient ce remplacement avec la fonction htmlEntities()

2.2.5 Comment obtenir du texte « pur » : envoi de l’e-mail

Finalement, il reste à envoyer l’e-mail, grâce à la fonction mail() de PHP3 Les questions à se poser sont ici réciproques de celles étudiées ci-dessus pour le pas-sage d’une représentation en texte brut à une représentation HTML Si le texte à envoyer contient des mises en forme HTML, on peut les supprimer avec la fonction strip_tags(), comme le montre la fonction ci-dessous

Exemple 2.15 exemples/EnvoiMail.php:Fonction d’envoi d’un e-mail

<? php

/ / F o n c t i o n e n v o y a n t un e −m a i l On s u p p o s e

/ / q u e l e s c o n t r ô l e s o n t é t é e f f e c t u é s a v a n t l ’ a p p e l à l a

/ / f o n c t i o n

f u n c t i o n E n v o i M a i l ( $ m a i l )

{

/ / E x t r a c t i o n d e s p a r a m è t r e s

$ d e s t i n a t a i r e = $ m a i l [ ’ d e s t i n a t a i r e ’ ] ;

$ s u j e t = $ m a i l [ ’ s u j e t ’ ] ;

/ / On r e t i r e t o u t e s l e s b a l i s e s HTML du m e s s a g e

$ m e s s a g e = s t r i p _ t a g s ( $ m a i l [ ’ m e s s a g e ’ ] ) ;

/ / On v a i n d i q u e r l ’ e x p é d i t e u r , e t p l a c e r r i g a u x @ d a u p h i n e f r e n / / c o p i e

$ e n t e t e = " From : mysqlphp@dunod f r \ r \n " ;

$ e n t e t e = " Cc : r i g a u x @ d a u p h i n e f r \ r \n " ;

/ / A p p e l à l a f o n c t i o n PHP s t a n d a r d

m a i l ( $ d e s t i n a t a i r e , $ s u j e t , $ m e s s a g e , $ e n t e t e ) ;

}

? >

L’étude de fonctionnalités plus avancées d’envoi d’e-mails (avec fichiers en atta-chement par exemple) dépasse le cadre de ce livre Comme d’habitude je vous

renvoie à php.net, ou à des fonctionnalités prêtes à l’emploi comme phpMailer (voir

le site developpez.com).

3 Cette fonction nécessite l’accès à un serveur SMTP, et peut être désactivée chez votre fournisseur

d’accès pour éviter l’envoi de spams (ou pourriels).

Trang 5

2.2.6 En résumé : traitement des requêtes et des réponses

Le cas d’école qui précède montre les principes règles à appliquer aux chaỵnes de caractères transmises par HTTP, et aux réponses transmises au client Le tableau 2.1 rappelle pour sa part la liste des fonctions essentielles au traitement des données HTTP

1 s’assurer, à l’entrée du script, que les chaỵnes suivent toujours la même règle d’échappement ; étant donné que la configuration peut varier, le seul moyen sûr est d’effectuer un pré-traitement à l’entrée dans le script (fonction NormalisationHTTP()) ;

2 effectuer tous les contrơles nécessaires sur la présence et les valeurs des données transmises ;

3 filter les données en entrées, en supprimant notamment les balises avec strip_tags() ou en les neutralisant avec htmlSpecialChars() ;

4 utiliser un échappement (avec «\ ») avant d’insérer dans la base MySQL ;

5 appliquer un échappement aux caractères réservés HTML (« < », « > »,

« & »), en les transformant en appels d’entités avant de transmettre à un navigateur ;

6 supprimer les balises HTML avant un affichage en mode texte (ou envoi d’un e-mail, ou toute autre situation comparable)

Tableau 2.1 — Fonctions utilisées dans cette section

get_magic_quotes_gpc Renvoie « vrai » si les guillemets et apostrophes sont

automatique-ment « échappées » dans les chaỵnes transmises par HTTP, faux sinon.

isSet( nom variable) Renvoie vrai si la variable est définie, faux sinon.

empty( nom variable) Renvoie vrai si la variable n’est pas la chaỵne vide, faux sinon.

htmlEntities( cha^ ıne) Renvoie une chaỵne ó les caractères spéciaux présents dans

cha^ ıne sont remplacés par des entités.

htmlSpecialChars( cha^ ıne) Renvoie une chaỵne ó les caractères «<», «>», « & », « ’ » et

« " » présents danscha^ ıne sont remplacés par des entités.

strip_tags( cha^ ıne, [balises]) Renvoie une chaỵne ó les balises HTML présentes danscha^ ıne

sont supprimées (à l’exception de celles données dans le second argument, optionnel).

addSlashes( cha^ ıne) Renvoie une chaỵne ó les guillemets et apostrophes sont préfixées

par «\», notamment en vue de l’insertion dans une base de données.

mysql_real_escape_string( cha^ ıne) Idem que la précédente, mais adaptée à MySQL pour le traitement

de données binaires ou de lettres accentuées.

stripSlashes( cha^ ıne) Fonction inverse de la précédente : renvoie une chaỵne ó les barres

«\» sont supprimées devant les guillemets et apostrophes.

nb2br( cha^ ıne) Renvoie une chaỵne ó les caractères ASCII de fin de ligne (\n)

sont remplacés par la balise <br/>

urlEncode( cha^ ıne) Renvoie une chaỵne codée pour pouvoir être insérée dans une URL.

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

TỪ KHÓA LIÊN QUAN