Informatique décisionelle
-
TD 3 - PHP / Gestion d'un formulaire web

<< précédent index suivant >>

Présentation générale

Dans ce 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é :

Réalisation, traitement, stockage et restitution du formulaire (Exercices marqués ***: 7,8,9-1 et 9-2).

N.B. : ne vous précipitez pas sur les exercices notés, les exercices 1 à 6 sont nécessaires pour passer à la suite.

Ressources

Pour vous aider en HTML


1- Notions de base sur le code PHP

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:


2- 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

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 qui apparaît dans le navigateur est associé à la variable $_POST['nom']. Le code de $var_Nom puis en l'affichage de la valeur de cette variable.

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

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>

Exercice
Rajouter un test sur chaques données pour vérifier qu'elles ne soient pas vides. Reprendre le code PHP généré à l'exercice précédent. Rajouter des tests sur les valeurs des variables récupérées du formulaire pour vérifier notamment qu'elles soient non nulles.


6- 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

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.


7- 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

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.


8- 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

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.


9- Traitement du renvoi d'un SELECT

On donne ici le code général pour afficher le résultat d'une requête SELECT. Voici comme exemple comment afficher le contenu de la table créer dans l'exmple précédent.

<html>
<body>
// 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");

// execution de la requête
$query = "SELECT * FROM connexions;"
$result=mysql_query($query);
while($row=mysql_fetch_array($result))
{
  echo "Nom: ".$row['nom'].", IP:".$row['IP']."<br>";
}
</body>
</html>

En PHP, on va considérer les requêtes SQL comme des chaînes de caractères. Par exemple :

$query = "SELECT * FROM connexions;";

Ces chaînes de caractères vont être passées au serveur sql qui va exécuter :

SELECT * FROM connexions;

La fonction mysql_query($query); appelle l'éxecution de la requête sur la base séléctionnée précédemment, et renvoie le résultat de cette exécution : un tableau à plusieurs lignes avec les colonnes selectionnées. Ici d'après la requête, on renvoie un tableau à deux colonnes "nom" et "IP" avec un nombre de lignes qui correspond au nombre d'enregistrements. L'instruction suivante :

$row=mysql_fetch_array($result);

renvoie une ligne du résultat de la requête sous forme d'un tableau associatif. On peut donc ensuite traiter chaque colonne séparement : echo "$array['nom']" etc...

Comme la requête renvoie plusieurs lignes, on itère l'appel à mysql_fetch_array() avec une boucle while, qui s'arrête lorsque toutes les lignes ont été traitée.

*** Exercice 1

Créer une page qui permet d'afficher dans un tableau toutes les réponses faites au questionnaire.

*** Exercice 2

Créer une page qui permet d'afficher le pourcentage de réponse pour chaque réponse qualitative (radio, checkbox, select).