Documente Academic
Documente Profesional
Documente Cultură
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1. Donner dans ce chier les parties correspondant du code PHP et du code XHTML.
2. Si ce chier sappelle exo1.php, et sil est stock sur le site Web www.exemple.org dans le
rpertoire PremierTP, comment "excuter" ce chier ? Que donne son excution ? Ceci est-il
valide ? Pourquoi ? Corriger alors le problme.
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, dbut et n de la ligne
11, lignes 16-20. Le reste est du PHP.
2. Avec un navigateur, taper lurl http://www.exemple.org/PremierTP/exo1.php. Linterprtation du code PHP
produit du code XHTML. Le rsultat de linterprtation de ce code donne
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Mathieu LACROIX
76
Dpartement informatique
16
17
</body>
</html>
Le code XHTML gnr nest pas valide car il contient du texte (echo et ;) qui nest contenue dans
aucune balise de type block. Pour corriger cela, il faut ajouter <?php au dbut de la ligne 17 et ?> la n
de cette mme ligne.
Le langage PHP permet dinclure des chiers dans dautres. Ceci permet alors de dcomposer
un code XHTML ou PHP en plusieurs parties logiques et dinsrer ensuite ces direntes parties
dans un chier PHP. Utiliser linclusion de chiers pour sparer, dans le chier prcdent, le corps
du document du reste. Quel est lintrt dune telle dcomposition ?
Correction :
Fichier debut.php :
1
2
3
4
5
6
7
8
Fichier fin.php :
1
2
</body>
</html>
Fichier exo2.php :
1
2
3
4
5
6
7
8
9
Intrts : clarication du code, dcomposition en parties logiques, les parties dun site Web qui ne bougent pas et
sont prsentes dans toutes les pages Web du site peuvent tre crites une seule fois.
Crer une page PHP permettant dacher, sous forme de liste non ordonne, les carrs des
nombres de 1 30 selon le format :
12 = 1
22 = 4
...
302 = 900
Utiliser dabord linstruction echo avec des apostrophes puis avec des guillemets.
Remarque : Pour mettre du texte en exposant en XHTML, il est possible dutiliser la balise sup.
77
Mathieu LACROIX
IUT de Villetaneuse
1
2
3
4
5
6
7
8
9
Instruction echo avec des guillemets : echo "<li> $i <sup> 2 </sup> =". $i*$i . "</li>\n";.
1
2
<?php
3
4
5
function chCarre($nb)
{
return $nb . <sup>2 </sup> = . $nb * $nb ;
}
6
7
8
9
Crer un script PHP permettant dacher la table de multiplication donne par la gure 3.3.
78
Dpartement informatique
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
28
29
Correction :
$n=10;
for($ligne=1;$ligne<$n;$ligne++)
{
if($ligne%2)
$class =impair;
else
$class =pair;
echo <tr class=". $class. ">;
for($col=1;$col<$n;$col++)
{
if($ligne==1 || $col==1)
$cellule =th;
else
$cellule =td;
echo "<$cellule>";
if(($ligne!=1) and ($ligne==$col))
echo <strong>;
if($ligne!=1 || $col!=1)
echo $ligne *$col;
if(($ligne!=1) and ($ligne==$col))
echo </strong>;
echo "</$cellule>";
}
echo "</tr>\n";
}
?>
</table>
CSS :
1
2
table
{
3
4
5
6
7
th,td
{
8
9
10
11
12
13
14
15
th
{
16
17
background-color : #D48030;
18
19
20
.impair
{
21
22
background-color : #BEA58E;
23
24
25
. pair
{
Introduction Web, 1re anne
79
Mathieu LACROIX
IUT de Villetaneuse
26
27
background-color : #EBD9C8;
1
2
3
Crer un tableau ayant pour valeur les noms des douze mois de lanne. Quelles sont alors les
cls ? Parcourir ensuite le tableau pour acher les mois de lanne sous forme de liste ordonne.
Correction :
<?php
$mois = array(janvier,fvrier,mars,avril,mai,juin,
juillet,aot,septembre,octobre,novembre,dcembre);
4
5
6
7
8
9
echo <ol>;
foreach ($mois as $m)
echo <li> . $m . "</li>\n";
echo </ol>;
?>
Les cls sont les entiers 0,1,...,11. (Attention, les indices attribus automatiquement commencent 0 !)
1
2
3
Crer un tableau associant chaque mois de lanne le nombre de jours du mois. (On supposera
que lanne nest pas bissextile.) Quelles sont alors les cls ? Les valeurs ? Acher, sous forme de
tableau, le nombre de jours de chaque mois.
Correction :
$jourMois = array(janvier=>31, fvrier => 28, mars =>31, avril => 30, mai => 31,
juin => 30, juillet => 31, aot => 31, septembre => 30, octobre => 31,
novembre => 30, dcembre => 31);
4
5
6
7
8
echo <table> <tr> <th> Mois </th> <th> Nombre de jours </th> </tr>."\n";
foreach ($jourMois as $m => $nbJ)
echo <tr> <td> . $m . </td><td> . $nbJ . " </td> </tr>\n";
echo </table>;
Les cls sont les noms des mois de lanne et les valeurs les nombres de jours par mois.
1
2
3
4
5
6
7
8
$personnes = array(
mdupond=> array(prenom => Martin, nom => Dupond, age => 25, ville => Paris),
jm=> array(prenom => Jean, nom => Martin, age => 20, ville => Villetaneuse),
toto=> array(prenom => Tom, nom => Tonge, age => 18, ville => Epinay),
arn=> array (prenom => Arnaud, nom => Dupond, age => 33, ville => Paris),
email=> array(prenom=>Emilie, nom=>Ailta, age=>46, ville=>Villetaneuse),
dask => array(prenom=>Damien, nom=>Askier,age=>7,ville=>Villetaneuse)
);
Question 6.1 : Quelles sont les cls du tableau $personnes et leur type ? De quel type sont les
valeurs de ce tableau ? Quelle est la valeur associe toto ?
80
Dpartement informatique
Question 6.3 : crire une fonction permettant dacher le tableau dans son ensemble. Ajouter
une premire ligne contenant les cls prenom, nom, age et ville. Ajouter ensuite un
chier CSS an dobtenir le tableau donn par la gure 3.4.
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
81
Mathieu LACROIX
IUT de Villetaneuse
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
echo <table>."\n";
$entete = true;
foreach ($personnes as $pseudo => $info)
{
if($entete)
{
echo <tr>."\n";
foreach ($info as $c => $v)
echo <th> . $c . </th> ;
echo </tr>."\n";
$entete = false ;
}
if($info[ville]==$ville)
{
echo <tr>."\n";
foreach ($info as $v)
echo <td> . $v . </td> ;
echo </tr>."\n";
}
}
echo </table>."\n";
La deuxime fonction peut tre modie pour ajouter les class pair et impair. Le code CSS associ au tableau est
quivalent celui donn pour la table de multiplication.
Pour les tudiants en avance, on peut galement leur demander de faire une fonction achant les informations
de la personne la plus ge (ou la plus jeune).
1
2
<?php
$personnes = array(...);
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$trouve= false ;
if( ( isset($_GET[pseudo]) ) and ( trim($_GET[pseudo]) !=) )
{
$pseudo = $_GET[pseudo];
foreach ($personnes as $p => $info)
if($p==$pseudo)
{
echo <p> Bonjour . $info[prenom] . . $info[nom] .
. Vous avez . $info[age] . et vous habitez .
$info [ville] . . </p>."\n";
$trouve=true;
}
}
if($trouve== false )
{
echo <p> Dsol, votre pseudo n\apparat pas dans la liste! </p>."\n";
Mathieu LACROIX
82
Dpartement informatique
20
21
1
2
3
4
5
6
?>
1
2
3
4
5
6
7
8
9
10
<?php
function testParametreFormulaireAjout ()
{
$ok = true;
$param = array(pseudo,nom,prenom,age,ville);
foreach ($param as $v)
if( !(isset($_GET[$v])) or (trim($_GET[$v])==) )
$ok= false ;
return $ok;
}
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
?>
<h1> Ajout dune personne : </h1>
<form method="get" action="exo7.php">
<p> Pseudo : <input type="text" name="pseudo"/>
<input type="hidden" name="formulaire" value="ajouter"/> </p>
<p> Prnom : <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, 1re anne
83
Mathieu LACROIX
IUT de Villetaneuse
31
32
Remarque : Pour les exercices suivants, des exemples sont fournis ladresse http://
www-lipn.univ-paris13.fr/~lacroix/Documents/TP/IntroWeb/ pour montrer prcisment
quoi doit ressembler chaque script.
1
2
3
4
5
6
7
8
9
Le but de cet exercice est de crer un contenu protg par mot de passe. Pour cela, choisir
un mot de passe (par exemple : kangourou). Crer un formulaire permettant de saisir un mot de
passe. Le contenu protg doit alors sacher uniquement si le mot de passe est correct. Dans le
cas contraire, le formulaire doit de nouveau sacher.
Correction :
... <body>
<?php
//On teste si lutilisateur a saisi un mot de passe
if( isset($_POST[mdp]) and $_POST[mdp]==kangourou)
{
?>
<!-- Si l utilisateur a saisi le bon mot de passe -->
<p> Voici le contenu secret obtenu uniquement si vous avez le mot de passe...!!! </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
{
?>
<!-- Si lutilisateur na pas saisi le bon mot de passe -->
<h1> Veuillez saisir le mot de passe pour accder au contenu priv </h1>
<form action="secret.php" method="post" >
<p> <input type="password" name="mdp" /> <input type="submit" value="Connexion"/> </p>
</form>
<?php }// Accolade fermante du else ?>
</body> ...
Exercice 9 : Calculatrice2
1
2
3
4
5
6
7
8
Le but de cet exercice est de crer une calculatrice simple. Lutilisateur doit saisir deux nombres
et choisir une opration parmi laddition, la soustraction, la multiplication ou la division. Le
rsultat de lopration doit alors sacher.
Correction :
...<body>
<?php
function calcul ($nb1, $op, $nb2)
{
if ($op=="ad")
return $nb1 . + . $nb2 . = . ($nb1 + $nb2);
elseif ($op=="so")
return $nb1 . - . $nb2 . = . ($nb1 - $nb2);
2. Exercice tir du site du zro
Mathieu LACROIX
84
Dpartement informatique
elseif ($op=="mu")
return $nb1 . * . $nb2 . = . ($nb1 * $nb2);
elseif ($op=="di")
if($nb2!=0)
return $nb1 . / . $nb2 . = . ($nb1 / $nb2);
else
return NULL;
else
return NULL;
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
34
35
36
37
38
39
40
41
42
43
44
45
46
</body> </html>
An de faciliter la saisie par lutilisateur, crer un formulaire contenant une seule balise input
de type text o lutilisateur saisit directement lopration (par exemple : 17.5 * 13.46). Vrier,
laide des expressions rgulires, que le texte saisi par lutilisateur correspond une opration.
Dans ce cas, acher le rsultat.
Correction :
Dans le code prcdent, mettre une seule balise input de type text dans le formulaire dont le name est operation.
Remplacer ensuite le test if (is_numeric...) par le code suivant :
1
2
3
4
5
6
7
8
9
85
Mathieu LACROIX
IUT de Villetaneuse
Je ne donne pas la rponse aux deux dernires questions. Pour la troisime question, il sut de rajouter que lon peut
avoir, tous les deux chires, la partie [- ]?. La dernire question est du code CSS pour amliorer la prsentation.
Les tudiants peuvent reprendre le CSS du site dnigmes.
1
2
3
4
...
<body>
<h1> Contact </h1>
<p> Veuillez saisir vos infos ... </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;
return true;
}
14
15
16
function testP_er()
{
Mathieu LACROIX
86
Dpartement informatique
$ok=true;
if (!preg_match(#^[a-zA-Z]{4,8}$#,$_POST[pseudo]) )
$ok= false ;
if (!preg_match(#^0[1-6][0-9]{8}$#,$_POST[tel]) )
$ok= false ;
if (!preg_match(#^[a-zA-Z_]{3,}@[a-zA-Z_]{4,10}\.(fr|com|org)$#,$_POST[mail]) )
$ok= false ;
if (!preg_match(#^ *([Uu]n|[Dd]es)? *[Cc]hiens? *$#,$_POST[rep]) )
$ok= false ;
return $ok;
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 ;
if(testParametres( array (pseudo,tel,mail,message,rep)) )
{
if(testP_er())
{
$mes = Pseudo : . $_POST[pseudo] . "\nTel : " . $_POST[tel] .
"\nE-mail :" . $_POST[mail]. "\nMessage :" . $_POST[message];
$test = mail(lacroix@iutv.univ-paris13.fr, [test] Contact,$mes);
if($test)
echo <p> Un e-mail a t envoy l\administrateur du site </p>;
$envoi=true;
}
echo <p> probleme dans la saisie </p>;
}
if(!$envoi)
{
?>
<form method="post" action="contact.php">
<p> Pseudo : <input type="text" name="pseudo" value="<?php echo $_POST[pseudo];?>"/> </p>
<p> Tlphone : <input type="text" name="tel" value="<?php echo $_POST[tel];?>"/> </p>
<p> E-mail : <input type="text" name="mail" value="<?php echo $_POST[mail];?>"/> </p>
<p> Message : <textarea rows="5" cols="50" name="message"><?php echo $_POST[message];?>
</ textarea > </p>
<p>Question: Quel animal aboie? <input type="text" name="rep"
value="<?php echo $_POST[rep];?>"/>
<input type="submit" value="Envoyer un message" /></p>
</form>
<?php
}
?>
</body>
</html>
Fichier entete.html :
87
Mathieu LACROIX
IUT de Villetaneuse
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
<div id="menu">
<ul>
< li > <a href="index.php"> Accueil </a> </li>
< li > <a href="questionnaire.php"> Questionnaire </a> </li>
< li > <a href="scores.php"> Score </a> </li>
</ul>
</div>
<div id="principal">
Fichier piedDePage.html :
1
2
3
4
5
</div>
<div id="piedDePage">
</div>
</body>
</html>
Fichier index.html :
1
2
3
4
5
6
<?php
include (entete.html);
include (menu.html);
?>
<!-- On est dans lid principal. Lentete et le menu ont dj t ajouts -->
<h1> <span> Bienvenue sur le site dnigmes </span> </h1>
7
8
9
10
11
12
13
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];
19
20
21
22
23
24
25
Fichier menu.html :
88
Dpartement informatique
else
26
27
28
29
Fichier questionnaire.php :
1
2
<?php
3
4
5
6
include (entete.html);
include (menu.html);
?>
<!-- On est dans lid principal. Lentete et le menu ont dj t ajouts -->
<p> <?php echo $_SESSION[nom]; ?>, Veuillez remplir le questionnaire </p>
7
8
9
10
11
12
13
14
15
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
2 </sup>?</p>
/> 23 </li>
/> 265 </li>
/> 255 </li>
29
30
31
32
Fichier fonctions.php :
1
2
3
4
5
6
7
8
<?php
//Tableau associant chaque name denigme un nom
//qui sera utilis par dans le tableau de score
$nomEnigme = array(
enigme1 => Somme de deux nombres,
enigme2 => Somme de deux nombres (suite),
enigme3 => Somme de carrs
);
9
10
11
12
13
14
15
16
17
18
89
Mathieu LACROIX
IUT de Villetaneuse
return $nb;
19
20
21
22
23
24
25
echo <table>
<tr class="impair">
<th> Question numro </th>
<th> Rsultat </th>
</tr>;
$i=0;
foreach($nomEnigme as $c=>$v)
{
if($i%2==0)
echo <tr><td>. $v .</td><td>;
else
echo <tr class="impair"><td>. $v .</td><td>;
if(isset($_POST[$c]))
if($_POST[$c]==vrai)
echo <img src="vrai.png" alt="juste" /> </td></tr>;
else
echo <img src="faux.png" alt="faux" /> </td></tr>;
else
echo <img src="nonRepondu.png" alt="sans rponse" /> </td></tr>;
$i++;
}
echo </table>;
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
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.php);
if( isset ($_POST[valider]))
$newScore = calculScore($_POST);
else
$newScore = -1;
if( isset ($_COOKIE[meilleurScore]) )
$meilleurScore =$_COOKIE[meilleurScore];
else
$meilleurScore = -1;
if($newScore > $meilleurScore)
{
setcookie (meilleurScore,$newScore, time() + 7 * 24 * 60 * 60, null, null, false, true);
$_COOKIE[meilleurScore] = $newScore;
}
?>
<?php
include (entete.html);
include (menu.html);
?>
<!-- On est dans lid principal. Lentete et le menu ont dj t ajouts -->
<h1> <span> Score obtenu </span> </h1>
<p> <?php echo $_SESSION[nom]; ?>, voici le score que vous avez obtenu
pour les direntes questions : </p>
<div class="tableauEtRes">
Mathieu LACROIX
90
Dpartement informatique
26
<?php
27
28
29
30
31
32
33
34
35
36
37
38
?>
<p> Meilleur score obtenu ce jour <?php echo $_COOKIE[meilleurScore]; ?> </p>
</div>
<?php include(piedDePage.html); ?>
Pour les tudiants en avance, rajouter le code permettant de dire combien de fois la personne a eectu le
questionnaire (cookie contenant le nombre de fois que le joueur a rpondu au questionnaire).
crire un script PHP permettant un utilisateur de saisir une date de lanne 2012 ainsi quune
heure et achant alors le nombre de secondes coules depuis le premier janvier de cette anne.
Sparer le code en deux chiers an de regrouper au maximum le code XHTML dune part et le
code PHP dautre part.
Correction :
Fichier nbS :
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
28
29
30
31
91
Mathieu LACROIX
IUT de Villetaneuse
Fichier codePHP :
1
2
<?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
30
31
32
33
34
35
//
//
//
//
//Vrifie que :
// - le mois est compris entre 1 et 12,
// - le jour entre 1 et le nombre de jours du mois,
// - lheure comprise entre 1 et 23,
// - les minutes entre 1 et 59,
// - les secondes entre 1 et 59.
function vericationParametre ()
{
$nbJoursMois = array(31,28,31,30,31,30,31,31,30,31,30,31);
Code retour :
- 0 : ok
- 1 : erreur date
- 2 : erreur heure
if (($_GET[mois] <= 0) or ($_GET[mois] > 12))
return 1;
if (($_GET[jour] <= 0)or($_GET[jour]>$nbJoursMois[$_GET[mois]-1]))
return 1;
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;
return 0;
}
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Mathieu LACROIX
92
Dpartement informatique
$message = Le nombre de secondes coules depuis le .
$_GET[jour]./.$_GET[mois]./2011 .$_GET[heure].
h.$_GET[min] .:. $_GET[sec] . est gal .
$nbSecondes . secondes.;
58
59
60
61
}
elseif ($ok==1)
$message = Problme dans la date! Recommencez la saisie.;
else
$message = Problme dans l\heure! Recommencez la saisie.;
62
63
64
65
66
}
else
67
68
69
70
?>
Le jeu Devine chire se joue un seul joueur. Lordinateur choisit un nombre entier alatoire
compris entre 1 et 100 inclus. Le joueur a 7 tentatives pour trouver ce nombre. chaque tentative,
si le nombre entr par lutilisateur est dirent du nombre alatoire, le programme indique si le
nombre saisi est plus petit ou plus grand que le nombre alatoire.
Remarque : Le tirage dun nombre alatoire entre 1 et 100 se fait en PHP grce linstruction $nb = mt_rand(1,100);.
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.1 : Programmer ce jeu en PHP. Pour cela, crer un formulaire permettant lutilisateur de choisir un nombre. Le nombre de tentatives restantes sera donn laide dune balise
input de type hidden. Le nombre alatoire sera stock dans la variable $_SESSION.
Correction :
93
Mathieu LACROIX
IUT de Villetaneuse
echo <p> Le nombre trouver est plus grand </p>;
28
else
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
}
?>
</body>
</html>
Le chier entete.html contient linstruction <?php session_start(); ?> ainsi que len-tte dun document XHTML.
Mathieu LACROIX
94