Informatique Décisionnelle
-
TD 1 - PHP / Gestion d'un formulaire web

  index suivant >>

Présentation générale

Dans ce premier TD, on aborde le langage PHP. Ce langage permet d'executer des traitements automatiques sur un site web, c'est donc la base d'une site internet dynamique. Comme application, nous vous proposons d'apprendre à gérer un questionnaire en ligne.

Compétences à acquérir

Travail évalué :

Ce travail sera évalué par une interrogation (en même temps que l'évaluation sql)

Ressources

Pour vous aider en HTML


1- Rappel sur HTML

Connectez vous à votre session étudiante. Cliquez sur le lien Éditeurs de fichiers dans Outils. L'éditeur permet de créer des fichiers .html ou .php et de les exécuter.


Page HTML à créer

Exercice 1

Créer la page .html donnant le résultat ci-dessus.


2-Notions sur le code PHP

a) Notions de base

Le code PHP s'éxecute sur le serveur. Pour être reconnus comme fichier PHP, les fichiers doivent avoir une extension .php au lieu de .html. Le code PHP est inséré dans du code HTML standard entre deux balises <?php et ?>. Lorsque qu'une page PHP est appellée, le code PHP est exécuté et la page HTML résultante est renvoyée. Les instructions HTML seront renvoyées telles quelles, par contre tout ce qui est contenu entre les deux balises <?php et ?> est interprété par le serveur.

Les seuls élements contenus dans le code PHP qui apparaissent dans la page HTML résultante sont les chaines de caractères dont le programmeur demande l'affichage. Par exemple :

<?php
echo "<u>bonjour</u>";
?>

génère le code HTML suivant :

<u>bonjour</u>

ce code étant ensuite interprété par le navigateur qui a appellé la page PHP et reçoit la page HTML résultante, ce qui affichera :

bonjour

Les pages PHP sont à créer dans un éditeur de texte, comme on le fait pour les pages HTML, il suffit ensuite de les enregistrer avec l'extension .php.

A noter:

b)Ecriture de code HTML via PHP

Ici on veut créer une page php qui génére une page HTML qui affiche Bonjour.

N.B.: ceci n'a aucun intérêt en fait, puisque l'appel à une page HTML de type :

<h1>Bonjour</h1>

est absolument équivalent du point de vue du client à l'appel à une page PHP de type :

<h1>
<?php
echo "Bonjour";
?>
</h1>

ce qui est également équivalent à :

<?php
echo "<h1>Bonjour</h1>";
?>

Exercice 2

Créer une page PHP qui, lorsque appellée, renvoie une page avec un titre, un certain nombre de sauts de lignes et un texte centré.


3- Récuperation de données d'un formulaire

On arrive ici dans le cas d'opérations qu'on ne peut pas faire en s'en tenant à la connaissance du HTML.

Selon le schéma client-serveur, on commence par définir un formulaire au sein d'une page HTML appelante. Lors de la création du formulaire, on indique l'adresse d'un script qui sera appellé lorsque le formulaire sera validé par l'utilisateur. En remplissant le formulaire, l'utilisateur attribue des valeurs à certaines variables. Lorsque le bouton d'envoi est cliqué, il y a appel de la page de scripts réferencée par le formulaire. Cette page s'exécute alors en disposant des variables valuées définies dans le formulaire. On peut noter que le fait d'un clic sur le bouton d'envoi n'est pas le seul évenement déclencheur de l'envoi du formulaire et de la page spécifiée, on n'évoque pas ici la possiblité d'autres évenements.

Exemple : une page qui va afficher un bonjour personnalisé au nom rentré par l'utilisateur :

"formulaireNom.html" : "affichageNom.php" :
le code HTML qui affiche le formulaire la page PHP qui traite les données du formulaire
<form action="affichageNom.php" method="POST">
Rentrez ici votre nom : <input type="text" name="nom">
<input type="submit" value="Envoi">
</form>
<?php
$var_Nom=$_POST['nom'];
echo "Bonjour <b>$var_Nom</b>";
?>

