Vous êtes sur la page 1sur 26

Page 1

PHP : Personal Home Page


(P. Torguet / Ph. Truillet UPS) 15 Octobre 2001 v. 1.04

1. Introduction
PHP est n avec le site de Rasmus Lerdof en 1994 : une page personnelle qui permettait de conserver une trace de passage des utilisateurs. A la suite de la demande de la mise disposition de cet outil par de nombreux utilisateurs, Lerdof a dcid de mettre en ligne la version 1.0 de PHP (Personal Home Page). A la surprise de son auteur, PHP est devenu rapidement trs populaire et il a fallu ajouter de nouvelles fonctionnalits telles que boucles, structures conditionnelles, etc. La version 2.0 permettra ainsi au dveloppeur dintgrer des instructions de programmation puissantes directement dans du code HTML. Un script PHP peut ainsi analyser les donnes soumises par un formulaire HTML, communiquer avec des bases de donnes et effectuer des calculs complexes la vole. Et lexcution de tels scripts est trs rapide, car le code source du langage est directement compil dans le serveur web. Ainsi, les instructions PHP sont excutes lintrieur mme du serveur, sans aucune ressource supplmentaire, contrairement aux CGI (Common Gateway Interface). La correction derreurs danalyse et le soutien dautres dveloppeurs a permis la sortie de nouvelles versions de PHP : la version 3 (encore trs utilise) et la version 4. depuis mi-2000. Contrairement ce que certains disent, lacronyme PHP ne signifie pas "People Hate Perl", mais Personal Home Page, nom hrit de la premire version. Aujourdhui, par consensus, PHP signifie PHP is an Hypertext PreProcessor.

2. Gnralits
2.1. Quest-ce que PHP ?
PHP est un langage de script qui sinclut dans le langage HTML et est trait par le serveur web. La syntaxe du langage PHP provient des langages C, Java et Perl, avec un petit nombre de fonctions indites par rapport ces langages. Le but du langage PHP est de permettre aux dveloppeurs de site web dcrire rapidement des pages web dynamiques. PHP permet de construire dynamiquement des pages HTML contenant les rsultats de calculs ou de requtes SQL adresses un systme de gestion de bases de donnes (SGBD). Il ne demande pas de connaissances importantes de la machine sur laquelle on travaille, et permet de faire fonctionner les scripts sur nimporte quel systme dexploitation (Unix, Mac, Windows). Grce de nombreuses extensions, PHP3 peut gnrer des fichiers PDF, sinterfacer avec des serveurs de messagerie ou encore gnrer des images et graphiques GIF la vole. En outre, PHP3 peut sinterfacer la quasi totalit des SGBD du march. Son objectif consiste produire des pages HTML ct serveur moyennant des traitements permettant denrichir ces pages par linsertion des donnes en provenance de bases de donnes. Enfin, PHP est distribu librement et gratuitement sous la licence GNU GPL.

2.2 A qui sadresse PHP ?


Reprenant une syntaxe claire trs proche de celle du langage C, PHP est un langage dont la prise en main est gnralement rapide. Cest donc un langage qui conviendra autant au dbutant dsireux de se familiariser sans douleur avec les techniques du web dynamique, quau professionnel cherchant une solution simple mais toutefois puissante et fiable pour des sites de taille moyenne.

2.3 Les atouts de PHP


Pourquoi devrais-je apprendre le langage PHP ? Le temps des sites web statiques dvelopps avec des pages HTML et quelques scripts CGI sera bientt rvolu. Dsormais, les catalogues de produits des entreprises doivent pouvoir tre convertis en moins de 24 heures pour tre consultables en ligne, travers linterface dune boutique lectronique par exemple.

Page 2

PHP: Personal Home Page

PHP est librement modifiable et il a t conu pour intgrer de multiples extensions . Cela nest pas tonnant, car il est programm en C. De plus, PHP propose une API (Application Programming Interface) trs stable. Les dveloppeurs expriments pourront ainsi aisment ajouter de nouvelles fonctions. PHP est uniquement ddi au dveloppement de pages web dynamiques, contrairement des langages gnraux (Perl, C et Java, entre autres), qui reprsentent dexcellents outils de programmation, mais restent trs difficiles manier pour le web. Les applications PHP sont rapides mettre en place et faciles crer, car leur code est directement intgr dans les pages HTML. Enfin, PHP est un langage trs populaire. Plusieurs fournisseurs daccs ou hbergeurs de sites lont dores et dj adopt, autorisant ainsi les utilisateurs dvelopper leurs propres applications web sans exposer leur serveur aux risques des CGI.

3. Structures de base
3.1. Introduction
Voici pour commencer la clbre adaptation du programme Hello World en PHP : <html><body> <?php echo "Hello World<P>"; ?> </body></html> Simplissime, non ? Le code PHP est plac directement dans le code source HTML, il est encadr par deux balises spciales ( <?php et ?>) qui sont destines tre reconnues par linterprteur PHP. On aurait pu tout aussi bien utiliser les balises <script language="php"> et </script> comme on le fait pour du JavaScript.

3.2. Syntaxe
La syntaxe de PHP na vraiment rien de droutante puisquelle est trs proche de celle du langage C. On place gnralement une instruction par ligne. Une instruction est termine par un point-virgule en fin de ligne.

3.3. Oprateurs et expressions


Les types de donnes standards en PHP sont : integer (entiers) double (rels reprsents par des valeurs virgule flottante) string (chanes de caractres) array (tableaux) object (objets cf. la programmation par objet) PHP nest pas un langage fortement typ. Cest PHP qui dcide lexcution, en fonction de son contenu, quel type sera le plus indiqu pour la variable. Note : les variables en PHP commencent toutes par le caractre $. Par exemple : $var, $toto, $i Quand vous utilisez une variable, vous navez pas besoin de la dclarer au pralable. Attention, une variable peut changer de type en fonction de son contenu. Nous allons voir comment jongler avec les diffrents types de variables. $foo = "0"; // $foo est une chane de caractres : string "0" (code ASCII 48) $foo++; // $foo est une chane de caractres : string "1" (ASCII 49) $foo += 1; // $foo est maintenant un entier : integer (2) $foo = $foo + 1.3; // $foo est maintenant un rel : double (3.3) $foo = 5 + "10 Little Piggies"; // $foo est maintenant un entier (15) $foo = 5 + "10 Small Pigs"; // $foo est maintenant un entier (15) Conclusion ? Eh bien, si linterprteur PHP sen sort plutt bien, ce genre de construction ne devrait jamais tre utilis en pratique, moins que vous ne soyez le seul maintenir votre code PHP et encore !

PHP: Personal Home Page

Page 3

3.3.1. Oprateurs arithmtiques


Quelques exemples valent souvent mieux quun long discours... $a $a $a $a $a + $b Addition - $b Soustraction * $b Multiplication / $b Division % $b Modulo Somme de $a et $b. Reste de la diffrence de $b et $a. Produit de $a par $b. Dividende de $a par $b. Reste de la division entire de $a par $b.

3.3.2. Oprateurs sur les chanes


