Informatique et Techniques Numériques en Economie
-
TD 2 - Introduction à PHP : quelques techniques, exemples et exercices

<< précédent index suivant >>

1- Présentation générale

Dans ce TD, on aborde le langage PHP. Dans la construction de votre site Web, le langage PHP permet d'afficher le prix du produit choisi par l'utilisateur et d'enregistrer les actions de l'utilisateur : achat ou consultation simple de devis. Comme application nous vous proposons d'apprendre à gérer un questionnaire en ligne


2- Compétences à acquérir


3- Réferences sur le code PHP

On donne ici quelques élements de réferences sur le code PHP.

On rappelle que le code PHP s'éxecute sur le serveur. Le code PHP est inséré dans le code HTML entre deux balises <?php et ?>. Dans le cas où il n'y a pas de code php dans une page html, la page sera renvoyée telle quelle. Une page qui contient qui contient du php doit être enregistrée au format php. Lorsque cette page sera appellée, le code PHP sera exécuté et la page html résultante sera renvoyée. Les instructions html seront renvoyées telles qu'elles, par contre, tout ce qui est contenu entre deux balises <?php et ?> ne sera pas renvoyé tel quel.

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

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

correspondra à l'affichage dans la page html résultante de :

<u>chaine</u>

cette instruction étant ensuite interprétée par le navigateur qui a appellé la page php et reçoit la page html résultante, ce qui affichera :

chaine

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 au format .php


4- Ecriture de code HTML via PHP

Ici on veut créer une page php qui génére une page HTML qui affiche Bonjour. 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é.


5- Recuperation de données d'un formulaire

On illustre dans ce paragraphe l'envoi de données contextuelles par un formulaire HTML, si vous avez besoin d'un rappel sur les pages HTML : Document html. 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 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 :

Le code du formulaire Une page php qui reçoit les données du formulaire : "affichageNom.php"
<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.

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

Le code du formulaire Une page php qui reçoit les données du formulaire : "affichageNom2.php"
<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.

Il existe une autre variables scalaire super-globale qui est : $_REQUEST et qui contient l'ensemble des couples (variables,valeurs) passés par $_GET et $_POST.

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=…;
$password=…;
$user=…;
$db=…;
$id_connection=mysql_connect($host,$user,$password);
mysql_select_db($db,$id_connection);

Il convient ici de completer en affectant à $host le nom du serveur de bases de données qu'on utilise, en affectant à $user votre login pour ce serveur et à $password le password associé au login utilisé. $db doit se voir affecter le nom de la base de données avec laquelle vous voulez travailler. L'instruction mysql_connect ouvre la connection et mysql_select_db selectionne la base de données avec laquelle vous allez travailler. Dans le cas d'un compte free de login "compte" et de password "mks", on a :

$host="sql.free.fr";
$password="mks";
$user="compte";
$db="compte";
$id_connection=mysql_connect($host,$user,$password);
mysql_select_db($db,$id_connection);

On suppose vouloir enregistrer dans une base de données toute occurence de connexion à une page PHP : enrConnex.php (enregistrement du nom saisi dans le formulaire appelant et de l'adresse IP courante). On dispose de la Base de données de nom "myBD" hébérgée sur le serveur "sql.free.fr" et avec 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, un ordre de création possible est :

CREATE TABLE Enregistrement (nom VARCHAR(100), IP VARCHAR(50));
La page 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>

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

<?php
$var_Nom=$_POST['nom'];
$var_ip=$_ENV['REMOTE_ADDR'];//cette instruction permet de récuperer l'adresse IP du navigateur appellant dans $var_ip
$test=mysql_connect("sql.free.fr",$myBD,$pass);
if($test==0)
  echo "Pb connexion<br>";
$test=mysql_select_db($myBD);
if(!$test)   echo "Pb selection base<br>";
$query="INSERT INTO Enregistrement (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 espace 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. Explication de ce code : ici, mysql_connect() est la fonction php qui ouvre la connexion vers le serveur, en se connectant à un serveur de BD, on se connecte à un ensemble de BD, il faut préciser celle avec laquelle vous voulez interagir : mysql_select_db() prend en argument le nom de votre BD (votre login chez Free) et permet de sélectionner la BD avec laquelle vous allez travailler. $query="..." récupère une chaine de caractère, noter qu'on utilise ' à l'intérieur de la chaine et " pour délimiter la chaine. mysql_query($query) appelle l'execution du code contenu dans $query qui sera traité comme du code SQL et doit donc avoir une syntaxe SQL correcte.

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 récupérer le code d'un SELECT. Comme la plupart des méthodes proposées ici, il en existe d'autres pour faire les mêmes choses, ceci est d'autant vrai dans ce dernier paragraphe que l'on présente des techniques qui demandent une plus grande quantité de code. On suppose avoir une page HTML appelante qui fournit des variables nom et sexe. Ici, on va accéder à une base de données pour renvoyer l'age qui correspond à ce nom de client, en supposant avoir une table client, attention : ici on simplifie l'exemple en ne traitant pas l'erreur qui peut être liée au fait que le client n'existe pas dans la table.

<html>
<body>
<?php
$variables=$_GET;
$nom=$variables["nom"];
$sexe=$variables["sexe"];
$host=…;$password=…;$user=…;$db=…;
$id_connection=mysql_connect($host,$user,$password);
mysql_select_db($db,$id_connection);
$query="SELECT age FROM Client WHERE Client.nom=\"$nom\";";
$result=mysq_query($query);
$age=$row[0];
echo "Vous avez $age";
mysql_close($id_connection);
?>
</body>
</html>

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

$query="SELECT age FROM Client WHERE Client.nom=\"$nom\";";

Ces chaînes de caractères vont être passées au serveur sql qui va exécuter (si la variable $nom a la valeur "Dorat") :

SELECT age FROM Client WHERE Client.nom="Dorat";

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 à une colonne "age" avec un nombre de lignes qui correspond au nombre de cas où on a Client.nom=$nom dans la table Client. L'instruction suivante :

$row=mysql_fetch_row($result);

renvoie une ligne du résultat de la requête sous forme d'un tableau. On peut donc ensuite traiter les colonnes : $row[0] etc...

mysql_close($id_connection);

Cette dernière instruction ferme ici la connection au serveur.

Ici, on suppose avoir une base de données avec une table Client comportant une colonne nom, pour afficher l'ensemble des noms de client, à supposer que la connexion à la base de données a déjà été établie :

...
$result=mysql_query("SELECT nom FROM Client;");
$row=mysql_fetch_row($result)
while($row)
{
  echo "$row[0]<br>";
  $row=mysql_fetch_row($result);
}
...

Ici tant que $row est non vide, c'est à dire tant que l'on a des lignes dans la réponse du SELECT, on lance un nouveau mysql_fetch_row pour obtenir la ligne suivant.

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


10- Intégration des technologies et mobilisation pour le site

Proposer un code pour les pages categorie.php, devis.php et achat.php.