Pages - Menu

Pages

Accès objet à MySQL avec PHP – exercices corrigés – TP et solutions


Accès objet à MySQL avec PHP – exercices corrigés – TP et solutions

Le but de ces exercices est de réaliser avec SQLite la même application que
celle réalisée avec MySQL au cours des exercices précédent.

Exercice 1:

Créez une base nommée voitures à l’aide de SQLiteManager.
Créez ensuite les tables de la base voitures selon le modèle logique défini dans les exercices du chapitre 13 (en cas de problème, voir le corrigé des exercices de ce chapitre). Vérifiez la structure de chaque table.

Solution


Création de la table « propriétaire »



Le code SQL de création de la table :
CREATE TABLE proprietaire (
id_pers INTEGER PRIMARY KEY,
nom VARCHAR(30) NOT NULL,
prenom VARCHAR(30) ,
adresse VARCHAR(50) NOT NULL,
ville VARCHAR(40) NOT NULL,
codepostal MEDIUMINT(5) NOT NULL
);
Création de la table « cartegrise »



Le code SQL de création de la table :

CREATE TABLE cartegrise (
id_pers MEDIUMINT(8) NOT NULL PRIMARY KEY,
immat VARCHAR(6) NOT NULL PRIMARY KEY,
datecarte DATE NOT NULL
);
Création de la table « voiture »


Le code SQL de création de la table :

CREATE TABLE voiture (
immat VARCHAR(6) NOT NULL PRIMARY KEY,
id_modele VARCHAR(10) NOT NULL,
couleur VARCHAR(10) NOT NULL,
datevoiture DATE NOT NULL
);
Création de la table « modele »


Le code SQL de création de la table :

CREATE TABLE modele (
id_modele VARCHAR(10) NOT NULL PRIMARY KEY,
modele VARCHAR(30) NOT NULL,
carburant VARCHAR(10) NOT NULL
);

Exercice 2:


Créez un formulaire permettant l’insertion des coordonnées d’une personne dans la table propriétaire en utilisant la méthode objet.

Solution


<?php
if(isset($_POST['nom']) && isset($_POST['adresse']) &&
isset($_POST['ville']) && isset($_POST['codepostal']))
{
//Récupération des valeurs saisies
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$adresse=$_POST['adresse'];
$ville=$_POST['ville'];
$codepostal=$_POST['codepostal'];
$db=new
SQLiteDatabase("C:/wamp/www/sqlitemanager/voitures",0666,$erreur);
//Requète SQL
$requete="INSERT INTO proprietaire
VALUES(NULL,'$nom','$prenom','$adresse','$ville','$codepostal')";
if($result=$db->queryExec($requete)) echo "DONNEES INSEREES";
}
else {"<h3>Formulaire à compléter!</h3>";}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html40/strict.dtd">
<html>
<head>
<title>Enregistrement d'une personne</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-
8859-1">
</head>
<body>
<form action= "<?php echo $_SERVER['PHP_SELF'];?>" method="post"
enctype="application/x-www-form-urlencoded">
<fieldset>
<legend><b>Coordonnées de la personne</legend>
<table>
<tr><td>Nom : </td><td><input type="text" name="nom" /></td></tr>
<tr><td>Prénom : </td><td><input type="text" name="prenom"
/></td></tr>
<tr><td>Adresse : </td><td><input type="text" name="adresse"
/></td></tr>
<tr><td>Ville : </td><td><input type="text" name="ville"
/></td></tr>
<tr><td>Code postal : </td><td><input type="text" name="codepostal"
/></td></tr>
<tr colspan="2"><td><input type="submit" value="Enregistrer"
/></td></tr>
</table>
</fieldset>
</form>
</body>
</html>

Exercice 3:



Insérez des données dans la table modele en utilisant SQLiteManager, puis créez un script qui affiche la liste de tous les modèles de voiture dans un tableau HTML en effectuant un tri par marque. Utilisez la méthode procédurale.

