Informatique décisionelle
-
TD 4 - 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é :

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


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


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().

Exercice 7


8- 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'exemple précédent.

<html>
<body>
// connection à la base
$host="vds419.sivit.org";
$user="...";
$password="...";
$db="...";
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 8