Il nexiste quun seul oprateur en PHP3 sur les chanes, cest loprateur de concatnation .. $a = "Hello "; $b = $a . "World!"; // $b contient "Hello World!" Il est noter que vous pouvez spcifier une chane en lencadrant entre des simples ou des doubles quotes (guillemets simples ou doubles). Les double quotes permettent le remplacement des variables par leur valeur. $val=Pengo; echo Hello $val; // Affiche Hello $val echo "Hello $val"; // Affiche Hello Pengo

3.3.3. Oprateurs binaires


Il sagit des oprateurs binaires dits bit bit, et non pas des oprateurs logiques boolens. $a & $b Et Les bits qui sont 1 dans $a ET dans $b sont mis 1. $a | $b Ou Les bits qui sont 1 dans $a OU dans $b sont mis 1. ~ $a Non Les bits sont inverss.

3.3.4. Oprateurs Logiques


Chose originale avec PHP, il existe deux versions diffrentes. $a and $b Et Rsultat vrai $a or $b Ou Rsultat vrai $a xor $b Ou Exclusif Rsultat vrai ! $a Rsultat vrai $a && $b Et Rsultat vrai $a || $b Ou Rsultat vrai des oprateurs logiques ET et OU, avec des prcdences si si si si si si $a $a $a $a $a $a ET $b sont vrais OU $b est vrai (ou les deux) OU $b est vrai, mais pas si les deux sont vrais est faux, et rciproquement ET $b sont vrais OU $b est vrai (ou les deux)

3.3.5. Oprateurs de Comparaison


Encore du classique. Sans surprise pour les habitus de la syntaxe C. $a == $b Egal Rsultat vrai si $a est gal $b $a != $b Diffrent Rsultat vrai si $a est diffrent de $b $a < $b Infrieur Rsultat vrai si $a est strictement infrieur $b $a > $b Suprieur Rsultat vrai si $a est strictement suprieur $b $a <= $b Inf ou gal Rsultat vrai si $a est infrieur ou gal $b $a >= $b Sup ou gal Rsultat vrai si $a est suprieur ou gal $b

3.4. structures de contrle


Les structures de contrle If, Ifelse, Ifelseelseif ainsi que les instructions de boucle dowhile, for, break, continue et switch sont disponibles avec PHP. if (ressemble au C) if ($expr) { echo "$expr est vrai" ; } elseif ($expr2) { echo "$expr2 est vrai" ; } else {

Page 4

PHP: Personal Home Page

echo "tout est faux" ; } switch (comme en C) switch ($i) { case 0: print "i gale 0"; break; case 1: print "i gale 1"; break; case 2: print "i gale 2"; break; default : print "autre chose" } dowhile, for, while, (ressemblent ceux du C, part que les variables sont non types) Exemple de for : for($i = 0; $i < 10; $i++) { echo $i; }

4. PHP et
4.1. les tableaux
Pourquoi les tableaux sont-ils si importants en PHP ? Parce les fonctions qui retournent plusieurs valeurs le font gnralement sous la forme de tableaux. Cest la cas des fonctions lies aux bases de donnes. Il est donc particulirement intressant de bien matriser les tableaux en PHP. Il existe en PHP deux types de tableaux : Premier type : les tableaux que lon pourrait nommer "Classiques" dans lesquels on se dplace en utilisant lindice de llment, comme en langage C. Le premier lment porte comme en C lindice zro. On peut remplir un tableau en adressant chaque lment un par un, ou dun coup en fournissant toutes les valeurs : $tab[0] = "P"; $tab[1] = "H"; $tab[2] = "P"; // Equivalent $tab = array("P","H","P"); Et un deuxime type : les tableaux associatifs, cest dire les tableaux qui contiennent pour chaque lment une valeur associe qui sert de cl daccs. Voici un exemple avec un indice de type chane de caractres : $villes["toulouse"] = 370000 ; $villes["paris"] = 2200000 ; $villes["lyon"] = 420000 ;

4.2. les fonctions


Pour dfinir des fonctions en PHP on utilise le mot-clef function. La syntaxe est la suivante : function nomFonction($arg1, $arg2, ..., $argn) { instructions ; } Passage de paramtres : $arg : par valeur &$arg : par rfrence Les derniers paramtres peuvent avoir des valeurs par dfaut (ex. $arg3=1) Pour que la fonction retourne une valeur on utilisera comme en C : return $val ; Les variables cres dans la fonction sont par dfaut locales.

PHP: Personal Home Page

Page 5

On peut les dclarer globales (peu recommand) en crivant global lors de la premire initialisation. Exemple : global $var = 10 ; Une variable locale peut tre mmorise dun appel lautre de la fonction en utilisant le mot-cl static comme en C. On peut crire des bibliothques de fonctions quon pourra ensuite inclure avec linstructions : require. Exemple : require("ma_bibliotheque.php") ; Note : il y a aussi une instruction include qui sutilise de la mme faon mais elle ne provoque pas derreur si le fichier nest pas trouv. Le fichier est donc optionnel.

4.2. les Entres/Sorties fichiers


Les fonctions qui grent les E/S fichiers en PHP ressemblent beaucoup aux fonctions du langage C. fopen permet d'ouvrir un fichier en lecture, criture ou ajout en fin de fichier. Exemples : $fich = fopen("fich.txt", "r"); /* ouvre un fichier en lecture */ $fich = fopen("fich.txt", "w"); /* ouvre un fichier en criture */ $fich = fopen("fich.txt", "a"); /* ouvre un fichier en ajout en fin de fichier */ fgets permet de lire un certain nombre de caractres dans un fichier (ouvert en lecture). Exemple : $chaine = fgets($fich, 1024); /* lit au maximum 1024 caractres et les place dans la chane $chaine */ feof permet de savoir si on est arriv la fin du fichier. Exemple : if (feof($fich)) print("fin du fichier atteinte"); fputs permet d'crire une chane de caractres dans un fichier (ouvert en criture ou en ajout). Exemple : fputs($fich, $chaine); /* crit la chane $chaine dans le fichier */ fclose ferme un fichier. Exemple : fclose($fich); /* ferme le fichier - ne pas oublier */ file_exists teste lexistence dun fichier (retourne TRUE si le fichier existe, et FALSE sinon) Exemple : if (file_exists("fich.txt")) print("le fichier existe");

4.2. les formulaires


La rcupration des paramtres de formulaires en PHP est assez simple mais dpends de la mthode utilise par le formulaire. Si on utilise method="get" on devra utiliser le tableau associatif $_GET en prcisant comme indice le nom du champ. Si on utilise method="post" le nom du tableau sera $_POST. Attention, la syntaxe de PHP a chang depuis la version 4.2. Auparavant, pour rcuprer la valeur d'un champ d'un formulaire envoy par la mthode HTTP GET, et dnomm id, on crivait $id. Il faut maintenant crire $_GET['id']. Il existe une option de compatibilit avec l'ancienne syntaxe (register_globals on), mais elle n'est pas active, car l'ancienne syntaxe est l'origine d'un trou de scurit grave. Si vous rcuprez un script utilisant l'ancienne syntaxe, il ne marchera pas. Voici un petit exemple pour bien comprendre : <form action="TraiteFormulaire.php" method="post"> Votre nom : <input type=text name=nom><br> Votre &acirc;ge : <input type=text name=age><br> <input type=submit name="Ok"> </form

Page 6

PHP: Personal Home Page