Solution


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html40/strict.dtd">

<html>
<head>
<title>Affichage de tous les modèles de voitures</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-
8859-1">
</head>
<body>
<?php
if ($id_base=
sqlite_open("C:/wamp/www/sqlitemanager/voitures",0666,$erreur))
{
echo "<table border=\"1\">";
echo "<thead><th>Type</th><th> Modele </th></thead>";
//Requète SQL
$requete="SELECT id_modele,modele FROM modele ORDER BY modele
ASC";
$result=sqlite_query($id_base,$requete);
while($ligne=sqlite_fetch_array($result))
{
echo "<tr><td>&nbsp;",$ligne[0]," &nbsp;</td><td> ",$ligne[1],"
&nbsp;</td></tr>";
}
echo "</table>";
}
?>
</body>
</html>

Le résultat affiché est le suivant :




Exercice 4:


Adaptez le script de l’exercice 3 en utilisant la méthode objet. Les données de chaque ligne du résultat doivent aussi être retournées sous forme d’objet.

Solution

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html40/strict.dtd">

<html>
<head>
<title>Affichage de tous les modèles de voitures</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-
8859-1">
</head>
<body>
<?php
if($db=new
SQLiteDatabase("C:/wamp/www/sqlitemanager/voitures",0666,$erreur))
{
//Requète SQL
$requete="SELECT id_modele,modele FROM modele ORDER BY modele
ASC";
$result=$db->query($requete);
echo "<table border=\"1\">";
echo "<thead><th>Type</th><th> Modele </th></thead>";
while($ligne=$result->fetchObject())
{
echo "<tr><td>&nbsp;",$ligne->id_modele," &nbsp;</td><td> ",$ligne-
>modele," &nbsp;</td></tr>";
}
echo "</table>";
}
?>
</body>
</html>

Exercice 5:



Créez dynamiquement un formulaire contenant une liste de sélection HTML (avec les éléments <select> et <option>) qui donne la liste de tous les modèles présents dans la table modele. Ajoutez manuellement à l’aide de SQLiteManager un ou plusieurs modèles à la table, et vérifiez que la liste de sélection prend bien en compte ces ajouts. Utilisez successivement la méthode procédurale et la méthode objet.

Solution


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html40/strict.dtd">

<html>
<head>
<title>Création d'une liste de sélection de tous les modèles de
voitures</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-
8859-1">
</head>
<body>
<h2>METHODE PROCEDURALE</h2>
<form method="post" action="ch16exo5.php">
<fieldset>
<legend>Liste des modèles</legend>
<select name="modeles">
<?php
if($idbase=sqlite_open("C:/wamp/www/sqlitemanager/voitures",0666,$e
rreur))
{
//Requète SQL
$requete="SELECT id_modele,modele FROM modele ORDER BY modele
ASC";
$result=sqlite_query($idbase,$requete);
while($ligne=sqlite_fetch_object($result))
{
echo "<option value=\"$ligne->id_modele\">$ligne-
>modele</option>";
}
sqlite_close($idbase);
}
?>
</select>
<input type="submit" value="Choisir" />
</fieldset>
</form>
<h2>METHODE OBJET</h2>
<form method="post" action="ch16exo5.php">
<fieldset>
<legend>Liste des modèles</legend>
<select name=\"modeles\">
<?php
if($db=new
SQLiteDatabase("C:/wamp/www/sqlitemanager/voitures",0666,$erreur))
{
//Requète SQL
$requete="SELECT id_modele,modele FROM modele ORDER BY modele
ASC";
$result=$db->query($requete);
while($ligne=$result->fetchObject())
{
echo "<option value=\"$ligne->id_modele\">$ligne-
>modele</option>";
}
}
?>
</select>
<input type="submit" value="Choisir" />
</fieldset>
</form>
</body>
</html>

Le résultat obtenu est :

Exercice 6:


