10
Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des bases de données avec PHP Au cours de ce TP, vous allez voir comment PHP permet aux utilisateurs, une interaction avec le système. Premier pas avec les formulaires Les formulaires permettent aux utilisateurs de saisir des données ; ces données sont ensuite traitées par le serveur. Par exemple, lorsque vous vous connectez sur le site de la SNCF, vous saisissez les caractéristiques du trajet qui vous intéresse puis le serveur traite votre demande et vous affiche les trains correspondant. Le serveur peut traiter lui-même la demande de l’utilisateur ou l’enregistrer / la transmettre à un être humain. C’est le cas lorsque vous écrivez des messages dans des forums électroniques. Ou bien encore lorsque vous rédiger votre avis sur un site. La déclaration d'un formulaire La définition des différents éléments du formulaire se fait en utilisant la balise <form>. Il ne faut pas oublier d’écrire la balise </form> pour déclarer la fin du formulaire. L'action à réaliser pour traiter le formulaire doit être précisée en utilisant les deux attributs suivants : - L'attribut action : désigne le fichier PHP qui va traiter, sur le serveur, les informations saisies dans le formulaire; - L'attribut method : définit la méthode de transfert des données vers le serveur. Les deux valeurs possibles sont get et post. Dans la suite de ces TPs, nous ne verrons que la méthode post. La syntaxe habituelle est donc : <form method="post" action="traiteform.php"> <fieldset> <legend>Ceci est le titre de mon formulaire</legend> <!-- la suite sera le corps du formulaire --> ... </fieldset> </form> La balise <fieldset> permet, à l'intérieur d'un formulaire, de créer des blocs visuels permettant d'améliorer la présentation des formulaires. La balise <legend> sert ensuite à donner un titre au bloc de formulaire. Les éléments de formulaires Les éléments de formulaires sont répartis en 3 classes : 1

Notion 5 : PHP, formulaires et BDD · Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des bases de données avec PHP Au cours de ce TP, vous allez

  • Upload
    buiminh

  • View
    219

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Notion 5 : PHP, formulaires et BDD · Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des bases de données avec PHP Au cours de ce TP, vous allez

Module Com231A - Web et Bases de DonnéesNotion 5 : Formulaires et utilisation des bases de

données avec PHP

Au cours de ce TP, vous allez voir comment PHP permet aux utilisateurs, une interactionavec le système.

Premier pas avec les formulaires

Les formulaires permettent aux utilisateurs de saisir des données ; ces données sont ensuitetraitées par le serveur.

Par exemple, lorsque vous vous connectez sur le site de la SNCF, vous saisissez lescaractéristiques du trajet qui vous intéresse puis le serveur traite votre demande etvous affiche les trains correspondant.

Le serveur peut traiter lui-même la demande de l’utilisateur ou l’enregistrer / la transmettreà un être humain.

C’est le cas lorsque vous écrivez des messages dans des forums électroniques. Ou bienencore lorsque vous rédiger votre avis sur un site.

La déclaration d'un formulaireLa définition des différents éléments du formulaire se fait en utilisant la balise <form>. Il

ne faut pas oublier d’écrire la balise </form> pour déclarer la fin du formulaire. L'action àréaliser pour traiter le formulaire doit être précisée en utilisant les deux attributs suivants :

- L'attribut action : désigne le fichier PHP qui va traiter, sur le serveur, lesinformations saisies dans le formulaire;

- L'attribut method : définit la méthode de transfert des données vers le serveur. Lesdeux valeurs possibles sont get et post. Dans la suite de ces TPs, nous ne verrons quela méthode post.

La syntaxe habituelle est donc : <form method="post" action="traiteform.php"> <fieldset> <legend>Ceci est le titre de mon formulaire</legend> <!-- la suite sera le corps du formulaire --> ... </fieldset>

</form>

La balise <fieldset> permet, à l'intérieur d'un formulaire, de créer des blocs visuelspermettant d'améliorer la présentation des formulaires. La balise <legend> sert ensuite àdonner un titre au bloc de formulaire.

Les éléments de formulairesLes éléments de formulaires sont répartis en 3 classes :

1

Page 2: Notion 5 : PHP, formulaires et BDD · Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des bases de données avec PHP Au cours de ce TP, vous allez

- input : Champs de saisie de texte et différents types de boutons

- select : Liste (menus déroulants et ascenseurs)