Lorsquon clique sur le bouton Ok de la page web contenant le formulaire prcdent, la page TraiteFormulaire.php est appele. Cette dernire contient des ordres PHP : ... Bonjour <?php echo $_POST[nom]; ?>, <p> vous avez bien <?php echo $_POST[age]; ?> ans <br> cette anne ? ... On peut aussi si on veut rcuprer les valeurs dans un tableau deux dimensions. Cest cette fonctionnalit qui est utilise pour rcuprer les valeurs d'un choix multiple. Exemple : <form action="tableau.php" method="post"> Nom : <input type="text" name="personnel[nom]"><br> Email : <input type="text" name="personnel[email]"><br> Vins prfrs : <br> <input type=checkbox name="vin[]" value="medoc">Mdoc<br> <input type=checkbox name="vin[]" value="madiran">Madiran<br> <input type=checkbox name="vin[]" value="chablis">Chablis<br> <input type=checkbox name="vin[]" value="riesling">Riesling<br> <input type="submit"> </form>

Le fichier PHP suivant fait le traitement : ... Bonjour <?php echo $_POST[personnel][nom]; ?>, <p> Votre adresse est <?php echo $_POST[personnel][email]; ?> <p> Vos vins prfrs sont : <br> <?php for($i = 0 ; $i < count($_POST[vin]); $i++) { echo $_POST[vin] [$i]; echo , <br>"; } echo "<p>"; ?> Note : la fonction count qui prend un tableau en paramtre compte le nombre de valeurs de ce tableau.

4.3. les cookies


Pour envoyer un cookie au navigateur on utilise la fonction : int setcookie (string name, string value , int expire , string path , string domain , int secure ) setcookie() dfinit un cookie qui sera envoy avec le reste des en-ttes. Les cookies doivent passer avant toute autre en-tte (c'est une restriction des cookies, pas de PHP). Cela vous impose d'appeler cette fonction avant toute balise <HTML> ou <HEAD>. Tous les arguments sauf name (nom) sont optionnels. Si seul le nom est prsent, le cookie portant ce nom sera supprim du navigateur de l'internaute. Vous pouvez aussi utiliser une chane vide comme valeur, pour ignorer un argument. Le paramtre expire est une estampille temporelle UNIX (nombre de secondes depuis le 1er janvier 1970 00:00:00 GMT). Le paramtre secure indique que le cookie doit tre uniquement transmis travers une connexion HTTPS scurise. Erreurs communes :
Les cookies ne seront accessibles qu'au chargement de la prochaine page, ou au rechargement de la page courante. Les cookies doivent tre effacs avec les mmes paramtres que ceux utiliss lors de leur cration. En PHP 3, les appels multiples setcookie() dans le mme script seront effectus dans l'ordre inverse. Si vous essayez d'effacer un cookie avant d'insrer une nouvelle valeur, vous devez placer l'insertion avant l'effacement.

PHP: Personal Home Page

Page 7

En PHP 4, les appels multiples setcookie() sont effectus dan un ordre naturel. Exemples avec setcookie() <?php setcookie("TestCookie","Valeur de test"); setcookie("TestCookie",$value, time()+3600); /* expire dans une heure */ setcookie("TestCookie",$value, time()+3600,"/~sid/",".ups-tlse.fr",1); /* cookie valable pour toutes les pages dont le chemin commence par /~sid/ sur toutes les machines serveur dont le nom finit par .ups-tlse.fr */ ?> Pour voir le rsultat, essayez le script suivant : <?php echo $_COOKIE["TestCookie"]; ?> Pour d'autres informations sur les cookies, jetez un oeil sur : http://www.netscape.com/newsref/std/cookie_spec.html.

4.4 les bases de donnes (MySQL)


PHP peut sinterfacer avec de nombreuses bases de donnes mais celle qui est la plus utilise est MySQL. Ses avantages sont : gratuit (pour les utilisations non commerciales), portabilit (Linux, Solaris, MacOsX, Windows), gestion de plusieurs utilisateurs simultans, rapidit, facilit dutilisation Nous nallons ici prsenter que les bases de lutilisation de MySQL depuis PHP pour plus de dtail se reporter la documentation en ligne sur http://www.php.net/ .

4.4.1 Connexion la base de donnes


Avant dutiliser une base de donnes il convient de se connecter MySQL et de choisir la base de donnes. Ceci est fait simplement en utilisant deux fonctions ( mysql_connect et mysql_select_db) voici un exemple dutilisation : // connexion a mysql $lien = mysql_connect("localhost", "login", "mot_de_passe"); if ($lien ==0) exit("impossible d'etablir la connexion"); // selection de la base de nom "etudiants" if(mysql_select_db("etudiants", $lien) == 0) exit("impossible de se connecter a la base etudiants"); NB : les paramtres de lappel mysql_connect sont en gnral prciss par ladministrateur du serveur web. Au CICT on peut consulter les pages suivantes : http://www.cict.fr/WWW/instructions.html, http://www.cict.fr/WWW/php.html et http://www.cict.fr/app/mysql.html

4.4.2 Interrogation dune base de donnes


Pour interroger une base de donnes on utilise typiquement linstruction select du langage SQL de la faon suivante (on suppose que la base de donnes contient une table appele etat_civil qui contient au minimum les champs nom et prenom) : // requete sur la table etat_civil $requete="select nom, prenom from etat_civil ORDER BY nom"; $result = mysql_query($requete); if($result == 0) exit("impossible d'effectuer la requete <BR>$requete"); if (mysql_num_rows($result)==0) exit("d&eacute;sol&eacute; nous n'avons aucune information"); // il y a des etudiants, on les affiche dans un tableau print("\n<TABLE>\n"); print("<TR><TH>Nom</TH><TH>Prnom</TH></TR>\n"); while($ligne = mysql_fetch_row($result)) {

Page 8

PHP: Personal Home Page

$nom = $ligne[0]; $prenom = $ligne[1]; print("\n<TR>\n"); print("\t<TD>$nom</TD>\n"); print("\t<TD>$prenom</TD>\n"); print("</TR>\n"); } print("\n</TABLE>"); NB : les rsultats de la requte sont obtenu ligne par ligne grce la fonction mysql_fetch_row et sont rangs dans un tableau une dimension dans lordre indiqu lors du select. Ici $ligne[0] contiendra donc le nom et $ligne[1] le prnom. La requte peut videmment tre beaucoup plus complexe et travailler sur plusieurs tables.

4.4.3 Modification dune base de donnes


Pour modifier une base de donnes le principe est le mme en utilisant les instructions SQL insert, update et delete. Voil trois exemples : // effacement : $requete = "delete from etudiants where nom ='$nom'"; if(mysql_query($requete) == 0) exit("impossible de supprimer la ligne"); else print("ltudiant : $nom est supprim"); // mise jour : $requete = "update etudiants set "; $requete .= " prenom='$prenom', adresse='$adresse' "; $requete .= "where nom='$nom'"; if(mysql_query($requete) == 0) exit ("impossible de modifier la ligne<BR>"); else print("ltudiant : $nom est modifi"); // insertion : $requete = "insert into etudiants (nom, prenom, adresse)"; $requete .= "values ('$nom', '$prenom', '$adresse')"; if(mysql_query($requete) == 0) exit("impossible d'ajouter la ligne"); else print("<BR> ltudiant : $nom a t ajout");

4.4.4 Dconnexion
Il ne faut pas oublier de fermer la connexion la base MySQL : if (mysql_close()==false) exit("Fermeture impossible de la base");

5. ressources web
http://fr.php.net http://www.phpinfo.net http://dev.nexen.net/docs/php/annotee/manuel_toc.php (Manuel de PHP en ligne)

PHP: Personal Home Page

Page 9

Cration et mise en place de pages HTML et PHP


- But du TP : Ecrire des pages HTML et PHP et les tester. 1. Testez le fonctionnement de PHP

Recopiez la page suivante dans le fichier ~/web/test.php <HTML> <HEAD> <TITLE>Test de PHP</TITLE> <BODY> <?php echo "<H1><center>Test de PHP</center></H1>"; echo "Si cette page s'affiche correctement, PHP fonctionne sur votre compte."; ?> </BODY> </HTML> Changez les droits d'accs : chmod o+rx ~/web/test.php Dans netscape tapez l'URL : http://marine.edu.ups-tlse.fr/~login/test.php 2. Premier programme PHP Ecrivez une page HTML php1.html contenant le formulaire suivant :
Nom : Prenom : Anne de naissance : Envoyer

Ecrivez un programme PHP qui rcupre les diffrents paramtres, calcule l'ge, vrifie qu'il est raisonnable (compris entre 1 et 120) et affiche une page de ce type : Si l'ge est correct Bonjour Pierre Dupond. Vous tes n en 1979. Nous sommes en 2000. Vous avez donc environ 21 ans. La page a t visite 10 fois depuis sa cration. Si l'ge n'est pas correct Bonjour Pierre Dupond. Vous tes n en 2000. Nous sommes en 2000. Votre ge : 0 ne me semble pas trs correct. La page a t visite 11 fois depuis sa cration.

Pour programmer cette page PHP on utilisera les fonction de gestion des fichiers pour grer le nombre de visite et la fonction date qui permet d'obtenir la date courante. Exemple : $annee = date("Y"); /* renvoie simplement l'anne actuelle*/ $date_complete = date("d/m/Y"); /* renvoie une chane de caractre de ce type : 7/12/2000 */ 3. Programmation dun carnet d'adresses Le but de cet ensemble de programmes PHP est de grer un carnet d'adresse (qui sera sauvegard dans un fichier sur votre site web personnel). La premire page (en HTML) a crire permettra de choisir entre : - l'ajout d'une entre dans le carnet - la recherche dans le carnet - l'affichage de tout le carnet Un couple de pages (une en HTML l'autre en PHP) permettra l'ajout d'une entre au carnet :

