Vous êtes sur la page 1sur 26

6, bd marchal Juin F-14050 Caen cedex 4

Spcialit Informatique 1re anne

Rapport de mini-projet

Gestion des demandes dintervention


TRIKI Firas ZRIDA Mohamed

Suivi : Mr David Martin

2e semestre 2005-2006

SOMMAIRE
INTRODUCTION..3 IPrsentation du projet :.4
1- Analyse de lexistant :..4 2- Cahier des charges :.5
a- login/mot de passe :........................................................................5 b- Numro de la demande :5 c- Les champs Service, Btiment et Etage :5 d- Ajout des champs e-mail et intervention :.........................6 e- Contrle du champ Dtail de lintervention :.6 f- La mise en page du mail gnr :...7

3- Outils et techniques utilises :.8


a- JavaScript :...8 b- PHP & MySQL :...8

II - Ralisation du projet :..10 III -Scurit des formulaires sur le net : Attaques et solutions 14
1- Attaque par injection des donnes :14
a- Descriptions des attaques :...14 b- Solution afin d'liminer ce type de faille :........................................16

2- Le spamming :. .17 a- Ajout d'en-tte volont :17 b- Solution : 17

CONCLUSION..18

ANNEXES...19

INTRODUCTION :
Dans le cadre du dveloppement des applications Intranet de lENSICAEN, notre cole propose une application qui permet aux personnels de ltablissement de saisir et denvoyer une demande dintervention aux services immobiliers et gnraux. Cette application a t dveloppe par un stagiaire mais elle ne rpond pas totalement aux attentes d la responsable des services immobiliers et gnraux. Notre projet e consiste ainsi amliorer cette application pour rpondre aux exigences d'un nouveau cahier des charges. Notre travail rsulte dans un premier temps, analyser l'application existante puis dans un deuxime temps la modifier en utilisant le duo PHP/Mysql. Nous allons ainsi vous prsenter cette analyse de l'existant puis le cahier des charges qui nous a t prsent par David MARTIN. Nous prsenterons ensuite les modifications apportes l'application lors de la ralisation de notre projet. Il nous a galement t demand de scuriser certains champs du formulaire afin dviter toute tentative de piratage. Pour rpondre cette demande, nous avons ralis une tude thorique qui traite de la scurit des formulaires sur le net en prsentant deux principaux types dattaques savoir lattaque par injection de donnes et le spamming. Nous prsentons galement les solutions ces attaques.

I- Prsentation du projet :
1- Analyse de lexistant :
Un site de demande dintervention auprs des services immobiliers et gnraux est un projet dj trait. On peut consulter lapplication existante ladresse suivante: http://www.ecole.ensicaen.fr/~projet/intervention/demintrv.php Pour accder au formulaire de demande, il faut passer par une page didentification dans laquelle lutilisateur doit saisir son login et son mot de passe. En effet, laccs cette page est rserv pour un certain nombre dutilisateurs.

Une fois la vrification du login et du mot de passe est faite, on accde la page suivante :

Lutilisateur doit obligatoirement remplir les champs service, demandeur, Btiment et Nature des travaux pour quun e- mail soit gnr et envoy au responsable des services gnraux. Dans le cas chant, on demande lutilisateur de vrifier la saisie des diffrents champs. Cette premire version du projet prsente plusieurs critiques : - laccs la demande dintervention nest pas public. - le remplissage des champs service, btiment et Etage nest pas contrl, par exemple, lutilisateur peut saisir un service ou un btiment qui nexiste pas. - Le champs nature des travaux nest pas scuris : un utilisateur mal intentionn pourrait construire des chanes malicieuses qui seront interprtes par le programme qui les traite. - La structure de le- mail envoy nest pas conforme lattente du responsable dintervention.

2- Cahier des charges :