- textarea : Zone de saisie de texte libre

L'attribut name est obligatoire, car c'est lui qui permet d'identifier les données côté serveuret ainsi de récupérer le contenu saisi par l'utilisateur. Il doit être unique, sauf dans le cas d'unensemble composé de plusieurs éléments (boutons radio par exemple). Seuls les boutonssubmit et reset n'ont pas besoin de cet attribut.

L'attribut value est commun à ces balises, mais son rôle est différent selon le typed'élément utilisé.

Ces différents exemples sont illustrés sur le site du module de com231a.

L’élément INPUTCet élément est utilisé pour définir des zones d'entrée de texte simple, des boutons, des

cases à cocher ou des boutons radio. Le type d'élément dont il s'agit sera précisé en utilisantl'attribut type.

Type Code Résultat

sans <input name="ident" />

<input name="ident" value="Par défaut" />

submit <input type="submit" value="Envoyer" name="Envoyer" />

checkbox

<input type="checkbox" name="pfm[]" value="linux" checked = "checked" /> Linux<br/>

<input type="checkbox" name="pfm[]" value="dos" /> Dos<br/>

<input type="checkbox" name="pfm[]" value="win" /> Windows

radio<input type="radio" name="media" value="cd" checked= "checked"/> CD-ROM<br/>

<input type="radio" name="media" value="dk" /> Disquette

password <input type="password" name="pass" size=”4”/>

reset <input type="reset" value="Effacer" />

2

Page 3: Notion 5 : PHP, formulaires et BDD · Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des bases de données avec PHP Au cours de ce TP, vous allez

L'élément SELECTCet élément sert à définir des listes (menus déroulants ou ascenseurs). Il est utilisé avec

l'élément <option>.

Code Résultat<select name="menu"> <option value="pomme">Pomme</option> <option value="banane">Banane</option> <option value="orange">Orange</option> <option value="citron" selected= "selected"> Citron</option> <option value="peche"> Pêche</option> <option value="poire"> Poire</option></select >

<select name="menu" size= "4"> ...</select>

L'élément TEXTAREAIl permet de créer une zone de texte de plusieurs lignes. Il faut spécifier sa taille avec les

attributs rows et cols.

Code Résultat

<textarea name="comm" rows="10" cols="40">

Tapez vos commentaires ici

</textarea>

Traitement des formulaires

Il s'agit de récupérer les données saisies par l'utilisateur et de les traiter. Il existe quatretechniques :

- La passerelle CGI : C’est la technique la plus classique, elle consiste à utiliser lapasserelle CGI (Common Gateway Interface) pour exécuter un programme detraitement sur le serveur. Le programme en question recevra toutes les données saisiespar l'utilisateur et construira une nouvelle page en réponse.

- Les scripts : Ils permettent de réaliser de petites applications simples sans interactionavec le serveur.

3

Page 4: Notion 5 : PHP, formulaires et BDD · Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des bases de données avec PHP Au cours de ce TP, vous allez

- Se faire expédier les données par mail : Cette méthode reste la plus simple à utilisermême si elle ne permet pas de traiter un grand nombre de données. Il suffit d'indiquerune adresse électronique comme action. C’est ici un être humain qui traite les données.<form action="mailto:[email protected]" method="POST">

- Envoyer les données à un autre fichier PHP pour faire des traitements sur les donnéesrecueillies. Par exemple, le fichier PHP exécutera une requête SQL avec les champssaisis par l’utilisateur.

C’est cette dernière technique que nous allons utiliser dans le cadre de ce module.

Dans tous les cas, le formulaire doit comporter un élément submit car c’est encliquant sur ce bouton que l’utilisateur valide et envoie ses données au serveur. Unformulaire doit donc au minimum comporter les balises suivantes :

<form action="traite.php" method="post">…<input type="submit" value="ok"

/></form>

Exercice 1Reproduisez la page HTML ci-dessous. Nommez-la avis_site.html.

Les données du formulaire seront traitées par le fichier PHP "traite_avis.php".

Remarque : la première ligne du formulaire est donc :<form action="traite_avis.php" method="post">...</form>

4

Page 5: Notion 5 : PHP, formulaires et BDD · Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des bases de données avec PHP Au cours de ce TP, vous allez

Voici le fichier PHP traite_avis.php qui traite le formulaire ci-dessus.