Page 10

PHP: Personal Home Page

Nom : Prnom : Adresse : Code postal et ville : Numro de tl. : Ajouter au carnet

L'entre : Nom : Dupond Prnom : Jean Adresse : 118 route de Narbonne Code postal et ville : 31062 Toulouse Tl : 05 61 55 66 11 A t ajoute au carnet d'adresse. Retourner au sommaire du carnet Page d'ajout 2

Page d'ajout 1

Un couple de pages (une en HTML l'autre en PHP) permettra la recherche d'une entre en tapant un nom : Entre trouve : Nom : Dupond Nom : Prnom : Jean Adresse : 118 route de Narbonne Rechercher dans le carnet Code postal et ville : 31062 Toulouse Tl : 05 61 55 66 11 Retourner au sommaire du carnet Page d'ajout 1 Page d'ajout 2 La dernire page (en PHP) permettra l'affichage complet du carnet. On vous propose d'organiser le fichier carnet ainsi : La La La La La La La La La La La La La La La ligne ligne ligne ligne ligne ligne ligne ligne ligne ligne ligne ligne ligne ligne ligne 1 contiendra le nom de l'entre numro 1 2 contiendra le prnom de l'entre numro 1 3 contiendra l'adresse de l'entre numro 1 4 contiendra le code postal et la ville de l'entre numro 1 5 contiendra le numro de tlphone de l'entre numro 1 6 contiendra le nom de l'entre numro 2 7 contiendra le prnom de l'entre numro 2 8 contiendra l'adresse de l'entre numro 2 9 contiendra le code postal et la ville de l'entre numro 2 10 contiendra le numro de tlphone de l'entre numro 2 N contiendra le nom de l'entre numro M N+1 contiendra le prnom de l'entre numro M N+2 contiendra l'adresse de l'entre numro M N+3 contiendra le code postal et la ville de l'entre numro M N+4 contiendra le numro de tlphone de l'entre numro M pour comparer deux chanes de caractres en PHP il suffit d'crire : if ($chaine1 == $chaine2) print("elles sont gales"); else print("elles sont diffrentes"); pour enlever les blancs et les retours chariots d'une chane de caractres (avant de les comparer par exemple) : $chaine2 = trim($chaine1); /* $chaine2 recevra la chane dbarrasse de tout blancs et retourchariots */

Note :

Javascript

Page 11

Javascript
(P. Torguet UPS) 17 Novembre 2003 v. 1.00

1. Introduction
Le langage JavaScript a t cr par la socit Netscape pour la version 2.0 de son navigateur Web. Comme PHP il sagit dun langage qui permet de crer des programmes embarqus dans des pages Web mais linverse de PHP les programmes sont ici en gnral excuts par le navigateur. On utilise beaucoup JavaScript pour crer des pages dynamiques comportant des menus, des fentres filles (les fameux pop-ups tant dcris), des permutations dimages lorsque le pointeur de la souris passe au dessus (on appelle cela des roll-over ) et pour vrifier des formulaires avant leur mission. Il existe de nombreuses versions de JavaScript (appel galement JScript par Microsfot) qui ne sont malheureusement pas compatibles entre elles. Il conviendra donc pour une utilisation professionnelle de tester les pages avec plusieurs navigateurs comme Netscape 4, Mozilla et Internet Explorer par exemple. Le langage a nanmoins t standardis en 1997 par l'European Computer Manufacturers Association (ECMA) sous le nom dECMAScript (ECMA-262). Cette version correspond la version 1.4 de JavaScript et la version 4.0 de Jscript.

2. Inclusion dans des pages HTML


Pour intgrer du JavaScript dans du code HTML il faut utiliser la balise SCRIPT : <SCRIPT language=JavaScript> < !-code JavaScript... --> </SCRIPT>

Le code compris entre <SCRIPT> et </SCRIPT> n'est pas affich, il est interprt par le navigateur. Comme il existe encore des navigateurs qui ignorent les scripts, il est recommand de mettre le contenu du script sous forme de commentaire HTML :
<SCRIPT language=JavaScript> <!-code JavaScript //--> </SCRIPT>

Ainsi le script sera simplement ignor au lieu de placer nimporte quoi sur la page.

Position du code dans un fichier HTML


dans l'en-tte : pour dfinir des fonctions ds le chargement ; entre l'en-tte et le corps ; dans le corps : pour grer les vnements.

Insertion de code dans une URL d'une balise HTML


Le code se met sous la forme : javascript:code Exemple : pour excuter du code JavaScript il est possible d'utiliser : <A href="JavaScript:code">texte</A> Quand on clique sur le texte le code s'excute (le plus souvent c'est un appel de fonction).

Page 12

Javascript

NB : dans href, si on crit "JavaScript:void(0)" cela empche le navigateur de faire un chargement quand on clique sur le lien.

Code JavaScript pour les vnements dans les balises


On peut insrer du code JavaScript pour indiquer les actions effectuer en raction un vnement provoqu par l'utilisateur (souvent ce code insr se contente d'appeler une fonction dclare plus haut dans le document au sein d'un lment SCRIPT). Pour ragir un vnement provoqu par le client : <BALISE onEvenement="code"> Attributs d'vnements existants nom onAbort onBlur onFocus onClick onChange onDblClick onError onKeyDown onKeyPress onKeyUp onLoad onMouseUp onMouseOut onReset onSubmit onSelect onUnload perte du focus attribution du focus clic sur un objet changement de champ de saisie double clic touche enfonce l'utilisateur a appuy sur une touche touche relche chargement le bouton de la souris est relch la souris vient de quitter une zone annulation des donnes saisies soumission du formulaire slection d'un champ de texte dchargement d'un document vnement interruption de chargement s'applique image champs de saisie des formulaires ou une fentre button, checkbox, radio, reset, submit, lien retourne false pour annuler l'action fileupload, password, select, text, textarea lien, image, bouton(JS1.2)

erreur JS ou de chargement d'une image image, fentre document, image, lien, text retourne false pour annuler image, window document, lien, image, button retourne false pour annuler

onMouseDown un bouton de la souris est enfonc onMouseMove dplacement de la souris onMouseOver la souris entre sur une zone

lien, image, layer retourne true pour empcher l'affichage de l'URL formulaire ; retourne false pour annuler, ex : <FORM action="fich.php3" onSubmit="return Verif()"> champs de saisie image, fentre

3. Syntaxe du langage
3.1 Oprateurs et expressions
Les types de donnes standards en JavaScript sont : number (entiers et rels reprsents par des valeurs virgule flottante avec ventuellement une partie exposant : 3.4e12) string (chanes de caractres) boolean (boolens valeurs true ou false) Array (tableaux) object (objets cf. la programmation par objet) La dclaration des variables nest pas obligatoire (bien que fortement conseille). Elle est ralise de la faon suivante : var i = 10 ; var j = 3.4e12; var s = "chaine";

Javascript

Page 13

3.1.1. Oprateurs arithmtiques


Quelques exemples valent souvent mieux quun long discours... a + b Addition a - b Soustraction a * b Multiplication a / b Division a % b Modulo Somme de a et b. Reste de la diffrence de b et a. Produit de a par b. Dividende de a par b. Reste de la division entire de a par b.

3.1.2. Oprateurs sur les chanes


Il nexiste quun seul oprateur sur les chanes, cest loprateur de concatnation +. a = "Hello "; b = a + "World!"; // b contient "Hello World!" Il est noter que vous pouvez spcifier une chane en lencadrant entre des simples ou des doubles quotes (guillemets simples ou doubles).

3.1.3. Oprateurs binaires


Il sagit des oprateurs binaires dits bit bit, et non pas des oprateurs logiques boolens. a&b Et Les bits qui sont 1 dans a ET dans b sont mis 1. a|b Ou Les bits qui sont 1 dans a OU dans b sont mis 1. ~a Non Les bits sont inverss.

3.1.4. Oprateurs Logiques


!a a && b a || b Non Et Ou Rsultat vrai si a est faux, et rciproquement Rsultat vrai si a ET b sont vrais Rsultat vrai si a OU b est vrai (ou les deux)

3.1.5. Oprateurs de Comparaison


Encore du classique. Sans surprise pour les habitus de la syntaxe C. a == b Egal Rsultat vrai si a est gal b a != b Diffrent Rsultat vrai si a est diffrent de b a < b Infrieur Rsultat vrai si a est strictement infrieur b a > b Suprieur Rsultat vrai si a est strictement suprieur b a <= b Inf ou gal Rsultat vrai si a est infrieur ou gal b a >= b Sup ou gal Rsultat vrai si a est suprieur ou gal b

3.2. structures de contrle


Les structures de contrle if, Ifelse, ainsi que les instructions de boucle dowhile, for, break, continue et switch sont disponibles en JavaScript et sont identiques au C (ici aussi il ne faut pas oublier les break lors des switch !). Exemple de for : for(i=0 ; i<5; i++) { document.writeln(i); }

3.4. fonctions
En JavaScript on peut dfinir des fonctions un peu comme en C mais on ne prcisera pas le type des arguments ou de la valeur retourne. Les passages de paramtres se font par valeur (les modifications ralises dans la fonction ne sont pas effective en dehors de celle-ci sauf pour les objets et les tableaux cf. plus loin) function nom_fonction(arg1,...,argN){ instruction1; ...

Page 14

Javascript

instructionM; return val; // optionnel }

Appel :
variable = nom_fonction(arg1, ..., argN);

3.5 Javascript et la programmation oriente objet


Le langage JavaScript est un langage orient objet. Ce concept sera prsent en dtail plus tard dans votre cursus. Nanmoins nous le prsenterons ici trs simplement. Les objets peuvent tre vus simplement comme une collection de variables (appeles ici attributs ou proprits) et de fonctions (appeles ici mthodes) lis entre eux par un nom qui sutilise comme une variable et quon appelle une rfrence. Pour bien comprendre le concept, prenons un exemple : la fentre du navigateur qui excute le script. Cet objet informatique est dfini par une variable rfrence nomme window. Pour accder aux proprits de cet objet on crira (ici pour connatre la hauteur de la fentre) : hauteur = window.innerHeight; De mme pour utiliser une mthode de lobjet on crira (ici pour redimensionner la fentre ) : window.resizeTo(500, 500); On peut aussi affecter des valeurs aux proprits (ainsi pour redimensionner la fentre on peut aussi crire) : window.innerHeight = 500; window.innerWidth = 500; Enfin, on peut crer de nouveaux objets en utilisant le mot cl new. Par exemple pour crer une image on crira : var mon_image = new Image(); Image() est une mthode un peu particulire quon appelle un constructeur. Les constructeurs peuvent avoir des paramtres. Enfin, il peut y avoir plusieurs paramtres pour un mme type dobjet. Pour viter de rcrire le nom dun objet on peut utiliser le mot cl with. Exemple : with (window) { innerHeight = 500; innerWidth = 500; }

3.6 Tableaux
Les tableaux en JavaScript sont en fait des objets un peu particuliers. On peut les crer de deux faons diffrentes : En utilisant les constructeurs Array : var mon_tableau = new Array(); var mon_tableau = new Array(taille); var mon_tableau = new Array(el1, el2, ..., elN); En utilisant une construction spcifique (depuis JavaScript 1.2) : var mon_tableau = [el1, el2, ..., elN] Un tableau peut comme en PHP contenir des lments de types diffrents : var tab = new Array(3, 'chaine', 4.5); var tab = [3, 'chaine', 4.5];

Javascript

Page 15

3.6.1 Proprits
mon_tableau.length -> taille du tableau i = tab.length;

3.6.2 Accs aux lments


mon_tableau[0] mon_tableau[1] ... mon_tableau[N-1] NB : pour le parcours du tableau on peut utiliser une boucle for un peu spciale : for (i in mon_tableau) { document.writeln(mon_tableau[i]); }

3.6.3 Mthodes
join(separateur) pop() push(val,...) reverse() shift() slice(deb, fin) sort() toString() unshift(val,...) concatne les cases du tableau avec le separateur (JavaScript 1.1, ECMA) dpile et retourne le dernier lment du tableau (Navigator 4) ajoute des lments au tableau (Navigator 4) renverse le tableau (JavaScript 1.1, ECMA) supprime et retourne le 1er lment (Navigator 4) retourne une portion du tableau (JavaScript 1.2) tri des lments (JavaScript 1.1, ECMA) conversion du tableau en chane (JavaScript 1.1, ECMA) insre des lments (Navigator 4)

splice(deb, nbel, val, ...) retire des lments du tableau (Navigator 4)

3.7 Interaction avec le navigateur Web


Linteraction avec le navigateur passe par lobjet window et ses sous-objets. Il existe un objet window pour chaque zone du navigateur (fentre ou frame).

3.7.1 Proprits de window


closed document frames[] history length location name navigator opener parent screen status pour savoir si la fentre a t ferme ou non accs toutes les informations de la zone tableau d'objets pour les frames de la zone window.frames.length window.frames[num] pour naviguer nombre de cadres dans la fentre informations sur l'URL de la zone nom de la zone informations sur le navigateur utilis fentre partir de laquelle a t cre la zone document contenant <FRAME> associ au frame proprits de lcran qui affiche le navigateur texte afficher dans la barre d'tat

defaultStatus texte afficher par dfaut dans la barre d'tat en bas

Page 16

Javascript

Document
Note : on peut utiliser directement document au lieu de window.document. Exemple : document.writeln("Hello World !") ; Proprits de window.document bgColor fgColor alinkColor linkColor vlinkColor couleur de fond couleur du texte par dfaut couleur des liens activs couleur des liens non visits couleur des liens visits

cible d'un lien hypertexte anchors[num] window.document.anchors.length = nombre d'ancres window.document.anchors[i].name = nom de l'ancre cookie forms[num] cookies du document formulaires du document tableau pour les liens du document links[] lastModified title URL window.document.links.length attributs : hash, host, hostname, href, pathname, port, protocol, search, target (c.f. proprits de location) date de modification du document titre du document URL du document Mthodes de document write(paramtre1, ..., paramtreN) : insertion dynamique dans le document. writeln(paramtre1, ..., paramtreN) : idem avec retour la ligne open() : vide le document et en cre un nouveau close() : affichage de tout ce qui a t crit avec write() ou writeln()

images[num] images du document

History
Proprits de history current : URL du document courant length : nombre d'lments dans l'historique next : URL suivante dans l'historique previous : URL prcdente dans l'historique Mthodes de history back() pour simuler lappui sur le bouton back go(+/-n) effectuer un retour ou une avance dans l'historique de +/- n pages forward() pour simuler lappui sur le bouton forward Exemples : <INPUT type="button" value="back" onClick="window.history.back()"> <INPUT type="button" value="back2" onClick="window.history.go(-2)"> <INPUT type="button" value="forward" onClick="window.history.forward()">

Location
Proprits de location href : totalit de l'URL hash : partie ancre de l'URL (aprs #) host : nom du serveur et port hostname : adresse IP ou nom pathname : chane aprs le nom du script et avant '?'

Javascript

Page 17

port : numro de port protocol : nom du protocole (http) search partie requte (aprs '?') Mthodes de location reload() : pour recharger le document replace(URL) : pour charger le document situ l'adresse URL <INPUT type="button" value="recharger" onClick="window.location.reload()"> <INPUT type="button" value="remplacer" onClick="window.location.replace('../Navigator.html')">

Screen
proprits de l'objet Screen height width hauteur de l'cran en pixels largeur de l'cran en pixels

availHeight hauteur moins les barres de menu ou de tches availWidth largeur disponible colorDepth nombre de bits pour coder un pixel dans le navigateur

Navigator
proprits de l'objet Navigator appName appVersion language platform nom d'application du navigateur (Netscape, Internet Explorer) plate-forme et version du navigateur (4.5 [fr] (Macintosh; I; PPC)) parseFloat(navigator.appVersion) ->4.5 langage du navigateur (fr, en) sous Navigator 4 systme d'exploitation (MacPPC)

Pour accder au nom d'application du navigateur il suffit donc d'crire : navigator.appName. 3.7.2 Mthodes de window
open(arguments) ouvrir une nouvelle fentre close() alert(texte) prompt(txt, val) confirm(texte) back() find() forward() home() stop() moveBy(x,y) moveTo(x,y) resizeBy(l,h) resizeTo(l,h) scrollBy(x,y) scrollTo(x,y) fermer une fentre ouvre une fentre d'alerte contenant le texte ouvre une fentre avec un message txt et un champ de texte contenant au dpart la valeur val, retourne le texte tap par lutilisateur la place de val fentre de confirmation qui retourne un boolen bouton back du navigateur recherche dans le document bouton forward du navigateur bouton accueil du navigateur bouton stop du navigateur dplace la fentre (zone, couche) de x pixels horizontaux et y verticaux dplace le coin gauche en (x,y) pour retrcir ou agrandir la fentre largeur et hauteur de la fentre agrandir ou rduire dplacement horizontal et vertical du document dans la fentre (ascenseurs) dplacement du coin x,y du document en haut de la fentre

La mthode open(URL, nom, options) prend comme paramtres :


URL : URL du document afficher dans la fentre (optionnel) nom : nom de la fentre (target pour les autres documents HTML)

Page 18

Javascript

option o o o o o o o o o

: height : hauteur initiale width : largeur initiale left : distance bord gauche fentre - bord gauche cran location = yes / no : barre de localisation menubar = yes / no : barre de menus resizable = yes / no : autorisation de redimensionnement scrollbars = yes / no : barres de dfilement status = yes / no : barre de statut toolbars = yes / no : barre d'outils

Pour plus dinformations vous pouvez consulter la page suivante : http://devedge.netscape.com/library/manuals/2000/javascript/1.3/reference/

3.7.3 Interaction avec les formulaires Accs aux textes contenus dans les champs
Les lments de formulaire concerns sont : botes de saisie de texte (INPUT type="text") saisie de textes sur plusieurs lignes (TEXTAREA) botes de saisie masques (INPUT type="password") botes de soumission de fichier (INPUT type="file") donnes masques (INPUT type="hidden")

window.document.nom_formulaire.nom_champ.value

Lecture

criture
window.document.nom_formulaire.nom_champ.value = texte;

NB : le champ contiendra le texte affect l'lment, ce texte remplacera celui qui tait affich. Lire le texte par dfaut
Lorsqu'on dfinit les lments de formulaires textuels il est possible de donner un texte par dfaut qui s'affiche lorsque le formulaire est charg (par exemple un nombre de personnes 4 ou une adresse n'oubliez pas de donner l'tage).

Pour obtenir dans un script le texte qui est affich au chargement, il suffit d'crire :
window.document.nom_formulaire.nom_champ.defaultValue

Accs aux choix cochs par le client


Les lments de formulaire concerns sont : cases cocher (INPUT type="checkbox") boutons radio (INPUT type="radio")

Recherche des choix cochs


window.document.nom_formulaire.nom_champ[num_case].checked (retourne une valeur true/false) window.document.nom_formulaire.nom_champ[num_case].value (retourne le nom donn la bote)

Cocher ou dcocher un choix


window.document.nom_formulaire.nom_champ[num_case].checked = true/false window.document.nom_formulaire.nom_champ[num_case].defaultChecked

Obtenir le choix coch par dfaut au chargement

Accs aux choix dans les listes de choix


L'lment de formulaire concern est SELECT

Javascript

Page 19

Lire les choix


window.document.nom_formulaire.nom_champ.options[num_case].selected (retourne une valeur true/false) window.document.nom_formulaire.nom_champ.options[num_case].value (retourne le nom donn au choix) window.document.nom_formulaire.nom_champ.length (retourne le nombre de choix possibles dans la liste) window.document.nom_formulaire.nom_champ.options[num_case].text (retourne le texte HTML associ)

NB : pour les listes choix unique il est possible d'obtenir directement quel est le choix slectionn avec :
window.document.nom_formulaire.nom_champ.selectedIndex

Modifier les choix


window.document.nom_formulaire.nom_champ.options[num_case].selected = true/false Dans l'exemple ci-dessous nous supposons qu'on peut choisir plusieurs plats (attribut multiple dans SELECT)

Accs aux textes sur les boutons


Les lments de formulaire concerns sont : boutons de soumission (INPUT type="submit") boutons de soumission avec image(INPUT type="image") boutons d'annulation (INPUT type="reset") boutons simples (INPUT type="button")

window.document.nom_formulaire.nom_boutton.value

Evnements dans un formulaire


Lorsque le client clique dans le formulaire, modifie des champs, coche des boutons radio..., il est possible d'excuter du code JavaScript. Ce code sert gnralement : vrifier la validit des donnes entres (pas de lettres dans un numro de fax) donner des informations (affichage d'un message dans la barre d'tat lorsqu'on clique dans un champ de formulaire)

Les vnements se placent dans l'lment de formulaire comme des attributs, ils sont de la forme nom_evenement = "code JavaScript", le code JavaScript tant la plupart du temps un appel une fonction JavaScript dfinie plus haut dans la page. ex :
<INPUT type="button" value="Informations" name="binfo" onClick="Info()"> Les vnements suivants sont utiles : onClick (clic sur un lment). Balises concernes : o cases cocher (INPUT type="checkbox") o boutons radio (INPUT type="radio") o boutons de soumission (INPUT type="submit") (on devra utiliser une instruction JavaScript return pour indiquer si la soumission doit tre ralise) o boutons de soumission avec image (INPUT type="image") o boutons d'annulation (INPUT type="reset") o boutons simples (INPUT type="button") onChange (modification dans l'lment). Balises concernes : o botes de saisie de texte (INPUT type="text") o saisie de textes sur plusieurs lignes (TEXTAREA) o botes de saisie masques (INPUT type="password") o botes de soumission de fichier (INPUT type="file") o listes (SELECT) onFocus, onBlur (attribution, perte du focus). Balises concernes : o botes de saisie de texte (INPUT type="text")

Page 20

Javascript

o saisie de textes sur plusieurs lignes (TEXTAREA) o botes de saisie masques (INPUT type="password") o botes de soumission de fichier (INPUT type="file") o listes (SELECT) onSelect (slection dans un champ). Balises concernes : o botes de saisie de texte (INPUT type="text") o saisie de textes sur plusieurs lignes (TEXTAREA) o botes de saisie masques (INPUT type="password") o botes de soumission de fichier (INPUT type="file") onReset, onSubmit. Balise concerne : FORM Lorsque le formulaire est soumis en appuyant sur le bouton de soumission il est possible d'appeler un vnement onSubmit (pour vrifier par exemple la validit des donnes avant d'envoyer le formulaire ou pour demander la confirmation de la soumission). Le script devra renvoyer soit true soit false (avec une instruction JavaScript return) pour indiquer si on doit soumettre ou non le formulaire. L'vnement reset est appel lorsqu'on a cliqu sur le bouton annuler.

Quelques mthodes sont aussi disponibles


nom blur() click() rle enlve le focus d'un champ du formulaire simule un clic de souris sur le champ du formulaire

focus() attribue le focus un champ du formulaire select() slectionne le contenu d'un champ du formulaire Exemple : window.document.nom_form.nom_champ.focus()

Il existe galement les mthodes submit() et reset() sur le formulaire. Un exemple complet
Soit le formulaire suivant : <form name=commande action="traitement.php" method="post" onSubmit=return Verif();> Nom : <input type="text" name="nom"><br> Email : <input type="text" name="email"><br> Vin choisi : <br> <input type=radio name="vin" value="medoc">Mdoc<br> <input type=radio name="vin" value="madiran">Madiran<br> <input type=radio name="vin" value="chablis">Chablis<br> <input type=radio name="vin" value="riesling">Riesling<br> Quantit : <input type=text name="quantite" onFocus="window.status='Entrez le nombre de caisses'"> <br> <input type="submit" onClick="return Confirmer()"> </form> Voici les fonctions JavaScript quon peut placer par exemple dans lentte du document : <SCRIPT language="JavaScript"> <!-// fonction qui vrifie si chaine est une chane compose de chiffres // elle affiche le message derreur message_d_erreur dans le cas contraire function VerifNb(chaine, message_d_erreur) { var chiffre = true; // si la chane est vide elle nest pas correcte // les chanes comme les tableaux ont la proprit length if (chaine.length == 0) { window.alert(message_d_erreur); return false; } // si on trouve un caractre non compris entre 0 et 9 cest incorrect for(i=0 ; i < chaine.length; i++)

Javascript

Page 21

} // fonction qui vrifie le formulaire function Verif() { with(window.document.commande) // pour viter de rpter le nom du formulaire { // on vrifie que le nom et ladresse e-mail ont t saisis if(nom.value.length == 0) { alert("veuillez entrer votre nom"); return false; } if(email.value.length == 0) { alert("veuillez entrer une adresse email"); return false; } // on regarde si un vin a t choisi var choix = false; for(i=0; i<vin.length; i++) { if(vin[i].checked) choix = true; } if(!choix) { alert("veuillez choisir un vin"); return false; } // on vrifie la quantit avec la fonction ci-dessus if(!VerifNb(quantite.value, "veuillez crire le nombre de caisses en chiffres")) { // si ce nest pas bon on slectionne le contenu du champ quantit // pour que lutilisateur nest plus qua corriger quantite.focus(); quantite.select(); return false; } } // si on renvoie true le formulaire sera soumis return true; } // fonction qui demande lutilisateur sil veut vraiment soumettre le form function Confirmer() { return window.confirm("Voulez-vous vraiment soumettre ?"); } //--> </SCRIPT>

