IUT de Villetaneuse

TP2 : PHP (Corrigé)
Exercice 1 : Premiers pas en PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

Voici un exemple de code PHP.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
< title > <?php echo ’Premiers pas en PHP’; ?> </title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1> Mes premiers pas en PHP </h1>
<?php $temps=2; echo ’<p> Je débute depuis ’ ; echo $temps; echo ’ heures... </p>’; ?>
<p> Mais cela a l’air intéressant <?php echo ’!’ ?> </p>
<?php echo ’
<h2> Vive le PHP </h2>
<p> Les pages vont pouvoir être dynamiques! </p>
’; ?>
<p> Encore quelques paragraphes </p>
echo ’<p> Avant dernier paragraphe </p>’;
<p> Voilà, c’est terminé! </p>
</body>
</html>


Répondre aux questions suivantes :

1. Donner dans ce fichier les parties correspondant à du code PHP et à du code XHTML.
2. Si ce fichier s’appelle exo1.php, et s’il est stocké sur le site Web www.exemple.org dans le
répertoire PremierTP, comment "exécuter" ce fichier ? Que donne son exécution ? Ceci est-il
valide ? Pourquoi ? Corriger alors le problème.
3. Remplacer les trois instructions echo de la ligne 10 par une seule.
Correction :
1. XHMTL : lignes 1-4, balises ouvrantes et fermantes title de la ligne 5, lignes 6-9, début et fin de la ligne
11, lignes 16-20. Le reste est du PHP.
2. Avec un navigateur, taper l’url http://www.exemple.org/PremierTP/exo1.php. L’interprétation du code PHP
produit du code XHTML. Le résultat de l’interprétation de ce code donne
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
< title > Premiers pas en PHP </title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1> Mes premiers pas en PHP </h1>
<p> Je débute depuis 2 heures... </p><p> Mais cela a l’air intéressant ! </p>
<h2> Vive le PHP </h2>
<p> Les pages vont pouvoir être dynamiques! </p>
<p> Encore quelques paragraphes </p>
echo ’<p> Avant dernier paragraphe </p>’;
<p> Voilà, c’est terminé! </p>

Mathieu LACROIX

� �
�76 �

Introduction Web, 1ère année