Pour rpondre aux exigences du responsable des services gnraux, nous devons effectuer des modifications sur le code initial qui touchent les parties suivantes : a- login/mot de passe : Laccs la fiche dintervention doit tre rendu public sans avoir besoin de passer par une page didentification du login et du mot de passe de lutilisateur. Ainsi, toute personne susceptible daccder lintranet de lcole peut remplir une demande dintervention et lenvoyer au responsable concern. b- Numro de la demande : Un numro de la demande doit tre cr. Il aura la forme anne_numro. En effet chaque fois quun mail est envoy, on incrmente le numro qui correspond au nombre de demandes envoyes pendant lanne en cours. Quand on passe dune anne une autre on doit remettre le numro zro et mettre jour lanne. c- Les champs Service, Btiment et Etage : Dans la premire version du projet, ces diffrents champs doivent tre saisis par lutilisateur sans aucune vrification. Dans cette nouvelle version, on propose lutilisateur 3 listes droulantes correspondants aux champs concerns. Le champ Etage dpend de la saisie des champs Btiment et Service. Ces deux derniers sont indpendants. Le contenu des diffrentes listes est le suivant :

Service ou laboratoire Direction Scolarit Service financier Service personnel Service Info Service communication Relation internationale Services gnraux Dlgation la recherche DRI CIRIL GREYC LCMT LCS LPC SIFCOM CNAM

Btiment Btiment A Btiment B Btiment C Phase 1 CNRT ENSI B CIT

Etage RDC 1er tage 2me tage 3me tage 4me tage

Le remplissage de la liste droulante correspondant au champ Etage dpend du choix de lutilisateur pour les deux listes prcdentes. Exemple : Si " LPC" est choisi dans la liste de choix "Service" et "Phase 1" dans la liste "Btiment", la liste "Etage" est restreinte "RDC" et "1 er tage". Lensemble des combinaisons nous a t transmis par Mr David Martin. d- Ajout des champs e-mail et intervention : Comme on a enlev le login et le mot de passe, on ne peut plus rcuprer automatiquement ladresse e- mail de lutilisateur. Ainsi, on sest trouv dans lobligation dajouter un champ e- mail. On a aussi ajout un champ intervention qui correspond une liste droulante compose de deux lments : "petite maintenance" et "logistique". On a cr une rubrique aide qui explique le contenu de ce dernier champ. e- Contrle du champ Dtail de lintervention : Afin de protger le contenu du champ Nature des travaux de toute chane qui peut tre interprte par le programme (balises HTML par exemple), on a cr un filtre qui permet de supprimer tous les mta-caractres (par exemple < > ; :) .

f- La mise en page du mail gnr : On a modifi la structure du mail gnr aprs le remplissage du formulaire en respectant le modle suivant :

3- Outils et techniques utilises :


a- JavaScript :

JavaScript est un langage de programmation de type script, utilisant les objets, principalement utilis dans les pages Web. Le propos de JavaScript est de manipuler de faon simple des objets, au sens informatique, fournis par une application hte. Du code JavaScript peut tre intgr directement au sein des pages Web, pour y tre excut sur le poste client. Cest alors le navigateur Web qui prend en charge lexcution de ces petits bouts de programmes appels scripts. Il peut servi interagir avec le document HTML (on parle alors parfois dHTML dynamique).