// la mthode charAt permet de rcuprer le I-me caractre if(chaine.charAt(i)<'0'||chaine.charAt(i)>'9') { chiffre=false; } if(!chiffre) { window.alert(message_d_erreur); return false; } else { return true; }

4. ressources web
http://devedge.netscape.com/library/manuals/2000/javascript/1.3/reference/ http://magali.contensin.free.fr/html/InternetLicPro.html (cours sur le web dont est tir celui-ci) http://www.editeurjavascript.com/cours/index.php

Page 22

Javascript

5. exercice raliser
Modifiez le carnet dadresse de faon vous assurer que les entres ajoutes sont correctes.

Sujets dexamen

Page 23

SUJETS DEXAMEN
Partie I : Programme CGI en langage C
A lheure de lEURO On veut raliser une application Web qui assure la conversion de montants exprims en francs vers leurs quivalents en euros et vice versa (On rappelle que 1 euro = 6,55957 Francs). Ecrivez le code HTML dune page contenant un formulaire utilis pour taper le montant en francs ou en euro, choisir le type de conversion et envoyer les donnes. Ecrivez un programme CGI qui convertit le montant et qui renvoie une page avec le montant converti et un lien sur la page prcdente. (CETTE PARTIE EST REPETEE DANS TOUS LES SUJETS) Fonctions utiles : int atoi(char* ch) : convertit une chane de caractres en entier. Exemple : int i ; i = atoi("100") ; double atof(char* ch) : convertit une chane de caractres en double (flottant double prcision). Exemple : double d ; d = atof("6.55957") ; LIST* cgi_input_parse() : traite les donnes provenant du formulaire. Exemple : LIST* tete ; tete = cgi_input_parse() ; char* find_val(LIST* t, char* var) : permet de rcuprer la valeur dune des variables du formulaire. Exemple : char* valeur ; valeur = find_val(tete, "Nom") ; void mime_header(char* type) : permet de prciser le type de fichier renvoy par le programme CGI. Exemple : mime_header("text/html") ; void html_begin(char* titre, char* coul) : gnre le dbut de la page HTML. Exemple : html_begin("Reponse", NULL) ; void html_end() : gnre la fin de la page HTML.

