<< précédent | index | suivant >> |
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
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.
Exercice 1
Créer la page .html donnant le résultat ci-dessus.
<html xmlns="http://www.w3.org/1999/xhtml" ><head ><title>Mon premier exercice en html</title></head >
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"/>
<link href="td.css" content="text/css" rel="stylesheet"/><body ></html></body >Ma première page en html
Ce code permet de créer une page html qui gère les accents et qui affiche le texte suivant : "Ma première page en html". Les balises comprises entre la balise <head > et </head >
contient des informations sur la page comme le type d'encodage utilisé. Le contenu qui sera affiché sur la page elle même est toujours spécifié entre les balises <body >
et </body >
.
<h2 > Dénomination</h2>
<p >
L'anglais Hypertext Markup Language est rarement traduit littéralement en langage de balisage d'hypertexte1. On utilise</p>
généralement l'abbréviation HTML, parfois même en répétant le mot langage comme dans langage HTML. Hypertext est parfois
écrit Hyper Text pour marquer le T de l'abbréviation HTML.
<p >
Le public non averti parle parfois de HTM au lieu de HTML, HTM étant l'extension de nom de fichier tronquée à trois lettres, une</p>
limitation qu'on trouve sur d'anciens systèmes d'exploitation de Microsoft.
Sauvegardez et exécutez. La balise <p > est utilisé pour créer des zones de textes équivalent à des paragraphes.
<p>Ce qui suit est extrait de la page wikipédia < a href = "http://fr.wikipedia.org/wiki/Hypertext_Markup_Language" >Vous pouvez cliquez pour vérifier </a> </p>
Sauvegardez et exécutez. La balise <a > permet de faire des liens vers d'autres pages internet
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 :
génère le code HTML suivant :
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 :
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:
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 :
est absolument équivalent du point de vue du client à l'appel à une page PHP de type :
ce qui est également équivalent à :
Exercice 2
" Durant la première moitié des années 90, avant l'apparition des technologies web comme JavaScript, les feuilles de styles et le Document Object Model, l'évolution de HTML a dicté l'évolution du World Wide Web".
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
Cliquez sur le bouton "Nouveau" de l'éditeur et copiez le code ci-dessous. Enregistrez le sous le nom "formulaire.html"
<html xmlns="http://www.w3.org/1999/xhtml" ><head ><title>Mon premier formulaire html </title></head >
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"/>
<link href="td.css" content="text/css" rel="stylesheet"/><body ></html ><form action="exercice3.php" method="POST"></body >
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>
La balise <form action="exercice3.php" method="POST"> permet de créer un formulaire dont les données enregistrez par n'importe quel utilisateur de la page seront envoyées via le tableau $_POST à la page exercice3.php
<html xmlns="http://www.w3.org/1999/xhtml" ><head ><title>Mon premier formulaire html </title></head >
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"/>
<link href="td.css" content="text/css" rel="stylesheet"/><body ></html ><table border="1"></body >
<tr>
<td>Nom</td><td>Sexe</td><td>Age</td><td>Produit</td>
</tr>
</table>
Compilez le. Ce code vous affiche un tableau (balise table) comportant une ligne (balise <tr>) et 4 colonnes (balise <td>)
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
Dans tous les exemples que l'on a considéré précédemment, on a utilisé cette version de la balise form :
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 :
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 :
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 :
On peut traiter ce genre de lien comme un formulaire
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.
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.
Dans le cas d'un bouton radio, on a plusieurs cas : différents boutons qui renseignent une même variable, dans ce cas, on renseigne l'attribut 'name' des différents input radio par le même nom :
Lorsque l'utilisateur clique un bouton radio, il affecte à la variable spécifiée en name la valeur spécifiée en value. Dans ce cas, la sélection d'un bouton entraîne automatiquement la déselection de l'autre bouton radio : une même variable ne peut pas avoir deux valeurs en même temps. différents boutons peuvent renseigner différentes variables :
Ici les deux boutons peuvent être séléctionnés simulanément : le fait de cliquer le premier bouton affecte "M" à la variable sexe, le fait de cliquer le troisième bouton affecte "jeune" à la variable age.
Dans ce cas, on définit deux variables : c1 et c2, pour savoir si une checkbox particulière a été validée : isset($_POST['c1']) renvoie TRUE si la ckeckbox c1 a été validée, FALSE sinon.
Par exemple, soit un formulaire défini avec la méthode POST et qui contienne la code :
Dans ce cas, dans la page PHP appellée, on peut avoir une instruction de controle du type :
Les menus de choix déroulants permettent comme les champs 'radio' de choisir une valeur parmi un ensemble de proposition. Mais au lieu de cocher un bouton, on propose à l'utilisateur de choisir une valeur dans une liste déroulante.
Le nom de la variable est déterminé par l'attribut 'name' de la balise <select>. La balise <select> encadre des balises <options> qui décrivent les différents choix proposés. L'attribut 'value' de la balise <options> précise la valeur renvoyée par le formulaire, et le texte contenu dans la balise est celui affiché à l'utilisateur.
Si l'on souhaite faire saisir un texte assez long à l'utilisateur, ce texte pouvant contenir des saut de lignes, on utilisera un type de champ particulier : la zone de texte.
Notez qu'il est important de fermer la balise <textarea>, tout ce qui est compris dans la balise est considéré comme le texte par défaut présenté dans la zone de saisie. Les attributs 'rows' et 'cols' indiquent respectivement le nombre de lignes et la longeur des lignes de la zone de saisie. Le texte se manipule en PHP de la même manière que les chaînes de caractères saisies avec les champs <input type="text">.
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.
Le code suivant ouvre la connexion vers une base de donnnée :
Une fois connecté à un serveur, on peut executer des requêtes SQL grâce à l'instruction mysql_query().
Exercice 7
On souhaite créer une nouvelle table dans notre base de données. Cette table appelée connexion comportera deux champs : nom (varchar(100)) et IP(varchar(50)). L'instruction SQL pour créer une table est : create table nomdelatable (nomChamp1(type),nomChamp2(type),...). Pour cela créez un fichier php appelée exo7a.php contenant le code suivant :
Reprenez le fichier .php précédent et modifiez le pour insérer une connexion de nom "test" et d'IP "91.198.174.225"
Créez un nouveau fichier php appelé exercice7.php. Ce fichier va permettre de mémoriser dans votre base de données le client ou le produit dont les champs sont remplis via le formulaire de l'exercice 6.
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.
En PHP, on va considérer les requêtes SQL comme des chaînes de caractères. Par exemple :
Ces chaînes de caractères vont être passées au serveur sql qui va exécuter :
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 :
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
Copiez le code précédent dans un nouveau fichier, en n'oubliant pas de modifiez les variables $password,$user,$db, et exécutez le.
Créez un nouveau fichier php qui affiche les clients de votre base de données sous la forme d'un tableau.