b- PHP & MySQL : PHP : PHP est un langage de programmation, trs proche du langage C de type script. Il est excut par un interprteur du ct serveur contrairement JavaScript. PHP est un module support par le serveur web Apache, le plus rpandu dans le monde, il est donc dvelopp pour tre facilement utilisable via ce serveur (Il fonctionne videmment avec d'autres serveurs web). Il permet d'exploiter facilement de trs nombreuses bases de donnes comme MySQL. MySQL : Abrviation de "My Structured Query Language" ou mon langage de requtes structur. MySQL est un serveur de bases de donnes relationnelles SQL dvelopp et diffus sous une licence libre, la GNU General Public License. Le recours MySQL permet de masquer les dtails complexes lis lutilisation des fichiers. Il gre donc ces fichiers constituant ainsi une base de donnes en prenant en charge les fonctionnalits de protection et de scurit et en fournissant un ensembles dinterfaces (dont une avec PHP) facilitant laccs aux donnes. PHP est gratuit et performant tout comme MySQL, c'est pourquoi le duo PHP/MySql est particulirement ais mettre en place et propos des prix modestes chez les hbergeurs.

Un programme utile (EasyPHP) : Pour pouvoir travailler sur notre propre poste, on a utilis EasyPHP : un programme gratuit qui nous permet de manipuler le duo php/Mysql. EasyPHP est un package qui contient tous les programmes ncessaires pour traiter les scripts PHP qui interagissent facilement avec des bases de donnes. Il nous permet de visualiser les pages dynamiques cres en gnrant le code HTML correspondant. Parmi les programmes installs par EasyPHP, on trouve PHPmyAdmin qui nous permet de grer nos bases de donnes en fournissant une interface graphique facile manipuler.

II -

Ralisation du projet :

Aprs avoir analys le projet existant, tabli le cahier de charges et tudi les outils utiliss, nous avons commenc concrtiser les diffrentes tches demandes. Elimination login/mot de passe : On a commenc par liminer la page didentification ainsi que tous les bouts de code correspondants la connexion au serveur de lcole qui avait pour but de vrifier le login et le mot de passe de lutilisateur. Connexion : Lors de la ralisation du projet, on sest connect via un serveur local localhost une base de donnes appele projet en utilisant la commande: $connexion=Mysql_pconnect(localhost,root,) ; Ensuite on sest connect la base de donnes projet_intervention quon a cr en utilisant le programme PHPmyAdmin. Cette connexion se fait grce la commande mysql_select_db(projet_intervention, $connexion) On a combin ces deux connexions dans une seule fonction connexion, mise en annexe, afin de pouvoir faciliter la connexion nimporte quelle base de donnes et nimporte quel serveur. Les paramtres de la fonction sont dfinis dans le fichier connect.php mis en annexe. Numro de la demande : Pour raliser cette tche, on a eu recours un fichier texte numero_demande.txt dans lequel on sauvegarde lanne en cours et le numro de la demande. On manipule ce fichier en utilisant les fonctions affiche_demande() et numero_demande() mises en annexe. On utilise la premire fonction lors du chargement du formulaire pour afficher le numro de la demande en cours. La deuxime sexcute lorsque le- mail est envoy au responsable dintervention. Elle nous permet de mettre jour le numro de la demande dans le fichier texte. Les champs Service, btiment et tage : Pour les deux premiers champs on a insr dans la base de donnes projet_intervention deux tables grce PHPmyAdmin. On ajoute ensuite les lments de chaque table en utilisant la commande : INSERT INTO nom_table (nom_champ) VALUES ('valeur__insrer'). Chacune des deux tables cres utilise un seul champ de type VARCHAR :

10

On rcupre les donnes de chaque table en utilisant une requte SQL : select * from nom_table Ensuite pour crer la liste droulante, on a programm une menu_deroulant($connexion,$nom,$requete,$champ) mise en annexe. fonction

$connexion correspond la valeur retourne par la fonction connexion dj utilise. $nom correspond au nom de la table. $requete est la requte dfinie prcdemment. $champ est le nom du champ dans la table. Cette fonction excute la requte au dpart grce la fonction execrequete($requete,$connexion) mise en annexe. Ensuite, on organise les donnes de chaque table dans un tableau. Chaque fois quon rcupre une donne, on la met entre deux balises <option> et </option>. On met le tout entre deux balises <select> et </select> qui caractrisent la liste droulante.

11

Pour crer la liste droulante "Etage" qui dpend des champs btiment et service, on a utilis une fonction choix (formulaire) crite en JavaScript. Lutilisation du JAvaScript sest avre ncessaire pour changer les valeurs de l liste droulante a sans avoir rafrachir la page. Les changements seffectuent directement sur le poste client ce qui nest pas le cas lors de lutilisation du php. Le champ Intervention : Lutilisation dune table dans une base de donnes sest avre inutile puisque la liste droulante se compose uniquement de deux paramtres. On a cr une rubrique aide grce une petite fonction aproposde() qui lance une fentre pop up. Cette fentre contient les informations crites dans aide.txt. Contrle du champ Dtail de lintervention : Pour effectuer cette tche on a eu recours une fonction filtrage($commentaire) qui rcupre le commentaire saisi par lutilisateur. Au dpart on sauvegarde ce commentaire dans le fichier test.txt. Ensuite, on lit le contenu de ce fichier caractre par caractre, on compare chaque caractre lu aux mta-caractres quon veut supprimer du commentaire. Si ce caractre est un mta-caractre on le remplace par un espace et on lcrit dans le fichier texte_filtre.txt. On obtient ainsi un commentaire filtr.

=>

Une fois toutes ces taches ralises, il nous fallait adapter la mise en forme du mail gnr pour rpondre aux exigences du cahier de charges. Structure dtaille : Dans le schma suivant on reprsent toutes les fonctions utilises lors de la ralisation de notre projet. Ce schma montre aussi les interactions entre les diffrents fichiers (les diffrentes pages php cres).

12

Description des modules : - connect.php : renseignement des champs NOM, PASSE, BASE, SERVEUR pour se connecter MySQL. - connexion.php : fonctions amliores de connexion la base. - execrequete.php : fonctions dexcution de requtes MySQL. - design.php : fonctions de mise en page et prsentation avances. - table.php : fonction de cration simplifie de tableau HTML. - gestionnaire.php : fonctions de mise en forme du mail gnr. - affiche_demande.php : fonction daffichage du numro de la demande. - numero_demande.php : fonction qui permet dincrmenter le numro de la demande et lenregistrer dans un fichier texte. - menu.php : fonction permettant de crer les diffrentes listes droulantes. - filtrage.php : fonction permettant de filtrer un champ afin de scuriser le formulaire.

13

III- Scurit des formulaires sur le net : Attaques et solutions


De nos jours les formulaires sont la base de l'interactivit des pages web. Un formulaire html permet lentre de donnes par l'utilisateur, qui sont transmises un script de traitement (php, cgi...) ou transmises par envoi de courriel. Le problme pos par cette technique est celui de la scurit. En effet, les programmes de traitement de formulaires peuvent introduire un risque, car les utilisateurs ont la possibilit de lancer des commandes partir des champs de ces formulaires en utilisant diffrentes techniques parmi lesquelles on trouve linjection de donnes et le spamming.

1- Attaque par injection de donnes :


L'injection de donnes est une technique couramment employe et largement rpandue pour un grand nombre d'attaques sur les applications "web" ou les scripts CGI (Common Gateway Interface). Le but est d'insrer des donnes en entre d'une fonction, d'un programme ou bien d'un script afin de les dtourner de leur fonction d'origine. Le but de ces attaques peut tre trs vari :

excution de code arbitraire distance ; SQL injection ; vol de cookies ; dbordements de mmoire.

Afin d'viter d'tre vulnrable ce type d'attaque, un certain nombre de prcautions doivent tre prises. a- Descriptions des attaques : L'utilisation des mta-caractres : Les mta-caractres sont des caractres spciaux qui, placs en entre d'une ligne de commande, ne sont pas interprts comme des donnes. Ces caractres spcifiques ont un sens diffrent suivant le programme qui les interprtera (shell, CGI, SQL, ...). En voici une liste non exhaustive : & ~ " # ' { } ( [ ] ( ) - | ` _ \ ^ @ \*/.<>,;:!$ L'emploi de ces caractres permet un individu mal intentionn de construire des chanes malicieuses qui seront interprtes par le programme qui les traite. Il est donc important de limiter leur usage et de les filtrer.

14

Les attaques de type "SQL injection" Le langage SQL (Structured Query Language) est un langage utilis pour manipuler les bases de donnes relationnelles. Il permet la manipulation (cration, extraction, modification ou bien suppression) de donnes d'une base SQL. La vulnrabilit de type "SQL injection" est une technique permettant d'injecter du code de type SQL dans les cha mps des formulaires HTML. Ces parties sont ensuite intgres dans les requtes SQL utilises par le serveur WEB ce qui permet de contourner les contrles et d'avoir accs des informations normalement protges. Prenons l'exemple simple d'une page HTML de type formulaire permettant d'effectuer une requte sur une table possdant cinq champs : un ID, un nom, un prnom, son statut et son salaire. En indiquant la valeur de l'ID dans le champ correspondant du formulaire, on accde aux informations de la fiche personnelle d'un employ : <HTML> <HEAD> <TITLE> Test SQL injection <TITLE> </HEAD> <BODY> <FORM METHOD="post" action="requete.php"> <INPUT type="text" name="ID" size=20><BR> <INPUT type="submit" name="envoyer" value="envoyer"> </FORM> </BODY> </HTML> Les paramtres inscrits dans le formulaire seront traits par la page dynamique requete.php. La requte SQL est alors prtablie dans cette page PHP. Elle permet d'excuter la requte SQL suivante vers le serveur : SELECT * from table_employe WHERE id=xxx ; Un utilisateur mal intentionn voulant connatre les informations sur l'ensemble des salaris sans connatre aucun ID ni mme leur format peut rentrer dans le champ ID du formulaire HTML une chane malicieusement construite : ' OR 1=1 --. Par ce biais, la requte SQL va tre modifie : SELECT * FROM table_employe WHERE id='' OR 1=1 --; L'utilisateur aura alors accs la totalit des informations (salaire d'un employ sans avoir connaissance de l'ID). Cette faille rsulte dans le fait que la chane de caractres renseigne dans le champ ID n'a pas t vrifie. En effet, la vrification de la longueur maximale de la chane et de l'utilisation de certains mta-caractres permet, entre autres, d'empcher l'usage de ceux-ci pour la modification de la requte SQL initiale.

15

Pour cette faille, le filtrage des mta-caractres peut se rvler insuffisant. Effectivement, une chane de caractres de type : 1 UNION ALL SELECT salaire FROM table_employe WHERE status LIKE directeur ne comporte pas de mta-caractres et permet pourtant d'avoir accs des informations normalement protges. Il est donc ncessaire de filtrer galement les verbes SQL tels que : SELECT, FROM, WHERE, UNION, INSERT, INTO, DROP.

b- Solution afin d'liminer ce type de faille : Il est ncessaire de filtrer les donnes d'entre d'un script, d'un shell ou d'une fonction afin de supprimer tout ce qu'un utilisateur malicieux aurait put y insrer. Ce filtrage doit tre effectu au niveau du serveur et non du client pour viter que celui- ci ne soit dsactiv (ex: javascript). Pour raliser ce filtrage, certains lments peuvent tre pris en considration :

suppression des mta-caractres ; contrle des paramtres passs en argument, de leur valeur, et de leur nom ; limitation de la longueur des donnes ; respect du type de donnes (chane de caractres, date, caractres numriques).

16

2- Le spamming :
Depuis longtemps, les spammeurs dtournent allgrement les scripts d'envoi d'emails mal scuriss, tels ceux qui permettent de stipuler directement l'adresse du destinataire. Ils s'en prennent mme certains scripts trs populaires, tel le tristement clbre FormMail.pl. Mais l'originalit de la vague de dtournement actuelle, c'est que les victimes sont des sites dont les webmasters ont pourtant pris soin de protger leur script d'envoi de courriers. Lorsque ceux-ci dveloppent un formulaire charg d'envoyer du courrier depuis leur site, ils prennent souvent la peine de limiter les destinataires quelques adresses prdfinies inscrites "en dur" dans le code PHP. a- Ajout d'en-tte volont : A l'aide de robots, les spammeurs explorent les sites la recherche d'un formulaire de contact abuser. Peu importe qu'il ne propose pas de saisir directement l'adresse du destinataire. Ce qui les intresse, c'est surtout qu'il permette l'internaute de saisir son adresse email en tant qu'expditeur. Une fois un tel formulaire repr, le spammeur procde une tentative de dtournement : il utilise le formulaire pour envoyer un courrier tout simple. Mais aprs avoir inscrit une adresse quelconque dans le champs "Expditeur", il ajoute un caractre de nouvelle ligne ( "r" ou "n") suivi, par exemp le, de la mention BCC:, puis d'une adresse email de test. Lorsque le contenu de ce champ sera insr dans les headers de l'email construit par le script, le saut de ligne provoquera la cration d'une nouvelle ligne d'en-tte, qui sera celle que le spammeur a spcifi dans le champ "Expditeur" du formulaire. On appelle a une attaque par injection d'en-ttes. Si le spammeur reoit le courrier l'adresse qu'il a inject, c'est que le formulaire peut tre utilis de manire industrielle. Des outils lui permettront alors d'automatiser la tche : il excutera le script vulnrable directement (sans passer par le formulaire) et en insrant ses propres en-ttes BCC: garnis de centaines d'adresses emails spammer. b- Solution : La solution pour se protger contre une telle attaque est d'interdire les sauts et retours de ligne dans les adresse emails fournies par l'utilisateur. Cela peut se faire en modifiant le code de la fonction mail() dans les sources de PHP ou, plus simplement, en filtrant correctement les entres de l'utilisateur. Ainsi une adresse email ne doit pas tre compose d'autre chose que de deux chanes de caractres usuels (des lettres, des chiffres, le point, le tiret et l'underscore), spares par un caractre @ et suivies d'un point puis enfin d'une nouvelle srie de lettres (et uniquement des lettres). Une telle rgle peut facilement tre dcrite l'aide d'une expression rgulire. Il suffit alors de crer une fonction "de scurit" qui sera appele pour contrler chaque adresse avant de la passer au script proprement dit.

17

CONCLUSION :
Ce projet a t pour nous une opportunit non seulement pour apprendre le php/Mysql, mais aussi pour savoir grer notre travail et bien lorganiser. En plus de laspect dveloppement lors de la ralisation du site, nous avons labor une tude thorique qui nous a permis davoir une certaine ide sur les techniques utilises pour protger un formulaire accessible sur le net. Mis part ce cot informatif, ce projet a t une vritable occasion de dcouvrir certains aspects du mtier dingnieur : relations avec un "client", analyse d'un existant, rpondre un cahier des charges.

18

ANNEXES :

1- Documents utilisateurs :
La premire page que rencontre un utilisateur dsireux de remplir et envoyer une demande dintervention auprs des Services Immobilier et Gnraux est la page ci-dessous.

19

Lutilisateur doit remplir les diffrents champs du formulaire, dans le cas chant la page suivante sera affiche.

En cliquant sur le bouton "Prcdent" lutilisateur accde de nouveau au formulaire pour remplir les champs manquants. Une fois les champs remplis, lutilisateur verra apparatre la page suivante.

20

Ainsi un mail est envoy au responsable des Services Immobilier et Gnraux. Ce mail a la forme suivante :

21

2- Code de quelques fonctions cres :


connect.php : <?php define("NOM","root"); define("PASSE",""); define("SERVEUR","localhost"); define("BASE","projet_intervention"); // constante pout le titre des pages define("TitrePage", "Demande d'intervention <br>auprs des Services Immobilier et Gnraux"); // constante relatif l'envoi du mail define("ResponsableInterventionNom", "David MARTIN"); define("ResponsableInterventionEmail", "martind@ensicaen.fr"); ?> connexion.php : <?php if (!isset ($FichierConnexion)) { $FichierConnexion = 1; function connexion ($pNom, $pMotPasse, $pBase, $pServeur) { $connexion=mysql_pconnect($pServeur, $pNom, $pMotPasse); if (!$connexion) { echo "Dsol, connexion " . $pServeur . " impossible\n"; exit; } if (!mysql_select_db($pBase, $connexion)) { echo "Dsol, accs la base " . $pBase . " impossible\n"; exit; } return $connexion; } // Fin de la fonction de connextion Serveur, Base } ?>

22

affiche_demande.php : <? function affiche_demande(){ $fp = fopen("numero_demande.txt","r"); // On ouvre le fichier en lecture $annee_fichier = fgets($fp,255); // On rcupre le premier nombre dans le fichier $numero=fgets($fp,255); // On rcupre le second nombre dans le fichier $annee=date("Y");//On rcupre l'anne en cours if($annee_fichier<$annee)//Si la dernire demande a t effectu l'anne //prcdente la demande actuelle devient la premire de l'anne en cours. $numero=1; else $numero=$numero+1; // On incrmente le numro de la demande(+1) fclose($fp); // 6.On ferme le fichier return $annee."_".$numero ; } ?> numero_demande.php : <? function numero_demande(){ $fp = fopen("numero_demande.txt","r"); // On ouvre le fichier en lecture $annee_fichier = fgets($fp,255); // On rcupre le premier nombre dans le fichier $numero=fgets($fp,255); // On rcupre le second nombre dans le fichier $annee=date("Y");//On rcupre l'anne en cours if($annee_fichier<$annee)//Si la dernire demande a t effectu l'anne //prcdente la demande actuelle devient la premire de l'anne en cours. { $numero=1; } else $numero=$numero+1; // On incrmente le numro de la demande fclose($fp); // On ferme le fichier $fp = fopen("numero_demande.txt","w");//On crase le contenu du fichier et on //l'ouvre en ecriture fseek($fp,0); // On se place en dbut de fichier fputs($fp,$annee); // On crit dans le fichier l'anne en cours fputs($fp,"\n");//On retourne la ligne fputs($fp,$numero);//On crit le numro de la demande fclose($fp); // On ferme le fichier return $annee."_".$numero ; } ?>

23

execrequete.php : <?php if (!isset($FichierExecRequete)){ $FichierExecRequete = 1; // Excution d'une requte avec MySQL function execrequete ($requete, $connexion) { $resultat = mysql_query ($requete, $connexion); if ($resultat) return $resultat; else { echo "<B>Erreur dans l'ex&eacute;cution de la requete.</B><BR>"; echo "<B>Message de MySQL :</B> " . mysql_error($connexion); exit; } } // Fin de la fonction ExecRequete //Recherche de la ligne suivante function LigneSuivante ($resultat) { return mysql_fetch_object ($resultat); } } // Fin du test ?> menu.php : <?php require("execrequete.php"); function menu_deroulant($connexion,$nom,$requete,$champ){ $reponse=execrequete ($requete, $connexion);// execution de la requte $ld="<SELECT NAME='$nom' onChange='choix(this.form)'>";// on utilise la fonctoin choix(formulaire) // On boucle sur la table while ( $row = mysql_fetch_array( $reponse)) { //$row est un tableau $nomchamps = $row["$champ"];//$nomchamps prend la valeur de la donne //correspondante dans la table $ld.="<OPTION>$nomchamps</OPTION>"; } $ld .= "</SELECT>"; return $ld; } ?>

24

filtrage.php : <?php function filtrage($commentaire){ $fp = fopen('commentaire.txt', 'w');//On ouvre le fichier en mode w ie on //supprime son contenu et on crit if (!$fp) echo "Impossible d'ouvrir le fichier test.txt"; fputs($fp,$commentaire); fclose($fp); $fp = fopen('commentaire.txt', 'r');//On ouvre le fichier en lecture if (!$fp) echo "Impossible d'ouvrir le fichier test.txt"; $fpr= fopen('nouveau_commentaire.txt', 'w');//On ouvre le fichier en mode w ie //on supprime son contenu et on ecrit if (!$fpr) echo "Impossible d'ouvrir le fichier nouveau_text.txt"; fseek($fpr,0); // On se place en dbut de fichier while (false !== ($char = fgetc($fp))) {//On lit dans le fichier caractre par //caractre if($char=="\\" ||$char=="/" ||$char=="&" ||$char=="~" || $char==";" || $char=="|" || $char=="_" || $char=="- " || $char=="#" ||$char=="<" || $char==">" || $char=="{" || $char=="}" ||$char=="`" || $char=="[" || $char=="]" || $char=="$" ||$char=="^" || $char=="*" || $char=="@"|| $char=="\"" ||$char=="(" || $char==")" ) { $char=' ';//si le caractre lu est se trouve dans la liste si-dessus, on //le remplace par un espace } fputs($fpr,$char); //On ecrit le caractre dans le fichier nouveau_texte.txt } fclose($fp); fclose($fpr); $nouveau_commentaire="";//Variable contenant le commentaire aprs filtrage $fpr = fopen('nouveau_commentaire.txt', 'r');//On ouvre le fichier nouveau_texte.txt en lecture if (!$fp) { echo "Impossible d'ouvrir le fichier nouveau_texte.txt"; } fseek($fpr,0); while (false !== ($char = fgetc($fpr))) { $nouveau_commentaire.=$char;//On concataine les diffrents caractres //lus dans cette variable } fclose($fpr); return $nouveau_commentaire; } ?>

25

Rfrences bibliographiques

[1]

Philippe Rigaux, pratique de MySQL et PHP , 14 avril 2001 http://www.siteduzero.com

Editions OREILLY,

[2] le site du zro : [3] http://fr2.php.net/manual/fr/index.php

26