Université Lumière - Lyon 2 Master d`Informatique M1

Transcription

Université Lumière - Lyon 2 Master d`Informatique M1
Université Lumière - Lyon 2
Master d’Informatique M1 - Année 2006-2007
Programmation Web - TDs n◦ 8 − 9 : PHP - Mysql
L. Tougne (http ://liris.cnrs.fr/laure.tougne), 20/11/06
Exercice 1 : Connexion au serveur de bases de données
L’objectif de ce TD est d’utiliser le système de gestion de base de données MySQL, couplé avec php, afin
de mettre en place une base de données accessible via le web.
La base de données sur laquelle nous allons travailler a pour but de gérer le suivi des missions confiées
aux ingénieurs d’une SSII. Pour une première approche du problème, l’entreprise a fourni les exemples de
données suivants :
Ecrire le script connect.php qui définit les paramètres de connexion $host, $user, $bdd et $password
correspondant respectivement au nom du serveur (diserv ou localhost), à votre login (le même que celui de
votre compte linux), à votre base de donnée (votrelogin) et à votre mot de passe (le même que celui pour
votre compte linux). La connexion au serveur sera ensuite effectuée à l’aide de la fonction mysql_connect.
Enfin, vous procéderez à la sélection de la base de données en utilisant la fonction mysql_select_db.
Exercice 2 : Création des tables
1. Avec un script php
Ecrire le script creation_table_ingenieurs.php qui permet de créer la table “ingenieurs” cidessus. La requête correspondante à la création de la table ingénieur sera par exemple de la forme :
CREATE TABLE ingenieurs (idingenieurs INT PRIMARY KEY, nom VARCHAR(20),
prenom VARCHAR(30), agence VARCHAR(30), telephone VARCHAR(4))
2. En utilisant phpMyadmin
PhpMyAdmin est une interface graphique en php pour gérer des bases de données Mysql. Pour accéder à PhpMyAdmin, vous ouvrez une fenêtre de navigateur et vous saisissez comme adresse :
http ://localhost/phpMyAdmin (si vous êtes en local)
ou bien http ://diserv.univ-lyon2.fr/phpMyAdmin.
F IG . 1 – Exemples de données.
La structure relationnelle proposée est constituée de trois tables MySql :
Vous vous connectez ensuite au serveur Mysql en vous identifiant à l’aide de votre login (le même
que sous Linux) et en vous authentifiant avec votre mot de passe (le même que sous Linux).
Si vous avec bien fait l’exercice précédent, vous devez trouver la table “ingenieurs” dans votre base
de données.
Créez à présent les deux autres tables (“missions” et “affectations”) en utilisant l’interface graphique.
Pour cela, vous cliquez sur la base, phpMyAdmin vous propose alors de créer une nouvelle table en
spécifiant son nom et le nombre de champs qu’elle contient. Lorsque ces champs sont remplis, cliquez
sur “exécutez”. La page suivante vous permet de saisir les champs ainsi que leurs caractéristiques (ne
pas oublier de définir les champs clés). Exemple pour la table “missions” :
Cliquez ensuite sur “Sauvegarder”. Vous obtenez alors une page sur laquelle vous retrouvez, entre
autres, la requête qui a été exécutée.
Créez de même la table “affectations” en prenant soin de définir les deux champs comme étant des
clés.
Exercice 3 : Insérer des données dans une table via phpMyAdmin
F IG . 2 – Structure relationnelle proposée.
La structure de vos tables étant créée, nous allons les remplir. Une première méthode consiste à utiliser
tout simplement l’interface phpMyAdmin. Nous allons utiliser cette dernière afin de saisir les coordonnées
des ingénieurs.
1
2
F IG . 5 – Tables “missions” et “affectations”.
F IG . 3 – Exemple de structure pour la table “missions”.
En utilisant les données de l’entreprise, saisissez les coordonnées des trois ingénieurs. Pour cela, vous
sélectionnez la table “ingénieurs” et cliquez sur le lien “insérer”.
Après cette opération, la table “ingenieurs” doit comporter les informations suivantes :
Exercice 5 : Récupérer les données d’une table via une page web.
1. Ecrire les scripts php respectivement appelés affiche_ingenieurs.php et affiche_missions.php
qui permettent d’afficher dans une page html sous forme de tableaux le contenu des tables correspondantes.
Un exemple d’affichage est disponible sur :
http ://diserv.univ-lyon2.fr/˜tougne/affiche_ingenieurs.php.
F IG . 4 – Table “ingenieurs”.
Exercice 4 : Insérer des données dans une table via un script php
Nous allons remplir la table “missions” sans utiliser l’interface phpMyAdmin. Pour cela, nous allons
créer un script php qui va renvoyer directement les informations contenues dans un formulaire html au
serveur Mysql. Premièrement, nous allons coder le fichier "formulaire_mission.html", qui contiendra le
formulaire html de saisie d’une mission, et ensuite nous nous occuperons du fichier "envoi_mission.php",
qui sera exécuté lorsqu’on appuiera sur le bouton "Envoi !" du formulaire.
– formulaire_mission.html : ce formulaire doit proposer tous les champs de texte nécéssaires :
idmissions, mission, lieu et directeur. Pour permettre de lancer la page "envoi_mission.php", on place
un bouton de type submit. Le formulaire enverra les données vers "envoi_mission.php" par la méthode "POST". Attention, mettez les bons "name" pour vos champs de texte, c’est grâce à ces noms
que nous auront la possibilité de récupérer les données.
– envoi_mission.php : ce script récupère les informations saisies dans le formulaire, les affiche, se
connecte à la base de données et insère les données dans la base.
Vous pouvez mettre un lien dans le script envoi_mission.php afin de retourner directement au formulaire afin de faciliter la saisie d’une nouvelle mission.
Après cette opération, la table “missions” doit comporter les informations suivantes :
Remplissez alors avec la méthode que vous voulez la table “affectations”.
2. Deux requêtes supplémentaires :
– Afficher la liste des missions d’un ingénieur donné
Le formulaire formulaire_missions_ingenieur.html permettra à l’utilisateur de saisir le
nom de l’ingénieur dont on souhaite connaître les missions. Ce formulaire appellera ensuite le
script missions_ingenieur.php qui effectuera la requête à la base et en affichera le résultat.
– Afficher la liste des ingénieurs travaillant sur une mission donnée
Le formulaire formulaire_ingenieurs_mission.html permettra à l’utilisateur de saisir le
nom de la mission pour laquelle on souhaite connaître les ingénieurs affecté. Ce formulaire appellera ensuite le script ingenieurs_mission.php qui effectuera la requête à la base et en affichera
le résultat.
Exercice 6 : Importer une base de données.
Nous allons à présent changer de base de données. Mais rassurez-vous, vous n’allez pas devoir constituer les tables vous-même ! Nous allons apprendre à importer une base SQL.
1. Récupérez le fichier SQL à l’adresse suivante :
http ://diserv.univ-lyon2.fr/˜tougne/cirque_base.sql
2. Dans phpMyadmin, cliquez sur l’onglet “SQL”, vous obtenez une fenêtre semblable à celle ci-dessous.
3. Naviguez sur votre disque dur pour récupérer le fichier cirque_base.sql contenant les commandes nécessaires à la création des tables et champs de la base.
4. Cliquez sur “exécutez” !
3
4
Correction
connect.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11
/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/HTML; charset=iso-8859-1" />
<title>Programmation Web - TD 89</title>
<meta name="Author" content="Laure Tougne" />
<meta name="Keywords" content="PHP,Mysql" />
<meta name="Description" content="Master d’Informatique M1, Programmation Web-TD89"/>
</head>
<body>
F IG . 6 – Onglet “SQL”.
Exercice complémentaire : Mise à jour de données.
Nous souhaitons pouvoir modifier la table “accessoire” à l’aide d’une interface conviviale. Autrement
dit, proposez un formulaire permettant de modifier les caractéristiques d’un accessoire donné (couleur,
volume, ratelier, camion).
<?
//Déclaration des paramètres de connexion
$host=localhost;
$user=tougne;
$bdd=tougne;
$password= "...";
//Connexion au serveur
$connexion=@mysql_connect($host,$user,$password)
or die("Erreur de connexion au serveur");
//Connexion à la base
mysql_select_db($bdd,$connexion) or die("Erreur de connexion à la base");
echo "Connexion effectuée avec succès";
?>
</body>
</html>
creation_table_ingenieurs.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/HTML; charset=iso-8859-1" />
<title>Programmation Web - TD 89</title>
<meta name="Author" content="Laure Tougne" />
<meta name="Keywords" content="PHP,Mysql" />
<meta name="Description" content="Master d’Informatique M1, Programmation Web-TD89"/>
</head>
<body>
<?
include("connect.php");
5
6
//Requête de création de la table "ingénieurs"
$requete_ingenieurs="CREATE TABLE ingenieurs (idingenieurs INT PRIMARY KEY,
nom VARCHAR(20), prenom VARCHAR(30), agence VARCHAR(30), telephone VARCHAR(4))";
$resultat=mysql_query($requete_ingenieurs) ;
if ($resultat){
echo "Table ingenieurs créée";
}
else echo "Requete incorrecte pour creation de la table ingenieurs";
?>
</body>
</html>
<title>Programmation Web - TD 89</title>
<meta name="Author" content="Laure Tougne" />
<meta name="Keywords" content="PHP,Mysql" />
<meta name="Description" content="Master d’Informatique M1, Programmation Web-TD89"/>
</head>
<body>
<?
//Récupération des données
$idmissions=$_POST["idmissions"];
$mission=$_POST["mission"];
$lieu=$_POST["lieu"];
$directeur=$_POST["directeur"];
formulaire_mission.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/HTML; charset=iso-8859-1" />
<title>Programmation Web - TD 89</title>
<meta name="Author" content="Laure Tougne" />
<meta name="Keywords" content="PHP,Mysql" />
<meta name="Description" content="Master d’Informatique M1, Programmation Web
- TD89" />
</head>
<body>
echo
echo
echo
echo
echo
echo
echo
<h1>Formulaire de saisie d’une mission</h1>
mysql_query($requete);
<form method="post" action="envoi_mission.php"/>
<p> Numéro d’identification : <input type="text" name="idmissions" size="4"/></p>
<p> Mission : <input type="text" name="mission" size="25"/></p>
<p> Lieu : <input type="text" name="lieu" size="30"/></p>
<p> Directeur : <input type="text" name="directeur" size="20"/></p>
<p><input type="submit" value="envoi!"/></p>
</form>
echo ’<p>Données ajoutées...</p>’;
</body>
</html>
affiche_ingenieurs.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/HTML; charset=iso-8859-1" />
<title>Programmation Web - TD 89</title>
<meta name="Author" content="Laure Tougne" />
<meta name="Keywords" content="PHP,Mysql" />
<meta name="Description" content="Master d’Informatique M1, Programmation Web-TD89"/>
envoi_mission.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/HTML; charset=iso-8859-1" />
7
’<p>Récapitulatif des données saisies </p>’;
’<ul>’;
’<li> Identification mission : ’.$idmissions.’ </li>’;
’<li> Mission : ’.$mission.’ </li>’;
’<li> Lieu : ’.$lieu.’ </li>’;
’<li> Directeur : ’.$directeur.’ </li>’;
’</ul>’;
//Connexion à la base
include("connect.php");
//Requête d’ajout à la table "missions"
$requete="INSERT INTO ‘missions‘ ( ‘idmissions‘ , ‘mission‘ , ‘lieu‘ , ‘directeur‘ )
VALUES (’$idmissions’, ’$mission’, ’$lieu’, ’$directeur’);";
echo ’<p>Cliquez <a href="formulaire_mission.html">ici</a> pour ajouter une autre
mission.</p>’;
?>
</body>
</html>
8
</head>
<body>
<meta name="Keywords" content="PHP,Mysql" />
<meta name="Description" content="Master d’Informatique M1, Programmation Web-TD89"/>
</head>
<body>
<?
//Connexion à la base
include("connect.php");
//Création et envoie de la requête
$requete="SELECT idingenieurs, nom, prenom, agence, telephone FROM ingenieurs";
$resultat=mysql_query($requete);
echo ’<center><table COLS=4 border=1>’;
echo "<tr>
<td> idingenieurs </td>
<td> nom </td>
<td> prenom </td>
<td> agence </td>
<td> telephone </td>
</td>";
//Récupération des résultats
while ($ligne=mysql_fetch_row($resultat)){
$idingenieurs=$ligne[0];
$nom=$ligne[1];
$prenom=$ligne[2];
$agence=$ligne[3];
$telephone=$ligne[4];
<?
//Connexion à la base
include("connect.php");
//Création et envoie de la requête
$requete="SELECT idmissions, mission, lieu, directeur FROM missions";
$resultat=mysql_query($requete);
echo ’<center><table COLS=4 border=1>’;
echo "<tr>
<td> idmissions </td>
<td> mission </td>
<td> lieu </td>
<td> directeur </td>
</td>";
//Récupération des résultats
while ($ligne=mysql_fetch_row($resultat)){
$idmissions=$ligne[0];
$mission=$ligne[1];
$lieu=$ligne[2];
$directeur=$ligne[3];
echo "<tr>
<td> $idmissions </td>
<td> $mission </td>
<td> $lieu </td>
<td> $directeur </td>
</tr>";
}
echo ’ </table></center>’;
echo "<tr>
<td> $idingenieurs </td>
<td> $nom </td>
<td> $prenom </td>
<td> $agence </td>
<td> $telephone </td>
</tr>";
}
echo ’ </table></center>’;
?>
</body>
</html>
?>
</body>
</html>
affiche_missions.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/HTML; charset=iso-8859-1" />
<title>Programmation Web - TD 89</title>
<meta name="Author" content="Laure Tougne" />
9
formulaire_missions_ingenieur.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/HTML; charset=iso-8859-1" />
<title>Programmation Web - TD 89</title>
<meta name="Author" content="Laure Tougne" />
<meta name="Keywords" content="PHP,Mysql" />
10
<meta name="Description" content="Master d’Informatique M1, Programmation Web-TD89"/>
</head>
<body>
<h1>Entrez le nom de l’ingénieur</h1>
<form method="post" action="missions_ingenieur.php"/>
<p> <input type="text" name="nom" size="20"/><input type="submit" value="Chercher"/></p>
</form>
</body>
</html>
missions_ingenieur.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/HTML; charset=iso-8859-1" />
<title>Programmation Web - TD 89</title>
<meta name="Author" content="Laure Tougne" />
<meta name="Keywords" content="PHP,Mysql" />
<meta name="Description" content="Master d’Informatique M1, Programmation Web-TD89"/>
</head>
<body>
<?
//Connexion à la base
include("connect.php");
//Récupération du nom de l’ingénieur
$nom=$_POST["nom"];
</td>";
//Récupération des résultats
while ($ligne=mysql_fetch_row($resultat)){
$idmissions=$ligne[4];
$mission=$ligne[5];
$lieu=$ligne[6];
$directeur=$ligne[7];
echo "<tr>
<td> $idmissions </td>
<td> $mission </td>
<td> $lieu </td>
<td> $directeur </td>
</tr>";
}
echo ’ </table></center>’;
?>
</body>
</html>
formulaire_ingenieurs_mission.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/HTML; charset=iso-8859-1" />
<title>Programmation Web - TD 89</title>
<meta name="Author" content="Laure Tougne" />
<meta name="Keywords" content="PHP,Mysql" />
<meta name="Description" content="Master d’Informatique M1, Programmation Web-TD89"/>
</head>
<body>
<h1>Entrez le nom de la mission</h1>
//Création et envoie de la requête
$requete="SELECT nom, idingenieurs, lieningenieurs, lienmissions, idmissions, mission,
lieu, directeur
FROM ingenieurs, affectations, missions WHERE nom = ’$nom’ AND
idingenieurs = lieningenieurs AND lienmissions = idmissions";
$resultat=mysql_query($requete);
echo
echo
<td>
<td>
<td>
<td>
’<center><table COLS=4 border=1>’;
"<tr>
idmissions </td>
mission </td>
lieu </td>
directeur </td>
11
<form method="post" action="ingenieurs_mission.php"/>
<p> <input type="text" name="mission" size="20"/><input type="submit"
value="Chercher"/></p>
</form>
</body>
</html>
ingenieurs_mission.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
12
<meta http-equiv="Content-Type" content="text/HTML; charset=iso-8859-1" />
<title>Programmation Web - TD 89</title>
<meta name="Author" content="Laure Tougne" />
<meta name="Keywords" content="PHP,Mysql" />
<meta name="Description" content="Master d’Informatique M1, Programmation Web-TD89"/>
</head>
<body>
?>
</body>
</html>
<?
//Connexion à la base
include("connect.php");
//Récupération du nom de l’ingénieur
$mission=$_POST["mission"];
//Création et envoie de la requête
$requete="SELECT mission, idmissions, lieningenieurs, lienmissions, idingenieurs, nom,
prenom, agence, telephone FROM ingenieurs, affectations, missions WHERE
mission = ’$mission’ AND idmissions = lienmissions AND lienmissions = lieningenieurs";
$resultat=mysql_query($requete);
echo ’<center><table COLS=4 border=1>’;
echo "<tr>
<td> idingenieurs </td>
<td> nom </td>
<td> prénom </td>
<td> agence </td>
<td> téléphone </td>
</td>";
//Récupération des résultats
while ($ligne=mysql_fetch_row($resultat)){
$idingenieurs=$ligne[4];
$nom=$ligne[5];
$prenom=$ligne[6];
$agence=$ligne[7];
$telephone=$ligne[8];
echo "<tr>
<td> $idingenieurs </td>
<td> $nom </td>
<td> $prenom </td>
<td> $agence </td>
<td> $telephone </td>
</tr>";
}
echo ’ </table></center>’;
13
14

Documents pareils