Exercices Programmation Web

Enoncé

1

Soit les 2 scripts suivants :
Exo1.html:
<html> <head> <title>Exercice 1</title> </head> <body>
<form name="F1" action="exo1.php" methode="GET">
<table>
<tr> <td>Nom :<td><input type="text" name="var1"> </tr>
<tr> <td>Valider :<td><input type="Submit" value="Valider"> </tr>
</table>
</form>
</body> </html>

Exo1.php:
<?php
$x= "Pas de nom !";
if (isset($_GET["var1"]))
     $x=$_GET["var1"];
echo "Bonjour ".$x;
?>

Questions :

  • Que font ces scripts ?
  • Que remarquez-vous dans la ligne Adresse du navigateur ?
  • Remplacer la méthode GET par POST. Que remarquez-vous ?

Solution

2

Soit les scripts suivants :
Exo2.php:
<?php
echo "<HTML>";
echo "<HEAD>";
echo "<TITLE> Exercice N° 2 </TITLE>";
// lecture des variables
$var1    = (isset($_GET["var1"])) ? $_GET["var1"] : NULL;
$var2    = (isset($_GET["var2"])) ? $_GET["var2"] : NULL;
$var3    = (isset($_GET["var3"])) ? $_GET["var3"] : NULL;
echo "<br> A= $var1";
echo "<br> B= $var2";
echo "<br> C= $var3 <br>";
echo "<br><br>
<a href=\"exo2_1.php?var1=$var1&var2=$var2
          &var3=$var3\"> Modifier les valeurs </a>";
echo "<br><br><a href=\"exo2_2.php\">
           Mettre à Zéro les variables</a>";
echo "<br><br><a href=\"exo2_3.php\">
             Résoudre l'équation A x² + B x + C</a>";
echo "</HEAD>";
echo "</HTML>";
?>

exo2_1.php
<HTML><HEAD><TITLE>exo2_1.php</TITLE>
<?php
$var1    = (isset($_GET["var1"])) ? $_GET["var1"] : NULL;
$var2    = (isset($_GET["var2"])) ? $_GET["var2"] : NULL;
$var3    = (isset($_GET["var3"])) ? $_GET["var3"] : NULL;
?>
<script type="text/javascript" language="javascript">
<!--
function retour() { history.back(); }
//-->
</script>
<CENTER><H3> Formulaire de saisie</H3>
<form enctype="multipart/form-data" action="exo2.php" methode='GET'>
<TABLE border=1>
<TR><TD>A :</TD>
<TD><input type="text" name="var1"  value="<? $var1 ?>">
<TR><TD>B :</TD>
<TD><input type="text" name="var2"  value="<? $var2 ?>">
<TR><TD>C :</TD>
<TD><input type="text" name="var3"  value="<? $var3 ?>">
</TABLE>
<input type="submit" name="change" value="Enregistrer">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="Reset" name="change_done" value="Annuler"
   onClick="retour()">
</CENTER></form</HEAD</HTML>

Questions :

3

Soit le script suivant :
exo3.php:
<?php
session_start ();
if (isset($_GET['pwd'])) {
  $ww_get= $_GET['pwd'];
  if ( ! isset($_SESSION['pass']) ) {
     $_SESSION['pass']= $ww_get;
     echo "<br>Le mot de passe saisi ($ww_get) est enregistré dans une variable Session"; }
  else {
    $ww_sess= $_SESSION['pass'];
    echo "<br>La valeur de la variable session= $ww_sess";
    if ($ww_get == $ww_sess) {
       echo "<br>Votre mot de passe ($ww_get) est correct...";}
   else
      echo "<br>Mot de passe Incorrect ($ww_get) !!"; }
   echo "<br>Veuillez saisir le Mot de passe pour le vérifier :";
  }
else echo "<br>Veuillez saisir le Mot de passe pour l'enregistrer :";
?> <br /><br />
<form method="get" action="exo3.php" >
<table><tr> <td><input type="password" name="pwd">
<td><input type="Submit" value="Entrer">
</table>
</form>

Questions :

  • Que fait le script ? Quel est le nouveau concept qu'il utilise ?
  • Améliorer le script pour prendre en compte le username.
  • Quel est l’inconvénient ? Comment le pallier ?

Solution

4

Soit le script suivant :
exo4.php:
<?php
global $ww_cook;
$ww_cook="0";
$ww_cook= (isset($_COOKIE['c1'])) ? $_COOKIE['c1'] : "0";
$ww_cook++;
setcookie('c1',$ww_cook,time()+3600);
echo "La valeur du cookie c1 est : ".$_COOKIE['c1']."<br> Tapez sur F5 ou visitez la page plusieurs fois pour voir...";
?>

Questions :

  • Que fait le script ? Quel est le nouveau concept qu'il utilise ?
  • En quoi peut-on utiliser un script pareil ?

Solution

5

Soit le script suivant :
exo5.php:
<?php
function tri (&$val) {
   $ww_nb= count($val) ;
   for($i=0; $i<$ww_nb-1; $i++)
     for($j=$i+1 ; $j<$ww_nb ; $j++)
      if($val[$i]>$val[$j]) echange ($val[$i], $val[$j]) ;}