Intégrez ce code dans une page PHP et testez le avec votre fichier avis_site.html, enchoisissant correctement les noms de vos variables.

Vous pouvez consulter l'exemple de formulaire et de traitement de ce formulaire mis en lignesur le site du module pour vous aider.

<?php// tester si le formulaire a été soumisif(isset($_POST["valider"])) { //tester si les cases du formulaire ne sont pas vides if(!empty($_POST["nom"])&&!empty($_POST["prenom"])&&!empty($_POST["mail"])) { // récupération des valeurs des champs

$nom = $_POST["nom"];$prenom = $_POST["prenom"];$avis = $_POST["avis"];

// utilisation des valeurs

echo "Bonjour ".$prenom." ".$nom. " !<br/>" ;echo "Merci d' avoir visité notre site ! <br/>" ;

if(strcmp($avis,"oui") == 0) echo "Nous serons contents de vous accueillir la prochaine fois <br />";

else echo "Nous regrettons de ne plus jamais vous revoir <br />";

} else echo "Toutes les cases du formulaire ne sont pas remplies";

}

?>

Dans cet exemple, on constate que le fichier PHP n’enregistre pas les données del’utilisateur dans une base de données mais lui affiche simplement un message en retour.

Nous allons voir maintenant comment enregistrer les données saisies dans le formulaireafin de les stocker dans une base de données.

Lien entre PHP et les bases de données

Il y a deux étapes pour utiliser une base de données à partir de PHP :

1. Se connecter à la base de données

2. Exécuter des requêtes (les requêtes peuvent être construites à partir de données saisiespar un utilisateur via un formulaire).

5

Page 6: Notion 5 : PHP, formulaires et BDD · Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des bases de données avec PHP Au cours de ce TP, vous allez

Connexion à une base de donnéesComme pour vous connecter au réseau de l’université, il vous faut un login et un mot de

passe pour travailler avec une base de données. La base de données n’accepte que desconnexions identifiées.

PHP doit donc fournir à la base de données des informations : le login et le mot de passecorrespondant à la base avec laquelle il veut travailler.

Structure PHP à utiliser pour se connecter à une base de données :<? php

/*paramètres de connexion à la base de données */ $serveur = "info.univ-lemans.fr"; $utilisateur = "com231a_user";

$mdp = "com72"; $base = "com231a";

/*connexion au serveur où se trouve la base de données etmessage d'erreur si la connexion a échoué */$lienBase = mysql_connect($serveur,$utilisateur, $mdp) ORDIE ('Problème au niveau du serveur');

/*sélection de la base de données au niveau du serveur etaffichage d’un message d’erreur si la connexion a étérefusée */mysql_select_db($base, $lienBase) OR DIE ('Impossible dese conecter à la base');

?>

Une fois ce code généré, la connexion à la base de données est établie et il est possibled’exécuter des requêtes d’insertion, de sélection ou de suppression de données.

Requêtes vers la base de donnéesLa structure de base pour faire des requêtes est la suivante :

<? php/*Connexion – code donné précedemment*/

$serveur = "info.univ-lemans.fr"; $utilisateur = "com231a_user";

$mdp = "com72"; $base = "com231a";

/*écriture de la requête SQL stockée dans une variable */$requete = " ... ";

/* envoi de la requête et stockage du résultat dans unevariable */$reponse = mysql_query($requete);

?>

6

Page 7: Notion 5 : PHP, formulaires et BDD · Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des bases de données avec PHP Au cours de ce TP, vous allez

Insérer/supprimer des nouveaux élémentsPour la requête d’insertion en elle-même voir la notion 3 sur SQL à la section "insérer des

éléments".

Exemple dans le cas où la requête est une requête d’insertion :<? php

//Connexion…//Ecriture de la requête $requete="INSERT INTO Equipes VALUES(64, 'Corvette racing', 'Corvette C5 R', 'LM-GTS');";

//Envoi de la requête$reponse = mysql_query($requete);

//Affichage du bon déroulement de la requêteif($reponse) // si la réponse est correcte alors on affiche le texte suivant

echo "Exécution réussie" ;else //sinon on affiche ce texte :

echo "Exécution non réussie" ;?>

Sélection d’éléments dans la basePour la requête de sélection en elle-même voir la notion 3 sur SQL, à la section

"sélectionner des données".

Exemple dans le cas où la requête est une requête de sélection :<?php

//Connexion…

