Pattern Mvc Sgbd
Il s’agit d’obtenir des données qui sont stockées dans une base de données. Il faut ensuite pourvoir les afficher en fonction des besoins du contrôleur.
Prérequis
Avant de commencer
- Créez un répertoire TP06
- Copiez-collez les fichiers du répertoire TP05
Vérifiez bien que vous êtes en UTF8.
Téléchargez
Téléchargez le dossier
Lafleur
:
- cliquez sur le bouton code
- cliquez sur Download ZIP (ou clonez le fichier avec GIT)
- décompresses le fichier zip
- déplacez le répertoire images dans le répertoire TP06
Exercice 1 - Exécution du script sql
a - Création de la base
Si vous connaissez phpmyadmin (c’est celui qui sera en démonstration), lancez l’application, sinon utilisez votre application favorite ou les lignes de code. Une fois phpmyadmin connecté, cliquez sur base pour créer la base lafleur
Résultat
Voici ce que vous obtenez en créant la base :
b - Execution du script
Si vous avez décompressé le fichier, vous avez accès au fichier lafleur2013.sql
Si vous voulez exécuter le fichier sql sans décompresser le fichier zip, vous obtiendrez une erreur.
Pour lancer le script, il suffit d’aller sur l’onglet importer et de cliquer su go tout en bas de la page.
Résultat
Voici ce que vous obtenez en voulant lancer le script :
Exercice 2 - La création de la classe connexion
La connexion se fait par l’intermédiaire d’une classe objet : la classe PDO. C’est une classe indépendante du type de *base de données. Créez un fichier m_pdo.php. Copiez coller le code suivant :
<?php
class PdoTd
{
private static $serveur = 'mysql:host=localhost';
private static $bdd = 'dbname=lafleur';
private static $user = 'root';
private static $mdp = '';// mettre ici votre mot de passe
\*\*
\* @var PDO $monPdo
\*/
private static $monPdo;
private static $monPdoTd = null;
\*\*
\* Constructeur privé, crée l'instance de PDO qui sera sollicitée
\* pour toutes les méthodes de la classe
\*
\*/
private function __construct()
{
self::$monPdo = new PDO(self::$serveur.';'.self::$bdd,
self::$user, self::$mdp);
self::$monPdo->query("SET CHARACTER SET utf8");
}
public function _destruct(){
self::$monPdo = null;
}
\*\*
\* Fonction statique qui crée l'unique instance de la classe
\*
\* Appel : $instancePdoTd = PdoTd::getPdoTd();
\* @return null l'unique objet de la classe PdoTd
*/
public static function getPdoTd()
{
if(self::$monPdoTd == null)
{
self::$monPdoTd= new PdoTd();
}
return self::$monPdoTd;
}
\*\*
\* Ici commence la déclaration des fonctions qui
\* permettrons d'exécuter les requêtes.
\*
\*
\* @return array
*/
public function getLesCategories()
{
$req = "select \* from categorie";
$res = self::$monPdo->query($req);
$lesLignes = $res->fetchAll();
return $lesLignes;
}
\*\*
\* @return array
\*/
public function getLesProduits()
{
$req="select \* from produit";
$res = self::$monPdo->query($req);
$lesLignes = $res->fetchAll();
return $lesLignes;
}
}
include('m_model.php');
include('v_entete.php');
require_once 'm_pdo.php';
session_start();
$pdo = PdoTd::getPdoTd();
En vous aidant de la documentation php, répondez aux questions suivantes :
- Que signifie
private
? - Que signifie
public
? - Que signifie
self
? - Que signifie
->
? - Que signifie
query()
? - Que signifie
fetchAll()
? - Que signifie
::
? - Que signifie
require_once
? - Comment est appelé le constructeur de la classe ?
Exercice 3 - Modification du contrôleur
Il s’agit maintenant de remonter les informations obtenues de la base de données pour les transmettre au contrôleur. Il faut donc rajouter du code dans la partie Produits du contrôleur. Vous allez chercher à afficher les catégories, il faut ainsi obtenir les catégories du modèle. Vous allez remplacer le code existant par le code suivant :
case 'produits' :
{
$lesCategories = $pdo->getLesCategories();
include('v_produits.php');
break;
}
Exercice 4 - La création de la vue
Vous avez remarqué que les requêtes renvoient des tableaux. Il faut donc pourvoir les parcourir pour les afficher. Vous allez créer un fichier v_produit.php, et saisir le code est le suivant :
<div class="container">
<?php foreach($lesCategories as $uneCategorie) : ?>
<h2><?= $uneCategorie['libelle']; ?></h2>
<hr>
<div class="card-group">
<? //lire un tableau les produits
//test pour savoir si le produit a la même reference que celle de une catégorie?>
<div class="card">
<div class="card-body">
<h5 class="card-title"><?= "//description d'un produit" ?></h5>
</div>
<img class="card-img-top" src="<?= "//image d'un produit" ?>" alt="Card image du produit">
<div class="card-footer text-muted">
<p>prix : <?= "//prix d'un produit" ?>€</p>
</div>
</div>
<? //fin de la condition?>
<?// fin de la boucle?>
</div>
<?php endforeach; ?>
</div>
Résultat
Voici ce que vous obtenez avec la composition :
En vous aidant de la documentation php, répondez aux questions suivantes :
- En vous aidant du code pour les catégories, modifiez le contrôleur pour obtenir le tableau des produits nommé lesProduits.
- Dans la vue, remplacez les commentaires par le code php permettant d’afficher les produits. Vous appellerez chaque élément du tableau lesProduits : unProduit.
- Pour voir à quoi ressemble lesProduits, vous pouvez, dans le contrôleur, rajouter après l’appel
var_dump($lesProduits);
- Modifier le titre de l’onglet pour obtenir ’LesFleurs’
Résultat
Voici ce que vous obtenez avec les produits :