function echange (&$a, &$b)
// $a et $b sont transmis par référence
{ $c = $a ; $a = $b ; $b = $c ; }
echo "Exercice 5 <br>";
$valeurs = array (2, 5, 1, 9, 4, 8) ;
foreach ($valeurs as $v) echo "$v, " ;
echo "<br>" ;
tri ($valeurs) ;
foreach ($valeurs as $v) echo "$v, " ;
?>

Questions :

  • Que fait ce script ? Quelles sont ses limites ?
  • Modifier ce script pour des données quelconques.

Solution

6

Soit le script suivant :
exo6.php:
<?php
$file= "exo6.txt";
if (! file_exists($file)){
   $fd= fopen($file, "w");
   fputs($fd,"ligne1\n"); fputs($fd,"ligne2\n");    fputs($fd,"ligne3\n");
   fclose($fd);
}
$fd= fopen($file, "r");
$str= "";
if ($fd){
     while( ! feof($fd) ) { $str.= $str .          fgets($fd,5)."<br>"; }
     fclose($fd);
} else die("Ouverture impossible de $file");
echo "<html><head><title>lecture de fichiers </title></head> <body> $str </body></html>";
?>

Questions :

  • Que fait ce script ?
  • Ecrire le script qui permet d’écrire le matricule (5 chiffres), le nom (10 caractères) et le prénom (10 caractères) de plusieurs étudiants dans un fichier Etudiants.txt (utiliser fputs() ).
  • Modifier le script ci-dessus pour afficher la liste des étudiants saisis.

Solution

7

Soit le script suivant :
exo7.php:
<html><head><title>redirection </title>
<script language="JavaScript" type="text/javascript">
<!--
function redirection(){
            document.location="exo7_1.php";
}
//-->
</script>
<body onLoad="setTimeout('redirection()',2000)">
<?php
echo "Vous allez bientôt être redirigé";
?>
</head><body></body></html>

exo7_1.php:
<html>
<head>
<title>redirection Suite</title>
<?php
echo "Vous être redirigé vers exo7_1.php";
?>
</head>
<body>
</body>
</html>

Questions :

  • Que fait le script ? (Essayer plusieurs valeurs au lieu de 2000 et conclure)
  • En quoi ce script peut être intéressant ?

Solution

8

Soit les scripts suivants :
exo8.php:
<html>
<head><title>exo8.php: chargement de fichiers</title></head>
<body>
<form action="exo8_1.php" method="post" ENCTYPE="multipart/form-data">
<input type="file" name="fileUpload" ><br>
<input name="Envoyer" type="submit" value="envoyer" >
</form>
</body>
</html>

exo8_1.php
<html><head><title>exo8_1.php</title></head><body>
Affichage des données reçues :<br/><br/>
<?php
echo "Nom du fichier = ".$_FILES["fileUpload"]["name"]."<br>";
echo "Type du fichier = ".$_FILES["fileUpload"]["type"]."<br>";
echo "Taille du fichier = ".$_FILES["fileUpload"]["size"]."<br>";
echo "Nom du fichier temporaire chargé = ".$_FILES["fileUpload"]["tmp_name"]."<br>";
echo "Erreurs de chargement = ".$_FILES["fileUpload"]["error"]."<br>";

if(copy($_FILES["fileUpload"]["tmp_name"],
            $_FILES["fileUpload"]["name"]))
      echo "<br/><br/>Copie/Chargement Terminé.";
?>
</body></html>

Questions :

  • Que font ces scripts ? Quel est le nouveau concept ?
  • Modifier les scripts pour afficher le contenu du fichier au lieu de le copier.

Solution

9

Donner les scripts qui permettent de :
a- Créer une base de données vide nommée COMMERCE.
b- Créer les tables suivantes dans la base ci-dessus:
         Client ( CodeCli Int(3), Nom Varchar(20), Email Varchar(80), Pays Varchar(30))
         Facture (NumF Int(4), dateF D, Montant Decimal(10,2), CodeCli Int(3))
c- Ajouter 3 clients quelconques dans le fichier Client.
d- Ajouter 2 factures quelconques pour chaque client dans le fichier Facture
e- Afficher la liste des clients
f- Afficher la liste des factures d’un client donné.
g- Afficher la liste des noms clients ayant au moins une facture telle que son montant > $x.
h- Afficher la liste des noms clients ayant la somme des montants des factures associées > $m.
i- Afficher la liste des pays sans répétitions des clients ayant au moins une facture d'un montant compris entre $min et $max.
j- Supprimer tous les clients (ainsi que leurs factures correspondantes) dont le montant total des factures < $b.
k- Réduire de 10% les montants des factures qui dépassent $s.
l- Ajouter une table temporaire T( CodeCli Int(3), Nom Varchar(20)) contenant les clients dont Pays= $p et ayant au moins une facture entre $d1 et $d2.

Solution

10