Partie II : Le langage PHP


On veut raliser une application Web qui permet de traduire un mot du franais vers langlais et vice versa. Ecrivez le code HTML dune page contenant un formulaire utilis pour taper le mot en franais ou en anglais, choisir le type de traduction et envoyer les donnes. Ecrivez une page PHP qui traduit le mot et qui renvoie une page avec le mot traduit et un lien sur la page prcdente. On suppose que lon dispose dun fichier traduction.txt contenant 2xN lignes ainsi organises : 1er mot franais 1er mot anglais 2me mot franais 2me mot anglais Nme mot franais Nme mot anglais (CETTE PARTIE EST REPETEE DANS TOUS LES SUJETS) Fonctions utiles : fopen : permet d'ouvrir un fichier en lecture, criture ou ajout en fin de fichier. Exemple : $fich = fopen("fich.txt", "r"); /* ouvre un fichier en lecture */ fgets : permet de lire une ligne de caractres dans un fichier (ouvert en lecture). Exemple : $chaine = fgets($fich, 1024); /* lit au maximum 1024 caractres et les place dans la chane $chaine */ feof : permet de savoir si on est arriv la fin du fichier. Exemple : if (feof($fich)) print("fin du fichier atteinte"); fclose : ferme un fichier. Exemple : fclose($fich); /* ferme le fichier */