//Ecriture de la requête (variable $Requete)$requete="SELECT Numero, Nom FROM Equipes;";

//Envoi de la requête$reponse = mysql_query($Requete);

//Traitement ligne par ligne de la réponsewhile ($donnees = mysql_fetch_array($reponse) ){

//Affichage des lignes de données, champ par champecho "Num de l’équipe :". $donnees[0] ;echo "Nom de l’équipe : ". $donnees[1];

// autre possibilité echo "Num de l’équipe : ".$donnees['Numero'] ; echo "<br />Nom de l’équipe : " .$donnees['Nom'];

}?>

Dans l’exemple ci-dessus, le résultat de la requête est affiché à l’écran.

$donnees[0] ou $donnees['Numero'] correspond au premier champ demandé dansla requête : Numero.

$donnees[1] ou $donnees['Nom']correspond au second champ demandé dans larequête : Nom.

7

Page 8: Notion 5 : PHP, formulaires et BDD · Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des bases de données avec PHP Au cours de ce TP, vous allez

Exercice 21. Créez une page PHP qui permet de :

a. Se connecter à une base de données

b. D’exécuter des requêtes dans la table de données « Equipes » (cf. Notion 3)

● Une requête de sélection de tous les éléments de la table.

● Une requête de sélection des éléments de la table avec restriction sur leséquipes du type « LM-P1 ».

● Une requête d’insertion d’une nouvelle équipe.

c. D’afficher le résultat de chaque requête champ par champ et ligne par ligne.

2. Enregistrez cette page sous le nom essai_requete.php dans votre dossier« public_html » et visualisez-la dans votre navigateur.

Utilisation des formulaires pour exécuter des requêtes SQL

L’exécution de requêtes vers une base de données SQL via un formulaire s’effectue enplusieurs étapes :

(1) L’utilisateur complète un formulaire;

(2) L’utilisateur clique sur le bouton de type « submit »;

(3) Les données saisies par l’utilisateur sont envoyées à un fichier PHP;

(4) Le fichier PHP construit la requête SQL à partir des données saisies et exécute larequête;

(5) La base de données renvoie le résultat de la requête au fichier PHP;

(6) Le fichier PHP traite le résultat :

a. Si c’est une requête d’insertion de données, le fichier PHP peut afficher àl’utilisateur que l’insertion s'est bien passée;

b. Si c’est une requête de sélection de données, le fichier PHP affiche à l’utilisateurle résultat de la requête.

8

Page 9: Notion 5 : PHP, formulaires et BDD · Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des bases de données avec PHP Au cours de ce TP, vous allez

Par exemple :

1. Création d’un formulaire HTML qui demande une date de course et un nom de course

fichier : formulaire_course.html<html><head> <title>Formulaire</title></head><body><form action="creation_insertion.php" method="post"><table>

<tr><td><b>Date de la course (aaaa/mm/jj) :</b></td><td><input name="datecourse" size="50"></td>

</tr><tr>

<td><b>Nom de la course : </b></td><td><input name="nomcourse" size="50"></td>

</tr></table><input type=submit></input><br /></form></body></html>

2. Traitement des données du formulaire

La requête concerne la base de données TempsCoureurs

fichier : creation_insertion.php<?php

// Récupération des données saisies dans des variables if (!empty($_POST["datecourse"]) && !empty($_POST["nomcourse"])) { $datecourse = $_POST["datecourse"]; $nomcourse = $_POST["nomcourse"];

//Connexion à la base de données (voir plus haut) …

//Ecriture de la requête $requete="INSERT into TempsCoureurs values('$datecourse','$nomcourse')";

//Envoi de la requête $reponse = mysql_query($requete);

//Affichage du bon déroulement de la requête à l’utilisateur if($reponse)

echo "Exécution réussie"; else

echo "Exécution non réussie";

} else { // cas où les données n'ont pas été saisies echo "les champs n'ont pas été remplis"; }

?>

9

Page 10: Notion 5 : PHP, formulaires et BDD · Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des bases de données avec PHP Au cours de ce TP, vous allez

Exercice 31. Créer un fichier HTML qui permet à une équipe de saisir les caractéristiques de son équipe.

2. Créer le fichier traite_equipe.php (sur l’exemple des fichiers ci-dessus) qui permetd’ajouter l’équipe saisie par l’utilisateur sans la table « Equipes ».

10