les carrés des nombres de 1 à 30 selon le format : • 12 = 1 • 22 = 4 . le corps du document du reste. il faut ajouter <?php au début de la ligne 17 et ?> à la fin de cette même ligne. sous forme de liste non ordonnée. Remarque : Pour mettre du texte en exposant en XHTML...) qui n’est contenue dans aucune balise de type block....w3. les parties d’un site Web qui ne bougent pas et sont présentes dans toutes les pages Web du site peuvent être écrites une seule fois.Département informatique 16 17 </body> </html> � Le code XHTML généré n’est pas valide car il contient du texte (echo ’ et ’. dans le fichier précédent. Pour corriger cela.dtd"> <html xmlns="http://www. décomposition en parties logiques. c’est terminé! </p> <?php require(’fin.php’). </p><p> Mais cela a l’air intéressant ! </p> <h2> Vive le PHP </h2> <p> Les pages vont pouvoir être dynamiques! </p> <p> Encore quelques paragraphes </p> echo ’<p> Avant dernier paragraphe </p>’. 1ère année � � �77 � Mathieu LACROIX � . ’ heures. Utiliser l’inclusion de fichiers pour séparer. ?> <h1> Mes premiers pas en PHP </h1> <p> Je débute depuis 2 heures..php’).0 Strict//EN" "http://www. 3. � Exercice 3 : Affichage des carrés de tous les nombres entre 1 et 30* Créer une page PHP permettant d’afficher. ?> � Intérêts : clarification du code. il est possible d’utiliser la balise sup.php : 1 2 3 4 5 6 7 8 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1. <p> Voilà. </p>’.php : 1 2 </body> </html> � � � � Fichier exo2.org/1999/xhtml" xml:lang="en" lang="en"> <head> < title > Premiers pas en PHP </title> <meta http-equiv="Content-Type" content="text/html. Quel est l’intérêt d’une telle décomposition ? Correction : � � � � Fichier debut. Introduction Web. • 302 = 900 Utiliser d’abord l’instruction echo avec des apostrophes puis avec des guillemets.org/TR/xhtml1/DTD/xhtml1-strict. echo ’<p> Je débute depuis ’.php : 1 2 3 4 5 6 7 8 9 <?php require(’debut. charset=UTF-8" /> </head> <body> � � Fichier fin. Ceci permet alors de décomposer un code XHTML ou PHP en plusieurs parties logiques et d’insérer ensuite ces différentes parties dans un fichier PHP.w3. � � Exercice 2 : Inclusion d’en-tête et pied de page Le langage PHP permet d’inclure des fichiers dans d’autres. $temps .

. $i++) echo ’<li>’ . $i*$i . ’<sup>2 </sup> = ’. chCarre($i) .3 – Table de multiplication L’opérateur modulo (symbole %) permet de donner le reste de la division entière. $i < 31 . Mathieu LACROIX � � �78 � Introduction Web.php’).php’). "</li>\n". ’<sup> 2 </sup> = ’ . ?> � � � � Instruction echo avec des guillemets : echo "<li> $i <sup> 2 </sup> =". ?> <h1> Suite de carrés </h1> <ul> <?php for ($i = 1. Figure 3. } 6 7 8 9 for ($i = 1. Utiliser cette fonction pour produire la même page Web. $i . $i < 31 .IUT de Villetaneuse 1 2 3 4 5 6 7 8 9 Créer ensuite une fonction prenant en paramètre un nombre n et retournant la chaîne de caractères n2 = m. Pour déterminer si une ligne est paire ou impaire./Exo2/fin. $i * $i . $i++) echo ’<li>’ . 1 2 <?php 3 4 5 function chCarre($nb) { return $nb .. "\n". $nb * $nb . ?> � � � Exercice 4 : Table de multiplication* Créer un script PHP permettant d’afficher la table de multiplication donnée par la figure 3. ?> </ul> <?php require(’. il suffit alors de regarder la valeur du numéro de ligne modulo 2. 1ère année . Correction : � � <?php require(’.3.. "</li>\n"./Exo2/debut. ’</li>’.

if(($ligne!=1) and ($ligne==$col)) echo ’</strong>’.$col++) { if($ligne==1 || $col==1) $cellule =’th’. } 5 6 7 th. } 23 24 25 .impair { 21 22 background-color : #BEA58E. text . echo ’<tr class="’. for($col=1. } echo "</tr>\n". if($ligne!=1 || $col!=1) echo $ligne *$col. if(($ligne!=1) and ($ligne==$col)) echo ’<strong>’. for($ligne=1.$col<$n. else $class =’pair’. } ?> </table> � � � � CSS : 1 2 table { 3 4 border. echo "<$cellule>". } 18 19 20 . 1ère année � � �79 � Mathieu LACROIX . pair { Introduction Web. height : 40px. width : 40px. echo "</$cellule>".Département informatique 1 2 < table > <?php 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 � Correction : � $n=10. $class.$ligne++) { if($ligne%2) $class =’impair’.collapse : collapse . ’">’.$ligne<$n. } 13 14 15 th { 16 17 background-color : #D48030. else $cellule =’td’.align : center.td { 8 9 10 11 12 border : 1px solid black.

" </td> </tr>\n". � Question 6. Quelles sont alors les clés ? Parcourir ensuite le tableau pour afficher les mois de l’année sous forme de liste ordonnée. ’ville’ => ’Paris’). � Exercice 6 : Tableau à deux dimensions 1 2 3 4 5 6 7 8 � � � On définit le tableau suivant : $personnes = array( ’mdupond’=> array(’prenom’ => ’Martin’. 7. ’février’ => 28. � Les clés sont les noms des mois de l’année et les valeurs les nombres de jours par mois. ’nom’ => ’Tonge’. ’age’ => 20. ’jm’=> array(’prenom’ => ’Jean’. ’mai’ => 31. $nbJ . 4 5 6 7 8 9 echo ’<ol>’..11. $m .1 : Quelles sont les clés du tableau $personnes et leur type ? De quel type sont les valeurs de ce tableau ? Quelle est la valeur associée à ’toto’ ? Question 6.’juin’. $m .IUT de Villetaneuse 26 27 � background-color : #EBD9C8. ’décembre’ => 31).. ’arn’=> array (’prenom’ => ’Arnaud’. Correction : � � <?php $mois = array(’janvier’.’ville’=>’Villetaneuse’) ). 4 5 6 7 8 echo ’<table> <tr> <th> Mois </th> <th> Nombre de jours </th> </tr>’. ’nom’=>’Ailta’.2 : Comment accéder à la valeur 33 dans le tableau ? À la valeur ’Epinay’ ? Au tableau contenant les valeurs ’Damien’. ’ </td><td> ’. ’dask’ => array(’prenom’=>’Damien’.’octobre’. ’nom’ => ’Dupond’. 1ère année � . ?> � Les clés sont les entiers 0. ’nom’ => ’Dupond’. echo ’</table>’. le nombre de jours de chaque mois.) Quelles sont alors les clés ? Les valeurs ? Afficher. ’Askier’. foreach ($mois as $m) echo ’<li>’ . ’mars’ =>31. ’juin’ => 30.’avril’. ’avril’ => 30. Correction : � � $jourMois = array(’janvier’=>31.’août’. (Attention. ’age’=>46. ’age’ => 33. ’nom’=>’Askier’.’age’=>7. ’email’=> array(’prenom’=>’Emilie’. sous forme de tableau. les indices attribués automatiquement commencent à 0 !) 1 2 3 � � Créer un tableau associant à chaque mois de l’année le nombre de jours du mois. ’novembre’ => 30. ’août’ => 31. ’octobre’ => 31.’novembre’.’mars’.1.’mai’.’février’. ’juillet’ => 31. ’ville’=>’Villetaneuse’). } � � Exercice 5 : Initiation aux tableaux 1 2 3 Créer un tableau ayant pour valeur les noms des douze mois de l’année. echo ’</ol>’. ’ville’ => ’Paris’). ’Villetaneuse’ ? Mathieu LACROIX � � �80 � Introduction Web. foreach ($jourMois as $m => $nbJ) echo ’<tr> <td>’ . ’septembre’ => 30. ’juillet’..’septembre’. ’ville’ => ’Epinay’). (On supposera que l’année n’est pas bissextile. ’toto’=> array(’prenom’ => ’Tom’.’décembre’). ’nom’ => ’Martin’. ’age’ => 18. ’age’ => 25."\n". ’ville’ => ’Villetaneuse’). "</li>\n"..

’jm’. ’</th>’ .4. } if($ligne%2==1) $class = ’impair’. ’arn’.3 : Écrire une fonction permettant d’afficher le tableau dans son ensemble. $ligne = 0. $v . $ligne ++. } function affichageHabitantsVille ($personnes.’">’. echo ’</tr>’. foreach ($info as $c => $v) echo ’<th>’ . Ajouter une première ligne contenant les clés ’prenom’. } echo ’</table>’."\n". ’nom’. ’age’ => 18.Département informatique Question 6. foreach ($personnes as $pseudo => $info) { if($ligne==0) { echo ’<tr>’. $ligne ++."\n". Ajouter ensuite un fichier CSS afin d’obtenir le tableau donné par la figure 3. Pour accéder à Epinay. ’email’ et ’dask’. le tableau affiché doit alors contenir uniquement la ligne relative à toto. ’nom’ => ’Tonge’. $class ."\n". 1ère année � � �81 � Mathieu LACROIX . ’</td>’ . foreach ($info as $v) echo ’<td>’ .4 : Écrire une fonction permettant d’afficher sous forme de tableau (en utilisant toujours le CSS). La valeur associée à ’toto’ est le tableau : array(’prenom’ => ’Tom’."\n". Pour accéder au tableau $personnes[’dask’]. ’toto’. ’age’ et ’ville’. Par exemple. $ville ) Introduction Web. else $class = ’pair’. Correction : Les clés sont de type chaînes de caractères et les différentes valeurs de clés sont : ’mdupond’. les informations des personnes habitant dans une ville donnée en paramètre. écrire : $personnes[’toto’][’ville’]. ’ville’ => ’Epinay’). Pour accéder à la valeur 33. echo ’</tr>’."\n". écrire : $personnes[’arn’][’age’]. si la fonction est appelée avec le tableau $personnes défini précédemment et la ville ’Epinay’."\n".4 – Tableau d’informations de personnes Question 6. $c . 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 1 � � � � � � function affichageTableau ($personnes) { echo ’<table>’. echo ’<tr class="’. Les valeurs du tableau sont de type tableau. Figure 3.

’</th>’ . votre pseudo n\’apparaît pas dans la liste! </p>’. $entete = true. foreach ($personnes as $pseudo => $info) { if($entete) { echo ’<tr>’. echo ’</tr>’. } if($info[’ville’]==$ville) { echo ’<tr>’. ’.IUT de Villetaneuse 2 { 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 � echo ’<table>’. Le code CSS associé au tableau est équivalent à celui donné pour la table de multiplication. on peut également leur demander de faire une fonction affichant les informations de la personne la plus âgée (ou la plus jeune). Mathieu LACROIX � � �82 � Introduction Web. Correction : � Exemple d’appel : http://aquanux/~001/TP2/exo7. ’ ’ . Faire en sorte que la page affiche le pseudo et les informations associées contenues dans le tableau $personnes. } La deuxième fonction peut être modifiée pour ajouter les class pair et impair. Améliorer le script pour que ce dernier affiche Désolé."\n"."\n". $entete = false . $info[’nom’] ."\n"."\n". ’</td>’ . foreach ($personnes as $p => $info) if($p==$pseudo) { echo ’<p> Bonjour ’ ."\n".php?pseudo=toto 1 2 <?php $personnes = array(. $info[’age’] . ’ et vous habitez ’ . $c . ’. $v ."\n". } } echo ’</table>’. Pour les étudiants en avance.. Vous avez ’. 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 $trouve= false .). </p>’.1 : Appeler une page PHP en passant dans l’url un paramètre de nom pseudo et ayant pour valeur un des pseudonymes du tableau $personnes. } } if($trouve== false ) { echo ’<p> Désolé. foreach ($info as $v) echo ’<td>’ . echo ’</tr>’. votre pseudonyme n’apparaît pas dans la liste si le pseudonyme n’est pas une clé du tableau $personnes."\n". $trouve=true. foreach ($info as $c => $v) echo ’<th>’ . � � Exercice 7 : Paramètres dans l’url Question 7. $info[’prenom’] .. if( ( isset($_GET[’pseudo’]) ) and ( trim($_GET[’pseudo’]) !=’’) ) { $pseudo = $_GET[’pseudo’]. $info [’ville’] ."\n". 1ère année � .

un âge et une ville.’ville’). 1 2 3 4 5 6 7 8 9 10 � <?php function testParametreFormulaireAjout () { $ok = true. } 11 12 13 14 15 16 17 18 19 20 if( ( isset($_GET[’formulaire’]) ) and ( $_GET[’formulaire’]==’ajouter’) ) { if(testParametreFormulaireAjout()) { $personnes[$_GET[’pseudo’]] = array(’prenom’ => $_GET[’prenom’]. $param = array(’pseudo’.Département informatique 20 21 1 2 3 4 5 6 � } � � ?> Question 7. si les différents paramètres sont corrects pour l’ajout (s’ils existent et s’ils ne sont pas vides). Correction : � � <h1> Veuillez saisir un pseudonyme : </h1> <form method="get" action="exo7. (Afficher le tableau en entier pour mieux voir le problème. à l’aide d’une fonction.php"> <p> Pseudo : <input type="text" name="pseudo"/> <input type="hidden" name="formulaire" value="ajouter"/> </p> <p> Prénom : <input type="text" name="prenom"/> </p> <p> Nom : <input type="text" name="nom"/> </p> <p> Age : <input type="text" name="age"/> </p> <p> Ville : <input type="text" name="ville"/> </p> Introduction Web. Ajouter plusieurs personnes et expliquer alors le problème.?>"/> <input type="submit" value="Recherche" /> </p> </form> � � � Question 7. Faire en sorte que le champ de saisie du pseudonyme contienne la dernière valeur saisie. echo ’<p> La personne a bien été ajoutée </p>’. 1ère année � � �83 � Mathieu LACROIX � . La correction vérifie. return $ok. ’ville’ => $_GET[’ville’]). foreach ($param as $v) if( !(isset($_GET[$v])) or (trim($_GET[$v])==’’) ) $ok= false . et ajoutant dans le tableau $personnes une nouvelle personne dont les valeurs sont celles données par le formulaire. il vaut mieux ajouter à chaque formulaire un champ caché permettant de savoir de quel formulaire viennent les paramètres.’prenom’.3 : Créer un deuxième formulaire demandant un pseudonyme.’age’.php"> <p> Pseudonyme : <input type="text" name="pseudo" value="<?php if(isset($_GET[’pseudo’])) echo $_GET[’pseudo’]. Mettre ensuite directement le formulaire dans le script PHP créé précédemment afin de pouvoir effectuer facilement plusieurs recherches. un nom.’nom’.2 : Créer un formulaire permettant à l’utilisateur de saisir le pseudonyme à rechercher afin de faciliter la saisie pour l’utilisateur. ’age’ => $_GET[’age’].) Comment remédier à ceci (réponse sans code car les connaissances nécessaires à la réponse dépassent le cadre de ce cours) ? Correction : Comme on crée deux formulaires sur une même page. ’nom’ => $_GET[’nom’]. un prénom. } } 21 22 23 24 25 26 27 28 29 30 ?> <h1> Ajout d’une personne : </h1> <form method="get" action="exo7.

Le résultat de l’opération doit alors s’afficher. 2. ’ . <body> <?php //On teste si l’utilisateur a saisi un mot de passe if( isset($_POST[’mdp’]) and $_POST[’mdp’]==’kangourou’) { ?> <!-.$nb2).php" method="post" > <p> <input type="password" name="mdp" /> <input type="submit" value="Connexion"/> </p> </form> <?php }// Accolade fermante du else ?> </body> ... des exemples sont fournis à l’adresse http:// www-lipn. Correction : � � .. 1ère année . $op. ($nb1 . le formulaire doit de nouveau s’afficher. ($nb1 + $nb2).<body> <?php function calcul ($nb1. Dans le cas contraire. Exercice tiré du site du zéro Mathieu LACROIX � � �84 � Introduction Web.!!! </p> <p> Code : VIVE LE PHP!!! </p> 10 11 <?php 12 13 14 15 16 17 18 19 20 21 22 } //Accolade fermante du if else { ?> <!-. ’ = ’ .univ-paris13. elseif ($op=="so") return $nb1 .Si l’ utilisateur a saisi le bon mot de passe --> <p> Voici le contenu secret obtenu uniquement si vous avez le mot de passe.... � � � Exercice 9 : Calculatrice2 1 2 3 4 5 6 7 8 Le but de cet exercice est de créer une calculatrice simple.Si l’utilisateur n’a pas saisi le bon mot de passe --> <h1> Veuillez saisir le mot de passe pour accéder au contenu privé </h1> <form action="secret. Exercice 8 : Contenu XHTML protégé par mot de passe 2 1 2 3 4 5 6 7 8 9 Le but de cet exercice est de créer un contenu protégé par mot de passe. Créer un formulaire permettant de saisir un mot de passe. la soustraction. L’utilisateur doit saisir deux nombres et choisir une opération parmi l’addition. $nb2 . choisir un mot de passe (par exemple : kangourou). $nb2 . Correction : � � . Pour cela.’ ..fr/~lacroix/Documents/TP/IntroWeb/ pour montrer précisément à quoi doit ressembler chaque script. ’ = ’ . Le contenu protégé doit alors s’afficher uniquement si le mot de passe est correct.IUT de Villetaneuse 31 32 <p> <input type="submit" value="Ajouter une personne"/> </p> </form> � � � Remarque : Pour les exercices suivants. ’ + ’ . la multiplication ou la division. $nb2) { if ($op=="ad") return $nb1 ..

$b = (double) $res[3].$b). Vérifier. que le texte saisi par l’utilisateur correspond à une opération. 9 10 11 12 13 14 15 16 17 18 } 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 if ( isset ($_GET[’nb1’]) and isset($_GET[’nb2’]) and isset($_GET[’op’])) { if (is_numeric($_GET[’nb1’]) and is_numeric($_GET[’nb2’])) { $a = (int)$_GET[’nb1’]. Correction : Dans le code précédent. $nb2 . 1ère année � � �85 � � Mathieu LACROIX � � � . ($nb1 / $nb2). Dans ce cas. else return NULL. ’ = ’ . elseif ($op=="di") if($nb2!=0) return $nb1 . } } ?> <h1> Calculatrice simple </h1> <form action="calculatrice. if($v!=NULL) echo ’<p>’ .$_GET[’op’].$b). $v = calcul ($a. $nb2 . ’ = ’ . mettre une seule balise input de type text dans le formulaire dont le name est ’operation’. à l’aide des expressions régulières. ’ * ’ . $v = calcul ($a. } Introduction Web. ’</p>’. $v . if($v!=NULL) echo ’<p>’ . $b = (int)$_GET[’nb2’].Département informatique elseif ($op=="mu") return $nb1 .$res) ) { $a = (double)$res[1].[0-9]+)?) *([*+/-]) *([0-9]+(?:\... Remplacer ensuite le test if (is_numeric. ($nb1 * $nb2).php" method="get"> 34 <p> Premier nombre : <input type="text" name="nb1" /> </p> <p> Opérateur <select name="op"> <option value="ad"> addition </option> <option value="so"> soustraction </option> <option value="mu"> multiplication </option> <option value="di"> division </option> </ select > </p> <p> Deuxième nombre : <input type="text" name="nb2" /> </p> <p> <input type="submit" value="Calculer" /> </p> </form> 35 36 37 38 39 40 41 42 43 44 45 46 � </body> </html> � Afin de faciliter la saisie par l’utilisateur. afficher le résultat. $_GET[’operation’].) par le code suivant : 1 2 � 3 4 5 6 7 8 9 � if(preg_match(’#^ *([0-9]+(?:\. $v . créer un formulaire contenant une seule balise input de type text où l’utilisateur saisit directement l’opération (par exemple : 17. else return NULL.5 * 13.46).$res[2].[0-9]+)?) *$#’. ’</p>’. ’ / ’ .

1 : Créer un formulaire permettant à un utilisateur de saisir ses pseudo. le suivant un nombre entre 1 et 6. Les étudiants peuvent reprendre le CSS du site d’énigmes.. afficher les informations saisies. Le but de cet exercice est de créer un tel formulaire et le traitement PHP associé. un message est alors automatiquement envoyé à la personne concernée. Vérifier.org". ’message’). Correction : Je ne donne pas la réponse aux deux dernières questions. "01 23 45 67 89". (Attention.com" ou ". Lors de la soumission du formulaire. à l’aide des expressions régulières. 1ère année � . ’sujet’.) Si les données saisies par l’utilisateur sont valides. les autres caractères étant des lettres. la partie [. Question 10.]?. 1 2 3 4 � . ". "01-23-45-67-89". tous les deux chiffres. return true. – le numéro de téléphone est constitué de 10 chiffres.IUT de Villetaneuse Exercice 10 : Formulaire de contact Il est intéressant qu’un utilisateur puisse laisser un message au webmaster ou à l’administrateur d’un site Web.. Pour la troisième question. numéro de téléphone et adresse e-mail. L’idée consiste alors à créer un formulaire où l’utilisateur saisit ses coordonnées ainsi qu’un message.fr". } 14 15 16 function testP_er() { Mathieu LACROIX � � �86 � Introduction Web. se termine par ". grâce à la fonction PHP : mail(’email_destinataire’.. </p> 5 6 7 8 9 10 11 12 13 <?php function testParametres($tab) { foreach ($tab as $v) if( ! isset ($_POST[$v]) or trim($_POST[$v])==’’) return false. – l’adresse mail contient une seule arobase. La dernière question est du code CSS pour améliorer la présentation. pour un confort d’utilisation.. De plus. Afin d’éviter l’envoi automatique de mails par des robots. Dans le cas où les informations ne sont pas correctes. que la saisie vérifie les caractéristiques suivantes : – le pseudo est constitué de 4 à 8 lettres. il suffit de rajouter que l’on peut avoir. Question 10. Question 10. "le(s) chien(s)".2 : Rajouter dans le formulaire une zone de texte permettant à l’utilisateur de saisir le message qu’il souhaite laisser. vérifier que la réponse donnée par l’utilisateur est correcte. Dans le traitement des données. Le script PHP doit alors indiquer si la saisie est correcte et dans ce cas. le premier étant un 0. afficher dans le formulaire les informations saisies par l’utilisateur..3 : Améliorer le script de manière à ce qu’un numéro de téléphone puisse aussi être saisi avec un espace ou un tiret tous les deux chiffres afin de permettre les numéros suivants : "0123456789". l’adresse doit contenir au moins 3 caractères avant l’arobase et entre 4 et 10 caractères entre l’arobase et la fin de la chaîne. "un chien" et "des chiens" doivent être valides. des chiffres ou le symbole underscore. Question 10. <body> <h1> Contact </h1> <p> Veuillez saisir vos infos . poser également une question très simple du style : "Quel animal aboie ?" et ajouter un champ de texte pour que l’utilisateur puisse répondre à la question. envoyer alors un mail sur son adresse de l’iut contenant les informations relatives à l’utilisateur et le message saisi.4 : Améliorer la présentation de la page Web à l’aide du CSS. les réponses "chien(s)".

’mail’.univ-paris13.3 : Stocker.Département informatique $ok=true. Question 11.$_POST[’pseudo’]) ) $ok= false . à l’aide d’un cookie le meilleur score obtenu par l’utilisateur.$_POST[’tel’]) ) $ok= false .(fr|com|org)$#’. "\nE-mail :" . } if(!$envoi) { ?> <form method="post" action="contact. Correction : � Fichier entete. if($test) echo ’<p> Un e-mail a été envoyé à l\’administrateur du site </p>’. $test = mail(’lacroix@iutv. Question 11.$_POST[’rep’]) ) $ok= false .?>"/> <input type="submit" value="Envoyer un message" /></p> </form> <?php } ?> </body> </html> � � � Exercice 11 : Questionnaire à choix multiples Question 11. afficher ce meilleur score en plus du score obtenu à l’instant par l’utilisateur. L’utilisateur doit alors répondre aux différentes questions et le site affiche alors le score obtenu par l’utilisateur. return $ok.8}$#’. if (!preg_match(’#^[a-zA-Z]{4. 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 } $envoi= false . ’[test] Contact’. "\nMessage :" .$_POST[’mail’]) ) $ok= false . $_POST[’message’]. 1ère année � � �87 � Mathieu LACROIX � . } echo ’<p> probleme dans la saisie </p>’. "\nTel : " . if (!preg_match(’#^ *([Uu]n|[Dd]es)? *[Cc]hiens? *$#’.php"> <p> Pseudo : <input type="text" name="pseudo" value="<?php echo $_POST[’pseudo’].?>"/> </p> <p> Message : <textarea rows="5" cols="50" name="message"><?php echo $_POST[’message’].2 : Ajouter sur la page d’accueil un formulaire pour que l’utilisateur puisse saisir son nom. Dans la page du score.?>"/> </p> <p> E-mail : <input type="text" name="mail" value="<?php echo $_POST[’mail’].?> </ textarea > </p> <p>Question: Quel animal aboie? <input type="text" name="rep" value="<?php echo $_POST[’rep’]. $_POST[’tel’] . $_POST[’pseudo’] .’rep’)) ) { if(testP_er()) { $mes = ’Pseudo : ’ .1 : Le but de cet exercice est de faire une première page Web contenant des énigmes ou questions avec plusieurs réponses possibles (une seule d’entre elles étant correcte).html : Introduction Web. if (!preg_match(’#^[a-zA-Z_]{3. if(testParametres( array (’pseudo’. Cette donnée sera utilisée par la suite pour personnaliser l’affichage du site.’message’. if (!preg_match(’#^0[1-6][0-9]{8}$#’. $envoi=true.fr’.’tel’.$mes).}@[a-zA-Z_]{4.?>"/> </p> <p> Téléphone : <input type="text" name="tel" value="<?php echo $_POST[’tel’]. $_POST[’mail’].10}\.

php"> Score </a> </li> </ul> </div> <div id="principal"> � � � � Fichier piedDePage. ?> <!-. </p> 14 15 16 17 18 <?php //Si l’ utilisateur a soumis son nom if( isset ($_POST[’nom’]) and trim($_POST[’nom’])!=’’ ) $_SESSION[’nom’] = $_POST[’nom’]. L’entete et le menu ont déjà été ajoutés --> <h1> <span> Bienvenue sur le site d’énigmes </span> </h1> 7 8 9 10 11 12 13 <p class = "accueil"> Ce site permet de tester son aptitude à la résolution d’énigmes. Mathieu LACROIX � � Fichier menu.org/TR/xhtml1/DTD/xhtml1-strict.0 Strict//EN" "http://www.org/1999/xhtml" xml:lang="en" lang="en"> <head> < title > Site d’énigmes</title> <meta http-equiv="Content-Type" content="text/html.html’). CSS et PHP vues lors de ce semestre.php"> Questionnaire </a> </li> < li > <a href="scores.w3.w3. 1ère année . charset=UTF-8" /> <link href="style1.html : � � �88 � Introduction Web. Son élaboration reprend toutes les connaissances XHTML.dtd"> <html xmlns="http://www.html’).php" method="post"> <p> <input name="nom" type="text" /> <input type="submit"/></p> </form>’. ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1. include (’menu.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="entete"> <h1> <span> Site d’énigmes </span> </h1> </div> � � 1 2 3 4 5 6 7 8 <div id="menu"> <ul> < li > <a href="index.php"> Accueil </a> </li> < li > <a href="questionnaire. 19 20 if( ! isset ($_SESSION[’nom’]) or trim($_SESSION[’nom’])==’’ ) 21 22 23 24 25 echo ’<h1> Veuillez entrer votre prénom </h1> <form action="index.On est dans l’id principal.html : 1 2 3 4 5 6 <?php include (’entete.html : 1 2 3 4 5 </div> <div id="piedDePage"> </div> </body> </html> � � � � Fichier index. Il a été élaboré pour le cours d’Introduction Web et correspond au projet de fin de semestre à mettre en place.IUT de Villetaneuse 1 2 3 4 5 6 7 8 9 10 11 12 13 <?php session_start().

html’). ?> <?php include(’piedDePage. ?> � � � � Fichier questionnaire. include (’menu. ’enigme2’ => ’Somme de deux nombres (suite)’.php"> <p> Question 1 : que vaut 1+2?</p> <ul> < li > <input type="radio" name="enigme1" value="vrai" /> 3 </li> < li > <input type="radio" name="enigme1" value="faux" /> 4 </li> </ul> 14 15 <p> Question 2 : que vaut 4+5?</p> 16 17 18 19 <ul> < li > <input type="radio" name="enigme2" value="vrai" /> 9 </li> < li > <input type="radio" name="enigme2" value="faux" /> -1 </li> 20 21 </ul> 22 23 24 25 26 27 28 <p> Question 3 : que vaut 11 <sup>2 </sup> + 12<sup> <ul> < li > <input type="radio" name="enigme3" value="faux" < li > <input type="radio" name="enigme3" value="vrai" < li > <input type="radio" name="enigme3" value="faux" </ul> 2 </sup>?</p> /> 23 </li> /> 265 </li> /> 255 </li> 29 30 31 32 <p> <input type="submit" name="valider" value="Calcul du résultat" /> </p> </form> <?php include(’piedDePage. $_SESSION[’nom’] . L’entete et le menu ont déjà été ajoutés --> <p> <?php echo $_SESSION[’nom’].php : 1 2 3 4 5 6 7 8 <?php //Tableau associant à chaque name d’enigme un nom //qui sera utilisé par dans le tableau de score $nomEnigme = array( ’enigme1’ => ’Somme de deux nombres’. ?>. Veuillez remplir le questionnaire </p> 7 8 9 10 11 12 13 <form method="post" action="scores.php : 1 2 <?php 3 4 5 6 include (’entete.Département informatique else 26 27 28 29 echo ’<p> Bienvenue ’. ’</p>’. 1ère année � � �89 � Mathieu LACROIX .html’).html’). ?> <!-. } Introduction Web. ?> � � � � Fichier fonctions. 9 10 11 12 13 14 15 16 17 18 //Fonction calculant le score obtenu function calculScore($t) { $nb = 0. foreach($t as $v) { if ($v==’vrai’) $nb = $nb + 1.On est dans l’id principal.html’). ’enigme3’ => ’Somme de carrés’ ).

voici le score que vous avez obtenu pour les différentes questions : </p> <div class="tableauEtRes"> Mathieu LACROIX � � �90 � Introduction Web. if($newScore > $meilleurScore) { setcookie (’meilleurScore’. foreach($nomEnigme as $c=>$v) { if($i%2==0) echo ’<tr><td>’. if(isset($_POST[$c])) if($_POST[$c]==’vrai’) echo ’<img src="vrai. $i=0. 19 20 } 21 22 23 24 //Fonction affichant le tableau function afficheTableau($nomEnigme) { 25 echo ’<table> <tr class="impair"> <th> Question numéro </th> <th> Résultat </th> </tr>’.png" alt="juste" /> </td></tr>’.php : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <?php include_once(’fonctions.On est dans l’id principal. include (’menu. false. $v . else echo ’<tr class="impair"><td>’.’</td><td>’. $v . ?>. null. L’entete et le menu ont déjà été ajoutés --> <h1> <span> Score obtenu </span> </h1> <p> <?php echo $_SESSION[’nom’].html’). null.html’).png" alt="sans réponse" /> </td></tr>’. } ?> <?php include (’entete. else $newScore = -1. 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 } ?> � � � Fichier scores.php’). 1ère année � . else echo ’<img src="faux. ?> <!-.IUT de Villetaneuse return $nb. time() + 7 * 24 * 60 * 60. if( isset ($_COOKIE[’meilleurScore’]) ) $meilleurScore =$_COOKIE[’meilleurScore’]. $_COOKIE[’meilleurScore’] = $newScore.’</td><td>’. if( isset ($_POST[’valider’])) $newScore = calculScore($_POST). } echo ’</table>’.png" alt="faux" /> </td></tr>’. true). else $meilleurScore = -1.$newScore. $i++. else echo ’<img src="nonRepondu.

0 Strict//EN" "http://www. ?>"/> / 2011 </p> <p> Heure : <input type="text" name="heure" size="2" value="<?php echo $_GET[’heure’]. ?> </p> </div> <?php include(’piedDePage. count($nomEnigme).php"> <p> Date : <input type="text" name="jour" size="2" value="<?php echo $_GET[’jour’]. ’</p>’.dtd"> <html xmlns="http://www. calculScore($_POST) .org/1999/xhtml" xml:lang="fr" lang="fr"> <head> < title >Ceci est une page de test avec des balises PHP</title> <meta http-equiv="Content-Type" content="text/html. ?> </p> 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 <h2> Veuillez saisir une date : </h2> <form method="get" action="nbS. ?>"/> sec </p> <p> <input type="submit" value="Nombre de secondes écoulées depuis le 01/01/11 à 00h00:00" /> </p> </form> </body> </html> � Introduction Web. 1ère année � � �91 � � Mathieu LACROIX . echo ’<p class="valeurScore"> Score : ’ .org/TR/xhtml1/DTD/xhtml1-strict.php’).w3. ’/’.html’). ?> � <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.Département informatique 26 <?php 27 28 29 30 31 32 33 34 35 36 37 38 if( isset ($_POST[’valider’])) { afficheTableau ($nomEnigme). ?> <p> Meilleur score obtenu à ce jour <?php echo $_COOKIE[’meilleurScore’]. Séparer le code en deux fichiers afin de regrouper au maximum le code XHTML d’une part et le code PHP d’autre part. charset=utf-8" /> </head> <body> <h1> Nombre de secondes passées depuis le premier janvier </h1> 12 <!-.Paragraphe donnant le nombre de secondes écoulées ou un message d’erreur si les paramètres n’ont pas été saisis correctement --> <p> <?php echo $message. ?> � Pour les étudiants en avance. Correction : � Fichier nbS : 1 2 3 4 5 6 7 8 9 10 11 <?php require_once(’codePHP. ?>"/> / <input type="text" name="mois" size="2" value="<?php echo $_GET[’mois’]. rajouter le code permettant de dire combien de fois la personne a effectué le questionnaire (cookie contenant le nombre de fois que le joueur a répondu au questionnaire). ?>"/> min <input type="text" name="sec" size="2" value="<?php echo $_GET[’sec’]. � � Exercice 12 : Nombre de secondes écoulées depuis le premier janvier 2012 Écrire un script PHP permettant à un utilisateur de saisir une date de l’année 2012 ainsi qu’une heure et affichant alors le nombre de secondes écoulées depuis le premier janvier de cette année. ?>"/> h <input type="text" name="min" size="2" value="<?php echo $_GET[’min’].w3. } else echo ’<p> Il faut répondre aux questions pour avoir un score! </p>’.

les minutes entre 1 et 59.30.28.2 : erreur heure if (($_GET[’mois’] <= 0) or ($_GET[’mois’] > 12)) return 1. 1ère année .les secondes entre 1 et 59. $i < $_GET[’mois’] . // Variable $date la date (forme jj/mm/2011 à HHhMM:ss) 55 56 57 Mathieu LACROIX � � �92 � Introduction Web.’min’.30. // $nbSecondes contient le nombre de secondes écoulées $nbSecondes = -1.l’heure comprise entre 1 et 23. secondes //sinon $message = ’’.31. function verificationParametre () { $nbJoursMois = array(31. 43 44 45 46 47 48 49 50 51 52 53 if(testParametres( array (’jour’.30.31. return 0.31.IUT de Villetaneuse � Fichier codePHP : 1 2 <?php 3 4 5 6 7 8 9 10 11 12 // teste que le tableau $_GET contient les clés contenues //dans le tableau $tab passé en paramètre et que les // valeurs associées à ces clés ne sont pas composées //uniquement d’espaces.30. if (($_GET[’jour’] <= 0)or($_GET[’jour’]>$nbJoursMois[$_GET[’mois’]-1])) return 1.31.0 : ok . function testParametres($tab) { foreach($tab as $v) if( !isset($_GET[$v]) or trim($_GET[$v])==’’ ) return false..30.30.31. // . Code retour : .31. if ($ok==0) { //Calcul du nombre de secondes écoulées $nbJoursMois = array(31. // . } � 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 // // // // //Vérifie que : // .le mois est compris entre 1 et 12. // . // .’mois’.le jour entre 1 et le nombre de jours du mois.31.. } 36 37 38 39 40 41 42 // $message contient le message d’erreur s’il y en a une ou la phrase : //Le nombre de secondes écoulées depuis le ..30.1 : erreur date .’sec’)) ) { $ok = verificationParametre ()..28.1 .31. if (($_GET[’heure’] < 0)or($_GET[’heure’] > 23) or ($_GET[’min’] < 0) or ($_GET[’min’] > 59) or ($_GET[’sec’]<0) or ($_GET[’sec’]>59)) return 2. est égal à .31. $i++) $nbJ += $nbJoursMois[$i]. 54 $nbSecondes = $_GET[’sec’] + 60 * $_GET[’min’] + 3600 * $_GET[’heure’] + 3600 * 24 * ($_GET[’jour’] + $nbJ-1).31). return true. for ($i = 0.31.31).30. $nbJ = 0.’heure’.

L’ordinateur choisit un nombre entier aléatoire compris entre 1 et 100 inclus. $_GET[’sec’] . echo ’<form method="post" action="devineChiffre.html’) ?> <h1> Bienvenue sur le site du jeu devineChiffre </h1> <?php if( ! isset ($_POST[’jeu’]) ) { $_SESSION[’nbM’] = mt_rand(0. Le joueur a 7 tentatives pour trouver ce nombre. $gagne = true. Le nombre aléatoire sera stocké dans la variable $_SESSION.Département informatique $message = ’Le nombre de secondes écoulées depuis le ’ . 58 59 60 61 } elseif ($ok==1) $message = ’Problème dans la date! Recommencez la saisie. si le nombre entré par l’utilisateur est différent du nombre aléatoire..$_GET[’min’] . $nbSecondes . //L’utilisateur a saisi un nombre if( isset($_POST[’nb’]) ) { $nb = (int) $_POST[’nb’]. //var_dump($nb). if($nb==$_SESSION[’nbM’]) { echo ’<p> Vous avez gagné! <a href="devineChiffre"> Rejouer </a></p>’.$_GET[’mois’]. else $message = ’Problème dans l\’heure! Recommencez la saisie. ’h’. À chaque tentative. créer un formulaire permettant à l’utilisateur de choisir un nombre. echo ’<p> Nombre magique : ’ . ’</p>’. Correction : � � <?php include(’entete.1 : Programmer ce jeu en PHP. $_SESSION[’nbM’] . Pour cela. ’ secondes. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 Question 13. Remarque : Le tirage d’un nombre aléatoire entre 1 et 100 se fait en PHP grâce à l’instruction $nb = mt_rand(1.’/’.php"> <p> <input type="submit" value="Commencer le jeu" /> <input type="hidden" name="jeu" value="7" /> </p> </form>’.’.’. } elseif ($nb <$_SESSION[’nbM’]) Introduction Web.$_GET[’heure’]. } else { $gagne = false.100). 62 63 64 65 66 } else 67 68 69 70 � $message = ’Paramètres non saisis! Recommencez la saisie. le programme indique si le nombre saisi est plus petit ou plus grand que le nombre aléatoire.’.100). ’ est égal à ’ . Le nombre de tentatives restantes sera donné à l’aide d’une balise input de type hidden. ?> � � Exercice 13 : Jeu Devine Chiffre Le jeu Devine chiffre se joue à un seul joueur. $_GET[’jour’]. 1ère année � � �93 � Mathieu LACROIX .’:’.’.’/2011 à ’.

’ tentatives </p>’. echo ’<form method="post" action="devineChiffre. } else echo ’<p> Vous avez perdu! <a href="devineChiffre"> Rejouer </a> </p>’. Ce jeu devrait être programmé avec un langage orienté client plutôt que serveur (par exemple : javascript).php"> <p> Nombre : <input type="text" name="nb" /> <input type="submit" value="Tenter" /> <input type="hidden" name="jeu" value="’.2 : Le PHP est-il adapté pour la programmation de ce jeu ? Correction : Non. De plus. $_POST[’jeu’] . 1ère année � . � Mathieu LACROIX � � �94 � Introduction Web. � Question 13. ’" /> </p> </form>’.IUT de Villetaneuse echo ’<p> Le nombre à trouver est plus grand </p>’. On a donc une surcharge inutile du serveur et un encombrement du réseau.1) . } 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 } ?> </body> </html> � Le fichier entete.html contient l’instruction <?php session_start(). 28 else 29 echo ’<p> Le nombre à trouver est plus petit </p>’. le jeu est plus lent. ($_POST[’jeu’] . ?> ainsi que l’en-tête d’un document XHTML. car chaque coup joué correspond à une requête. } if(!$gagne) { if( $_POST[’jeu’]!=0) { echo ’<p> Il vous reste ’ .