Page 24

Sujets dexamen

trim : enlve les blancs et les retours chariots d'une chane de caractres (avant de comparer des chanes par exemple) Exemple : $chaine2 = trim($chaine1); /* $chaine2 recevra la chane dbarrasse de tout blanc et retour chariot */

Partie I : Programme CGI en langage C Calcul dpargne On veut raliser une application Web qui calcule, partir dun montant, dun taux dintrt et dune dure, la somme totale obtenue la fin dun placement intrt compos. 1) Ecrivez le code HTML dune page contenant un formulaire utilis pour taper le montant, le taux dintrt, la dure et envoyer ces donnes au serveur. 2) Ecrivez un programme CGI qui calcule la somme totale et la renvoie au navigateur. Formules utiles :

un placement intrts compos est ractualis chaque anne : les intrts portent sur le capital augment des intrts de l'anne coule (valeur acquise). Ainsi, la valeur acquise au bout de : 1 anne : 2 annes : 3 annes : ... n annes : C + t% * C C(1 + t%) + t% * C(1 + t%) C(1 + t%)2+ t% * C(1 + t%)2 ... C(1 + t%)n-1 + t% * C(1 + t%)n-1 = C(1 + t%) = C(1 + t%)2 = C(1 + t%)3 ... = C(1 + t%)n