Dans ce cas, le texte qui est rentré dans le champ <input type="text" name="nom"> qui apparaît dans le navigateur est associé à la variable nom. La valeur qui est rentrée dans le champ est récupérable dans le code PHP appellé, elle est dans $_POST['nom']. Le code de affichageNom.php consiste en la récupération de la valeur entrée dans le champ et de l'affectation de cette valeur à $var_Nom puis en l'affichage de la valeur de cette variable.

Exercice 3

On donne ci dessous le code d'une page HTML. Créer cette page sur votre espace Web puis concevoir et créer une page PHP qui recupère les 4 variables fournies par le formulaire et les affiche dans un tableau de 4 cases.

<form action="exercice3.php" method="POST">
nom : <input type="text" name="nom">
<br>
Masculin : <input type="radio" name="sexe" value="M">
<br>
Féminin : <input type="radio" name="sexe" value="F">
<br>
age : <input type="text" name="age">
<br>
Donnez un exemple de produit que vous avez acheté en ligne <input type="text" name="boughtOnLine">
<br><br>
<input type="submit" value="Envoi">
</form>

4-Les tests en php

Exemple : une page qui va afficher un bonjour personalisé au nom rentré par l'utilisateur et au genre sélectioné

"formulaireNom2.html" : "affichageNom2.php" :
le code du formulaire la page PHP qui traite les données du formulaire
<form action="affichageNom2.php" method="POST">
Rentrez ici votre nom : <input type="text" name="nom">
<br><br>
Donner votre sexe :
Masculin : <input type="radio" name="sexe" value="M">
<br>
Féminin : <input type="radio" name="sexe" value="F">
<br><br>
<input type="submit" value="Envoi">
</form>
<?php
$var_Nom=$_POST['nom'];
$var_Sexe=$_POST['sexe'];
echo "Bonjour ";
if($var_Sexe=='M')
  echo "Monsieur ";
elseif($var_Sexe=='F')
  echo "Madame ";
echo "<b>$var_Nom</b>";
?>

Ici, dans le formulaire, en plus du champ texte, deux boutons radio apparaissent, ils renseignent la même variable : sexe, le fait de selectionner un bouton induit que l'autre est déselectionné. Ceci ne serait plus vrai si les deux champs ne renseignaient plus la même variable. Le fait de cliquer le bouton radio <input type="radio" name="sexe" value="F"> affecte "F" à la variable sexe. Le fait de cliquer le bouton radio <input type="radio" name="sexe" value="M"> affecte "M" à la variable sexe.

Exercice 4

Reprendre le code PHP de l'exercice 4 et y ajouter un test sur l'age permettant d'afficher dans la case "age" si le visiteur est mineur ou majeur. Puis ajouter un test sur chaque champ devant être renseigné dans le formulaire pour vérifier que ces derniers ne sont pas vides. Pour cela utiliser la fonction boolean empty($var) qui renvoie vrai si la variable $var est vide


5- POST GET et REQUEST

Dans tous les exemples que l'on a considéré précédemment, on a utilisé cette version de la balise form :

<form action="script.php" method="POST">

Ceci signifie que l'on passe les variables dans le corps du message HTTP envoyé la page php. Une autre méthode, qui est la méthode par défaut, est GET :

<form action="script.php" method="GET">

Dans ce cas, les variables ne seront plus passées dans le corps du message HTTP adressé à script.php, l'URL demandée sera alors modifiée. Par exemple, on suppose avoir un formulaire qui affecte respectivement aux variables v1, v2 et v3 les valeurs a1, a2 et a3. Dans ce cas, si c'est la méthode GET qui est utilisée dans l'appel du formulaire script.php, on aura, l'adresse qui apparaître dans le champ URL du navigateur sera :

.../script.php?v1=a1&v2=a2&v3=a3

Pour la récupération des données dans le cas d'un formulaire appellant avec une méthode GET, elle se fait via $_GET. Par exemple, dans le cas de l'exemple, on récupère les différentes variables par $_GET[v1], $_GET[v2] et $_GET[v3].