Nous avons créé 2 sources de données Source1 et Source2 telles que :
- Source1 désigne une base de données de type Access contenant les 2 tables:
      * Client(CodeCl Numérique, Nom Texte(30), Adresse Texte(50) )
      * et Facture (Num Numérique, DateF Date/Time, Montant Monétaire, CodeCl Numérique ).
- Source2 désigne un Classeur Excel contenant 2 Feuilles (Feuil1 contenant les colonnes de la table Client et Feuil2 contenant les colonnes de la table Facture).

f1
f2

Donner les scripts qui permettent de réaliser les opérations suivantes :
1- Utiliser Source1 pour ajouter 2 Clients différents (codes 10 et 20), 2 factures pour le client 10 et une facture pour le client 20. Afficher ensuite pour chaque client, ses factures correspondantes.
2- Utiliser Source2 pour ajouter les 2 Clients de la question 1 dans Feuil1 et les 3 factures dans Feuil2. Afficher ensuite pour chaque client, ses factures correspondantes.

11 Exercice (BDD) - Solution - Script
 

Hors Série

x01

Donner le script qui permet d'afficher les voyelles (a,e,u,i,o,y) d'une chaine de caractère . Solution - Script

x02

Un tableau contient 10 notes (nombres réels). Indiquer combien parmi celles-ci sont supérieures à la moyenne de ces 10 notes (attention, il s’agit bien de la moyenne de ces 10 notes, et non de la moyenne 10).Solution - Script

x03

Ecrire une fonction déterminant si un caractère reçu en paramètre est une voyelle (a,e,u,i,o,y). Le script doit analyser la chaîne suivante :"petit poisson deviendra grand, pourvu que Dieu lui prete vie." qui se termine par un point et afficher toutes les voyelles. Solution - Script

x04

Ecrire une fonction de tri d’un tableau, exploitant les possibilités d’appels imbriqués pour utiliser une fonction d’échange de deux valeurs. Solution - Script

x05

Ecrire une classe Point, dotée de trois constructeurs (le premier sans paramètres: crée un point avec les coordonnées (0,0), le second avec 1 paramètre x : coordonnées (x,0), le troisième avec 2 paramètres x,y : coordonnées (x,y) ), d’une méthode deplace (qui déplace les coordonnées du point d'une distance [dx,dy]) et d’une méthode affiche (qui affiche les coordonnées x,y actuelles du point). Solution - Script

x06

Soit la classe Point définie ci_dessus. Définir dans cette classe les méthodes symétrique, coincide et permute telles que:
symétrique : crée un nouveau point avec l'opposé des coordonnées du point courant. Exemple (1,2) -> (-1,-2) .
coincide : VRAI si deux points ont les mêmes coordonnées.
permute : permute les coordonnées de deux points. Exemple: x(1, 2), y(3, 4) -> x(3, 4), y(1, 2).
- Initialement : créer les 4 points a(1, 2) ; c(1, 2) ; d(-1, -2);
- Vérifier si a coincide avec c;
- définir b comme symétrique de a;
- Vérifier si b coincide avec d;
- Permuter entre a et b.

Solution - Script

x07

Soit la classe Point définie ci_dessus. Définir une nouvelle classe Segment qui relie deux points existants.
- Initialement : créer les 3 points a(1, 2) ; b(4, 5) ; c(7, 8);
- Créer les segments s1(a,b), s2(b,c);
- Déplacer le point b de [10,20]
- Vérifier si les trois points forment un angle droit (propriété de Pitagore).

Solution - Script

x08

Soit la classe Point définie ci_dessus. Définir une nouvelle classe PointCol qui hérite de la classe Point et qui permet de créer un point avec une couleur.
- Initialement : créer 1e point pc(3, 5) avec la couleur 12;
- Déplacer ce point de [1,-3]
- Vérifier si 2 points ont la même couleur.
- Définir une nouvelle classe PointForme qui hérite de la classe PointCol et qui permet de créer un point avec une forme (Carré, oval, losange,etc.).

Solution - Script

x09

Soit les classes Point et PointCol définies ci_dessus.
- Initialement : créer 1es points (0, 2) et (1,2); et les points colorés (1,5,3) et (2,8,9); en les plaçant dans un même tableau.
- En utilisant le polymorphisme, définir la fonction qui affiche le type et les coordonnées de tous les points.

Solution - Script

x10

On désire créer une classe abstraite nommée Affichable, dotée d’une seule méthode retardée (abstraite) appelé affiche. Deux classes Entier et Réel dérivent de cette classe. Ecrire un script qui utilise un tableau hétérogène d’objets de type Affichable et qu’il remplit en instanciant des objets de type Entier et Réel.
- Créer un tableau contenant l'objet de type Entier de valur 25, Reel de valeur 1.25 et Entier de valeur 42;
- Appeler la méthode affiche pour afficher le type de chaque élément du tableau.

Solution - Script

x11

Même exercice que le précédent mais en utilisant la notion d'interface. Solution - Script

x12

En utilisant les objets et les méthodes du DOM, donner le script qui lit le contenu d'un fichier XML et affiche :

  • Les noms des noeuds de type <a>
  • les noms des attributs et leurs valeurs associées

Fichier XML - Solution - Script