Exercices de révision
Quelques exercices de révisions et d'entrainement sur les bases de données:
Partie 1 : révision des requêtes MySql
Soit la table 'zoo' de la base de donnée suivante (gestion d'un zoo) :
Nom dans la base de données |
id |
type |
arrive |
depart |
naissance |
poids |
nom |
sexe |
---|---|---|---|---|---|---|---|---|
désignation |
Type d'animal |
Date d'arrivée |
Date de naissance |
poids |
nom |
sexe |
||
lion |
15-4-1978 |
12-3-1976 |
12,5 |
king2 |
M |
|||
panthère |
23-4-1996 |
23-4-1996 |
8,9 |
T'Challa |
M |
|||
python |
7-5-1974 |
6-3-1973 |
1,6 |
F |
||||
4 |
lion |
26-1-1968 |
17-4-2001 |
24-2-1965 |
10,4 |
king |
M |
|
5 |
bufflon |
31-1-1987 |
12-11-1986 |
23,2 |
Ulysse |
M |
||
6 |
biche |
12-10-1986 |
12-10-1986 |
18,5 |
F |
|||
7 |
éléphant |
28-5-1999 |
21-6-1995 |
1534 |
babar |
F |
||
8 |
girafe |
15-8-2012 |
10-7-2009 |
657 |
Camela |
F |
||
9 |
panthère |
19-5-2001 |
10-4-1999 |
24 |
Panthera |
F |
||
10 |
lion |
9-6-1979 |
4-11-1976 |
18,6 |
queen |
F |
||
11 |
python |
7-5-1974 |
23-4-1974 |
1,9 |
F |
|||
12 |
éléphant |
30-6-1999 |
21-6-1996 |
1350 |
Bengal |
M |
||
13 |
guépard |
7-4-1995 |
12-6-1994 |
13,1 |
F |
|||
14 |
... |
... |
…. |
... |
... |
... |
... |
1. Donnez la requête MySQL pour afficher (sélectionner) tous les éléments de la table
2. Que fait la requête suivante : SELECT * FROM zoo where nom='king'
3. Donnez la requête MySQL pour afficher (sélectionner) les 3 premiers éléments de la table
4. Donnez la requête MySQL pour afficher (sélectionner) de Camela à Bengal
5. Donnez la requête MySQL pour afficher tous les lions
6. Donnez la requête MySQL pour afficher tous les éléphants en les classant par âge (du plus vieux au plus jeune)
7. Donnez la requête MySQL pour afficher tous les animaux par ordre d'arrivée (du plus récent au plus ancien)
8. Donnez la requête MySQL pour afficher tous les animaux femelles (en les groupant par type d'animal)
9. Donnez la requête MySQL pour insérer un nouvel animal : tigre, arrivé le 9/3/2017, pas parti, né le 13-12-2011, de poids 14,5kgs, il n'a pas de nom et c'est un mâle (les dates se rentrent sous la forme : année-mois-jour)
10. Que fait la requête suivante : UPDATE zoo SET depart= '2017-02-07' WHERE nom = 'Bengal' (donner le résultat sur la table de la base de données)
Partie 2 : révision PHP + MySQL
Exercice N°1 : nous disposons de la page « index_zoo.php » suivante :
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>zoo LaMachef</title>
<meta http-equiv="refresh" content="60"/>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<h1 class="donnee">Zoo LaMache</h1>
<br/>
<h2 class="donnee">Pour rentrer un nouvel animal:</h2>
<form action="donnee_post.php" method="post">
<p>
<label for="type">type</label>: <input type="text" name="type" id="type" size="30"/><br />
<label for="arrive">date d'arrivée (année-mois-jour)</label> : <input type="date" name="arrive" id="arrive" placeholder="Ex: 1981-05-25" /><br />
<label for="depart">date de départ (année-mois-jour)</label> : <input type="date" name="depart" id="depart" placeholder="Ex: 1981-05-25" /><br />
<label for="naissance">date de naissance (année-mois-jour)</label> : <input type="date" name="naissance" id="naissance" placeholder="Ex: 1981-05-25" /><br />
<label for="poids">poids</label>: <input type="text" name="poids" id="poids" size="30"/><br />
<label for="nom">nom</label> : <input type="text" name="nom" id="nom" size="30" /><br />
<label for="sexe">sexe</label>: <input type="text" name="sexe" id="sexe" size="1"/><br />
<input type="submit" value="Envoyer" />
</p>
</form>
<br />
<h2 class="titre_tab">Les animaux:</h2>
<?php
// connection à la base de données
try
{ // On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{ // En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
// affichage des donnees
$reponse = $bdd->query('SELECT * FROM zoo'); //requête base de donnees
While ($donnees = $reponse->fetch()) // rend les valeurs utilisables et les affiche
{
echo ' ' .$donnees['id']. ' '. $donnees['type']. ' arrivé le ' .$donnees['arrive']. ' parti le '.$donnees['depart']. ' né le '.$donnees['naissance']. ' poids : '.$donnees['poids']. 'Kgs nom: '.$donnees['nom'].' sexe : '.$donnees['sexe']. '<br/>';
}
$reponse->closeCursor(); // termine le traitement de la requête
?>
</body>
</html>
Ainsi que du fichier «donnee_post.php »
<?php
// Connexion à la base de données
try
{
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
echo ($_POST['type']);
echo ($_POST['arrive']);
echo ($_POST['depart']);
echo ($_POST['naissance']);
echo ($_POST['poids']);
echo ($_POST['nom']);
echo ($_POST['sexe']);
// Insertion du message à l'aide d'une requête préparée
if ($_POST['type'] !='')
{
$req = $bdd->prepare('INSERT INTO zoo (id, type, arrive, depart, naissance, poids, nom, sexe) VALUES(NULL, ?, ?, ?, ?, ?, ?, ? )');
$req->execute(array($_POST['type'], $_POST['arrive'], $_POST['depart'], $_POST['naissance'], $_POST['poids'], $_POST['nom'], $_POST['sexe']));
}
header ('Location: index_zoo.php');
?>
Quand on lit la page index_zoo.php on obtient (ici la table de la base de donnée est encore vide) :
1. Donnez la requête MySQL présente dans la page « index_zoo.php »
2. Quelle est son rôle ?
3. Quelle est l'instruction PHP (methode PDO) qui permet d'exécuter la requête MySQL précédente ?
4. Quelle est l'instruction PHP qui permet de se connceter à la base de données?
5. Expliquez comment fonctionne la page et notamment comment les données sont écrites dans la table 'zoo' de la base de données.
6. Donnez la requête MySQL qui permet ici d'écrire dans la base de donnée
Exercice N°2 :
Nous voulons introduire un nouvel animal dans notre table 'zoo'. La requête MySql est :
INSERT INTO `test`.`zoo` (`id`, `type`, `arrive`, `depart`, `naissance`, `poids`, `nom`, `sexe`) VALUES (NULL, 'tigre', '2017-03-01', '', '2015-08-03', '21', 'hobes', 'M');
Voici la page php qui va réaliser ceci :
<?php
// connection à la base de données
try // On essaie de se connecter à MySQL
{
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
}
catch(Exception $e) // En cas d'erreur, on affiche un message et on arrête tout
{
die('Erreur : '.$e->getMessage());
}
// écriture dans la table
$bdd->exec('INSERT INTO zoo (id, type, arrive, depart, naissance, poids, nom, sexe) VALUES(NULL, \'tigre\', \'2017-03-01\', '', \'2015-08-03\', \'21\', \'hobes\', \'M\')');
echo ('donnee ecrite!');
?>
1. Expliquez et justifiez les différences entre la requête d'origine et celle utilisée dans la page.
Sur certains systèmes, l'instruction PHP (PDO) est : exec(" requête MySQL "). Ainsi on aurait pu écrire aussi cette ligne là :
$bdd→exec( "INSERT INTO zoo (id, type, arrive, depart, naissance, poids, nom, sexe) VALUES(NULL, 'tigre', '2017-03-01', '', '2015-08-03', '21', 'hobes', 'M')");
2. Justifiez et expliquez la différence avec la question précédente.
Partie 3 : révision PHP
Exercice N°1 :
soit les 2 pages suivantes : (la méthode de transmission des informations est POST)
Page « index.html » :
<!DOCTYPE html>
<html xml:lang="fr" lang="fr">
<head>
<title>variables</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" href="style.css" />
</head>
<body>
<h2 class="donnee">Bonjour ... veuillez rentrer les renseignements suivant:</h2>
<form action = "traitement.php" method="post">
Votre nom : <input type = "text" name = "nom"><br />
Votre âge : <input type = "number" min="1" max="99" name = "age"><br />
<input type = "submit" value = "Envoyer">
</form>
</body>
</html>
Page « traitement.php » :
<html>
<head>
<title>Ma page de traitement</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" href="style.css" />
</head>
<body>
<h2 class="donnee">
<?
// on teste la déclaration de nos variables
if (isset($_POST['nom']) && isset($_POST['age'])) // test si les variables existent
{
// on affiche nos résultats
$age=$_POST['age'];
if ($age <= 18)
{
echo "Salut gamin !, je sais que tu as ";
echo $age;
echo " ans";
echo "<br />" ;
echo "tu es trop jeune pour ce site!";
}
if ($age > 18 && $age<50)
{
echo "Bonjour jeune homme !, je sais que tu as ";
echo $age;
echo " ans";
echo "<br />";
echo "bienvenu";
}
if ($age >= 50)
{
echo "Bonjour !, je sais que tu as ";
echo $age;
echo " ans";
echo "<br />";
echo "n'es-tu pas trop vieux pour ce site?";
}
}
else
{
echo "données non rentrées";
}
?>
</h2>
</body>
</html>
1. Surlignez, de couleur différentes, les parties HTML et PHP de la page « traitement.php » ?
2. Quelles sont les 2 variables transmises (méthode POST) par la page « index.html » à la page « traitement.php »?
3. Comment sont-elles récupérées (sous quelle forme) par la page « traitement.php » ?
4. Quel est la variable PHP (non issue de la transmission POST) utilisée dans la page « traitement.php » ?
5. Expliquez ce que va faire la page « index.html » puis la page « traitement.php » et écrivez ce que la page va afficher dans les différents cas (11, 40 et 62 ans).
Exercice N°2 :
Notre site internet est structuré en 7 fichiers: « presentation.php », « entete.php», « pied_page.php» «index.php », «erreur.php», « page1.php »et « page2.php ». La transmissions des informations de fait par la méthode GET (informations transmises dans l'URL).
Voici la page « index.php » :
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="style.css" />
<META HTTP-EQUIV="Content-Language" CONTENT="fr-FX">
<title>site de la seciotn STI 2D SIN du lycée LaMache</title>
</head>
<body>
<div id="bloc_page">
<?php
include("entete.php"); // inclusion de l'entête
?>
<section> <!-- partie principale -->
<article class="centrer">
<?php
if (isset($_GET['page'])) // test si la variable page existe
{
$_GET['page'] = (int) $_GET['page']; // force le type entier pour la variable page
$page=$_GET['page'] ;
if ($page == 0)
{
include("presentation.php");
}
else
{
if ($page == 1)
{
include("page1.php");
}
else
{
if ($page == 2)
{
include("page2.php");
}
else
{
include("erreur.php");
}
}
}
}
else // si la variable n'existe pas (index.php seul par exemple)
{
include("presentation.php");
}
?>
</article>
</section>
<?php
include("pied_page.php"); // inclusion du pied de page
?>
</div> <!-- div du body -->
</body>
</html>
La page « entete.php » :
<header>
<div>
<p>STI 2D – SIN – Lycée LaMache</p>
</div>
<nav>
<ul>
<li><a href="index.php?page=0" class="texte_nav" >Accueil</a></li>
<li><a href="index.php?page=1" class="texte_nav">Programme de 1ère</a></li>
<li><a href="index.php?page=2" class="texte_nav">Programme de terminale</a></li>
</ul>
</nav>
</header>
1. Surlignez, de couleurs différentes, les parties HTML et PHP de la page « index.php » ?
2. Quelle est la variable PHP présente dans la page « index.php » ?
3. Dessinez la structure de notre site internet
exemple de structure:
4. Expliquez le fonctionnement de la page « index.php »
5. Combien y-a-t-il de pages accessibles à l'utilisateur ?
6. Écrivez l'URL visible dans le navigateur internet et permettant d'accéder à la page1
7. Écrivez l'URL visible dans le navigateur internet et permettant d'accéder à la page de présentation
8. Que se passe-t-il si l'url est : index.php
9. Que se passe-t-il si l'url est : index.php?page=5
10. Modifiez la page « index.php » en remplaçant les "if" sur l'affichage des pages par la fonction Switch