L'intérêt de cette méthode est de pouvoir passer des paramètres à une page PHP directement dans l'URL, par exemple dans un lien :

<a href="test_GET.php?sexe=M">Je suis un homme</a>
<br>
<a href="test_GET.php?sexe=F">Je suis une femme</a>

On peut traiter ce genre de lien comme un formulaire

<?php
$var_Sexe=$_GET['sexe'];
echo "Bonjour ";
if($var_Sexe=='M')
  echo "Monsieur";
elseif($var_Sexe=='F')
  echo "Madame";
?>

A moins d'avoir besoin de pouvoir appeler la page PHP à partir d'un simple lien comme dans l'exemple ci-dessus on utilise TOUJOURS la méthode POST pour le traitement d'un formulaire.

Exercice 5

Créez deux pages reprenant l'exemple de passage de paramètre à une page PHP par un lien (méthode GET) et vérifiez en le fonctionnement.


6- Interaction avec des champs complexes de formulaire

On a vu précédemment la procédure pour la récupération d'un champ <input type="text"...>, soit un champ de type texte. On s'intéresse aux autres types de champs qui permettent de faire un formulaire. Le fait de remplir le champ texte par une chaine affecte cette chaine comme valeur à la variable.

Exercice 6

Réalisez un questionnaire en ligne en posant 4 questions utilisant chacune un des types ci-dessus (en plus du nom et du prénom de la personne interrogée). Réalisez aussi une page PHP qui affiche les réponses à ce questionnaires.


7- Interaction avec une base de données

Le code suivant ouvre la connexion vers une base de donnnée :

$host=…;
$user=…;
$password=…;
$db=…;
mysql_connect($host,$user,$password);
mysql_select_db($db);

Une fois connecté à un serveur, on peut executer des requêtes SQL grâce à l'instruction mysql_query().

Exemple: On suppose vouloir enregistrer dans une base de données les visites sur un site internet. On dispose de la Base de données de nom "myBD" hébérgée sur le serveur "sql.free.fr", avec le login "mks" et le password "nikita265". On suppose que sur cette base de données, on a une table Enregistrement avec deux champs/colonnes : nom et IP. Pour créer une telle page, l'instruction SQL est :

CREATE TABLE connexions (nom VARCHAR(100), IP VARCHAR(50));

La page HTML appellante est la suivante :

<form action="enrConnex.php" method="POST">
Rentrez ici votre nom : <input type="text" name="nom">
<input type="submit" value="Envoi">
</form>

Et la page enrConnex.php qui va enregistrer les informations dans la base de données est :

<?php
// connection à la base
$host="sql.free.fr";
$user="mks";
$password="nikita265";
$db="myDB";
mysql_connect($host,$user,$password) || die("Pb connexion au serveur");
mysql_select_db($db) || die("Pb connexion à la base");

// lecture des informations
$var_Nom=$_POST['nom'];
$var_ip=$_ENV['REMOTE_ADDR'];//cette instruction permet de récuperer l'adresse IP du navigateur

// execution de la requête d'insertion
$query="INSERT INTO connexions (nom,IP) values ('$var_Nom','$var_ip');";
$test=mysql_query($query);
if($test)
  echo "enregistrement OK";
else
  echo "Pb av $query";
?>

Vous pouvez vérifier qu'une fois ces deux pages installées sur votre site Web (et une fois la table créée dans votre base de donnée), le fait d'appeller la page enrConnexion.php depuis le formulaire crée une occurence dans votre base de données.

Exercice 7

Réalisez une page PHP permettant de stocker les réponses au questionnaire précédent. (Repartez de la page PHP qui permet d'afficher les réponses de l'exercice précédent).

Pour cela il vous faut créer une table MySQL où stocker les réponses. Voici les principes pour créer une telle table :

Vous pouvez maintenant créer la table correspondant à votre questionnaire, et la remplir grâce à la page PHP de traitement du questionnaire. Vérifiez après chaque saisie avec phpMyAdmin que vous remplissez la table correctement.

Éléments de correction(.pdf)