Utilisez le mécanisme des transactions pour insérer simultanément et en toute sécurité des données dans les tables proprietaire et cartegrise. Utilisez la méthode procédurale puis la méthode objet.

Solution

Méthode procédurale : fichier ch16exo6.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html40/strict.dtd">

<html>
<head>
<title>Enregistrement d'un véhicule </title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-
8859-1">
</head>
<body>
<form action= "<?php echo $_SERVER['PHP_SELF'];?>" name="form1"
method="post"
enctype="application/x-www-form-urlencoded">
<fieldset>
<legend><b>Saisissez les caractéristiques du véhicule</legend>
<table>
<tr colspan="2"><td><b>Propriétaire</td></tr>
<tr><td>Nom : </td><td><input type="text" name="nom" size="40"
maxlength="10"/></td></tr>
<tr><td>Prénom : </td><td><input type="text" name="prenom"
size="40" maxlength="30"/></td></tr>
<tr><td>Adresse : </td><td><input type="text" name="adresse"
size="40" maxlength="30"/></td></tr>
<tr><td>Ville : </td><td><input type="text" name="ville" size="40"
maxlength="30"/></td></tr>
<tr><td>Code postal : </td><td><input type="text" name="codepostal"
size="40" maxlength="5"/></td></tr>
<tr colspan="2"><td><b>Modèle</td></b></tr>
<tr><td>Nom du modèle</td>
<td>
<select name="modele">
<?php
if($idbase=sqlite_open("C:/wamp/www/sqlitemanager/voitures",0666,$e
rreur))
{
//Requète SQL
$requete="SELECT id_modele,modele FROM modele ORDER BY modele
ASC";
$result=sqlite_query($idbase,$requete);
while($ligne=sqlite_fetch_object($result))
{
echo "<option value=\"$ligne->id_modele\">$ligne->modele</option>";
}
sqlite_close($idbase);
}
?>
</select></tr>
<tr><td>Carburant : </td>
<td><select name="carburant">
<option value="essence">Essence</option>
<option value="diesel">Diesel</option>
<option value="électrique">Electrique</option>
</select></td>
</tr>
<tr colspan="2"><td><b>Voiture</td></tr>
<tr>
<td>Numéro d'immatriculation</td>
<td><input type="text" name="immat" /></td>
</tr>
<tr><td>Couleur : </td>
<td><select name="couleur">
<option value="claire">Claire</option>
<option value="moyenne">Moyenne</option>
<option value="foncée">Foncée</option>
</select></td>
</tr>
<tr>
<td>Date 1ere immatriculation AAAA-MM-JJ</td>
<td><input type="text" name="datevoiture" /></td>
</tr>
<td>Date de la carte grise AAAA-MM-JJ</td>
<td><input type="text" name="datecarte" /></td>
</tr>
<tr>
<td><input type="reset" value=" Effacer " /></td>
<td><input type="submit" value="ENREGISTRER" name="enreg" /></td>
</tr>
</table>
</fieldset>
</form>
<?php
if(isset($_POST['enreg']))
{
//Récupération des valeurs du formulaire
$id_modele=$_POST['modele'];
$carburant=sqlite_escape_string($_POST['carburant']);
$immat=sqlite_escape_string($_POST['immat']);
$couleur=sqlite_escape_string($_POST['couleur']);
$datevoiture=sqlite_escape_string($_POST['datevoiture']);
$datecarte=sqlite_escape_string($_POST['datecarte']);
$nom=sqlite_escape_string($_POST['nom']);
$prenom=sqlite_escape_string($_POST['prenom']);
$adresse=sqlite_escape_string($_POST['adresse']);
$ville=sqlite_escape_string($_POST['ville']);
$codepostal=(integer) $_POST['codepostal'];
$id_base=
sqlite_open("C:/wamp/www/sqlitemanager/voitures",0666,$erreur);
//Requète SQL
$requete="BEGIN;";
//Requète SQL: insertions dans la table proprietaire
$requete.="INSERT INTO proprietaire
VALUES(NULL,'$nom','$prenom','$adresse','$ville','$codepostal');";
$result=sqlite_exec($id_base,$requete);
//Récupération de l'identifiant de la personne enregistrée
$id_pers=sqlite_last_insert_rowid($id_base);
//Requète SQL: insertions dans la table cartegrise
$requete="INSERT INTO cartegrise
VALUES('$id_pers','$immat','$datecarte');";
//Requète SQL: insertions dans la table voiture
$requete.="INSERT INTO voiture
VALUES('$immat','$id_modele','$couleur','$datevoiture');";
$requete.="COMMIT;";
sqlite_exec($id_base,$requete);
}
?>
</body>
</html>
Méthode objet : fichier ch16exo6b.php
Les seuls modifications par rapport au fichier précédent sont
signalées aux repères 􀁮, 􀁯, 􀁰, 􀁱, 􀁲 et 􀁳.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html40/strict.dtd">
<html>
<head>
<title>Enregistrement d'un véhicule </title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-
8859-1">
</head>
<body>
<form action= "<?php echo $_SERVER['PHP_SELF'];?>" name="form1"
method="post"
enctype="application/x-www-form-urlencoded">
<fieldset>
<legend><b>Saisissez les caractéristiques du véhicule</legend>
<table>
<tr colspan="2"><td><b>Propriétaire</td></tr>
<tr><td>Nom : </td><td><input type="text" name="nom" size="40"
maxlength="10"/></td></tr>
<tr><td>Prénom : </td><td><input type="text" name="prenom"
size="40" maxlength="30"/></td></tr>
<tr><td>Adresse : </td><td><input type="text" name="adresse"
size="40" maxlength="30"/></td></tr>
<tr><td>Ville : </td><td><input type="text" name="ville" size="40"
maxlength="30"/></td></tr>
<tr><td>Code postal : </td><td><input type="text" name="codepostal"
size="40" maxlength="5"/></td></tr>
<tr colspan="2"><td><b>Modèle</td></b></tr>
<tr><td>Nom du modèle</td>
<td>
<select name="modele">
<?php
$db=new SQLiteDatabase("C:/wamp/www/sqlitemanager/voitures",
0666,$erreur);//􀃍􀁮
{
//Requète SQL
$requete="SELECT id_modele,modele FROM modele ORDER BY modele
ASC";
$result=$db->query($requete);//􀃍􀁯
while($ligne=$result->fetchObject())//􀃍􀁰
{
echo "<option value=\"$ligne->id_modele\">$ligne-
>modele</option>";
}
}
?>
</select></tr>
<tr><td>Carburant : </td>
<td><select name="carburant">
<option value="essence">Essence</option>
<option value="diesel">Diesel</option>
<option value="électrique">Electrique</option>
</select></td>
</tr>
<tr colspan="2"><td><b>Voiture</td></tr>
<tr>
<td>Numéro d'immatriculation</td>
<td><input type="text" name="immat" /></td>
</tr>
<tr><td>Couleur : </td>
<td><select name="couleur">
<option value="claire">Claire</option>
<option value="moyenne">Moyenne</option>
<option value="foncée">Foncée</option>
</select></td>
</tr>
<tr>
<td>Date 1ere immatriculation AAAA-MM-JJ</td>
<td><input type="text" name="datevoiture" /></td>
</tr>
<td>Date de la carte grise AAAA-MM-JJ</td>
<td><input type="text" name="datecarte" /></td>
</tr>
<tr>
<td><input type="reset" value=" Effacer " /></td>
<td><input type="submit" value="ENREGISTRER" name="enreg" /></td>
</tr>
</table>
</fieldset>
</form>
<?php
if(isset($_POST['enreg']))
{
//Récupération des valeurs du formulaire
$id_modele=$_POST['modele'];
$carburant=sqlite_escape_string($_POST['carburant']);
$immat=sqlite_escape_string($_POST['immat']);
$couleur=sqlite_escape_string($_POST['couleur']);
$datevoiture=sqlite_escape_string($_POST['datevoiture']);
$datecarte=sqlite_escape_string($_POST['datecarte']);
$nom=sqlite_escape_string($_POST['nom']);
$prenom=sqlite_escape_string($_POST['prenom']);
$adresse=sqlite_escape_string($_POST['adresse']);
$ville=sqlite_escape_string($_POST['ville']);
$codepostal=(integer) $_POST['codepostal'];
//Requète SQL
$requete="BEGIN;";
//Requète SQL: insertions dans la table proprietaire
$requete.="INSERT INTO proprietaire
VALUES(NULL,'$nom','$prenom','$adresse','$ville','$codepostal');";
$result=$db->queryExec($requete);//􀃍􀁱
//Récupération de l'identifiant de la personne enregistrée
$id_pers=$db->lastInsertRowid();//􀃍􀁲
//Requète SQL: insertions dans la table cartegrise
$requete="INSERT INTO cartegrise
VALUES('$id_pers','$immat','$datecarte');";
//Requète SQL: insertions dans la table voiture
$requete.="INSERT INTO voiture
VALUES('$immat','$id_modele','$couleur','$datevoiture');";
$requete.="COMMIT;";
$result=$db->queryExec($requete);//􀃍􀁳
unset($db);
}
?>
</body>
</html>