Fonctions utiles : - double pow(double x, double y) : calcule le rsultat de xy Exemple : double d ; d = pow(3, 2) ; /* d est gal 9 */
Partie II : Le langage PHP

Vidothque On veut raliser une application Web qui permet de grer une vidothque. 3) Ecrivez le code HTML dune page contenant un formulaire utilis pour ajouter une vido la vidothque. Une vido est dfinie par : un nom, un type (SF, western, humour) et un numro. 4) Ecrivez le code PHP qui ajoute la vido la vidothque. 5) Ecrivez le code HTML dune page contenant un formulaire utilis pour chercher des vidos dans la vidothque partir du type de la vido. 6) Ecrivez le code PHP qui cherche les vidos dans la vidothque NB : il faut afficher tous les films du type choisi.

Sujets dexamen

Page 25

On se propose de stocker la vidothque dans un fichier texte nomm videos.txt contenant 3xN lignes ainsi organises : Nom de la 1re vido Type de la 1re vido Numro de la 1re vido Nom de la 2me vido Type de la 2me vido Numro de la 2me vido Nom de la Nme vido Type de la Nme vido Numro de la Nme vido Fonctions utiles :
Partie I : Programme CGI en langage C On veut raliser une application Web qui calcule les rsultats pour X variant de -10 10 (par pas de 0.5) dune quation du second degr (de la forme Y = aX + bX + c). Ecrivez le code HTML dune page contenant un formulaire utilis pour taper les coefficients a,b et c de lquation. Ecrivez un programme CGI qui calcule les diffrentes valeurs et les affiche (si possible dans un tableau). Fonctions utiles : Partie II : Gestion de notes de modules en PHP On veut raliser une application Web qui permet de grer les notes des diffrents modules dun groupe dtudiant : Ecrivez le code HTML dune page contenant un formulaire utilis pour ajouter la note dun module pour un tudiant donn. Les paramtres saisir sont : nom, prnom, nom du module, note du module. Ecrivez le code PHP qui ajoute linformation au fichier notes.txt (voir ci-dessous le format du fichier). On se propose de stocker les notes dans un fichier texte nomm notes.txt contenant 4xN lignes ainsi organises : Nom Prnom Nom module Note Nom Prnom Nom module Note Nom Prnom Nom module Note 7) Ecrivez le code HTML dune page contenant un formulaire utilis pour calculer la moyenne dun tudiant. Les informations saisir sont : nom, prnom. 8) Ecrivez le code PHP qui calcule la moyenne et laffiche. NB : un tudiant a plusieurs notes, une par module et il y a donc plusieurs groupes de 4 lignes pour un mme tudiant

Page 26

Sujets dexamen

Exemple de fichier et de calcul de moyenne : Dupond Jean Informatique 14 Durant Michel Informatique 9 Dupond Jean Mathmatiques 10 Durant Michel Mathmatiques 11 Dupond Jean : moyenne = 12, Durant Michel : moyenne = 10 Fonctions utiles :