Exercice 7:


Créez un formulaire de recherche permettant de trouver toutes les personnes propriétaires d’un modèle de véhicule donné. Affichez les résultats sous forme de tableau HTML. Utilisez l’exercice 5 pour créer la liste de sélection des modèles.

Solution

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
"http://www.w3.org/TR/REC-html40/strict.dtd">

<html>
<head>
<title>Recherche de tous les propriétaires d'un même modèle
</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-
8859-1">
</head>
<body>
<form action= "<?php echo $_SERVER['PHP_SELF'];?>" name="form1"
method="post"
enctype="application/x-www-form-urlencoded">
<fieldset>
<legend><b>Choisissez le nom du modèle</legend>
<table>
<tr><td>Nom du modèle</td>
<td>
<select name="idmodele">
<?php
if($id_base=sqlite_open("C:/wamp/www/sqlitemanager/voitures",0666,$
erreur))
{
//Requète SQL
$requete="SELECT id_modele,modele FROM modele ORDER BY modele
ASC";
$result=sqlite_query($id_base,$requete);
while($ligne=sqlite_fetch_object($result))
{
echo "<option value=\"$ligne->id_modele\">$ligne->modele</option>";
}
sqlite_close($idbase);
}
?>
</select>
</tr>
<tr>
<td><input type="reset" value=" Effacer " /></td>
<td><input type="submit" value="CHERCHER" name="cherche" /></td>
</tr>
</table>
</fieldset>
</form>
<?php
if(isset($_POST['idmodele']))
{
//Récupération des valeurs du formulaire
$idmodele=$_POST['idmodele'];
//Requète SQL
$requete="SELECT proprietaire.nom, proprietaire.prenom,
voiture.immat, modele.modele
FROM voiture, modele, proprietaire, cartegrise
WHERE voiture.id_modele= '$idmodele'
AND voiture.id_modele=modele.id_modele
AND cartegrise.immat=voiture.immat
AND proprietaire.id_pers=cartegrise.id_pers";
$id_base=sqlite_open("C:/wamp/www/sqlitemanager/voitures",0666,$err
eur);
$result=sqlite_query($id_base,$requete);
echo "<table border=\"1\">";
while($ligne=sqlite_fetch_array($result))
{
echo "<tr><td>$ligne[0] </td><td>$ligne[1] </td><td>$ligne[2]
</td>";
}
echo "</table>";
sqlite_close($id_base);
}
else echo "PROBLEME !!";
?>
</body>
</html>




Aucun commentaire:

Enregistrer un commentaire