Académique Documents
Professionnel Documents
Culture Documents
1.0 Introduction
Nous allons lors de ce cours créer un site de gestion de livres.
Avant de commencer, nous allons installer un éditeur de code (je vous conseille
VSCODE) ensuite vous allez installer XAMPP et le configurer, vous pouvez
définir votre port si vous voulez.
Lors de ce cours nous allons proposer une structure d’un site complet en PHP
nous allons utiliser l’architecture MVC, de la méthode de programmation POO
associée à une base de donnée mysql.
➢ Structure du site: Créer une structure basique d’un site Web.
➢ Programmation orientée objet: Structurer les données et les traitements en
POO.
➢ Base de données MySQL: ajouter des bases de données gérées en PDO.
➢ Architecture MVC: modifier l’architecture pour être conforme au MVC.
➢ CRUD: réaliser les traitements, d’affichage, d’ajout, de modification, et
de suppression de livres présents dans une BD.
<?php ob_start()?>
Voici le contenu de ma page d accueill
<?php
$content = ob_get_clean();
$titre="page d acceuille";
require "template.php";
?>
<?php
$content = ob_get_clean();
$titre = "Les livres de la bibliothèque";
require "template.php";
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,
initial-scale=1.0">
<link rel="stylesheet"
href="https://bootswatch.com/5/quartz/bootstrap.min.css">
<title>Document</title>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<button class="navbar-toggler" type="button"
data-toggle="collapse" data-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent" aria-expanded="false"
aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse"
id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="index.php">Accueill</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="livres.php">Mes Livres</a>
</li>
</ul>
</div>
</nav>
<div class="container">
<h1 class="rounded border border-dark p-2 m-2 text-center
text-white bg-info"> <?php echo "$titre" ?> </h1>
<?php echo "$content" ?>
</div>
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js"
integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV
0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script
src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper
.min.js"
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3
UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script
src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstr
ap.min.js"
integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uo
d8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
</body>
</html>
<?php ob_start()?>
Contenu de la page des livres de la bibliotheque
<?php
$content = ob_get_clean();
$titre="Les livres de la bibliotheque";
require "template.php";
?>
Objectif:
1. Ajouter des images dans le dossier/public/images
2. Créer un tableau html listant les livres.
Dans le fichier livres.php, nous avons:
<?php ob_start()?>
</tr>
<tr>
<th scope="row"><img src="public/imagees/download.jpeg"></th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row"><img src="public/imagees/langC.jpeg"></th>
<td>Larry</td>
<td>the Bird</td>
<td>@twitter</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
<a type="button" class="btn btn-outline-success d-block">AJOUTER</a>
<?php
$content = ob_get_clean();
$titre="Les livres de la bibliotheque";
require "template.php";
?>
2.0 Introduction:
Dans cette partie nous allons voir les choses d’une autre manière. Nous allons modéliser les
livres sous forme de classes. Cette classe livre aura pour attribut: identifiant, titre, nombre de
pages, et le chemin pour accéder à l’emplacement de l’image. et pour méthode sont : les
getters et les setters. L’objectif est de modéliser les informations de la page livre sous forme
de classes:
2.1 IMPLÉMENTATION:
–créer les livres et un tableau nomme listeLivres qui contiendra la liste des livres.
–ensuite nous allons nous servire du tableau et parcourire la liste des livres les afficher selon
le code suivant:
<!--
<tr>
<th scope="row"><img src="public/imagees/download.jpeg"></th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row"><img src="public/imagees/langC.jpeg"></th>
<td>Larry</td>
<td>the Bird</td>
<td>@twitter</td>
<td>@twitter</td>
</tr>
-->
<?php
$content = ob_get_clean();
$titre="Les livres de la bibliotheque";
require "template.php";
?>
Visitez alors le rendu du site pour constater les modifications:
● Manipulation des attributs et fonctions statiques.
Nous nous fixons pour objectif de créer une variable statique dans la
classe livre et qui sera disponible d'accès par les les fonctions
tierces créées à l'intérieure de notre classe. Cette variable sera
connue par la classe et non via les objets comme nous l’avons fait
précédemment dans le fichier livres.php.
EXERCICE 1:
Créer une classe LivreManager qui aura pour but de gérer les livres
sans passer par les attributs static
LivreManager
livres
getLivres()
ajoutLivre(livre)
faites les modifications nécessaires pour permettre à LivresManager
d'implémenter ces fonctionnalités.
RÉPONSE À L’EXERCICE:
Alors voici les étapes pour avoire une classe LivreManager et qui
implémente les fonctions getLivres();
Introduction:
Exercice:
Réalisez la base de données comme l’indique le schéma suivant.
ensuite vous insérez les informations des livres qui ont été codés en dur dans le fichier .php
comme suit.
Nous créerons une fonction chargement qui va charger les livres de la BD dans le tableau de
livres du Manager. ( faite ceci en guise d’exercice.)
Réponse:
Après l'écriture qui permet d'assurer la connexion a la base de donnée, Nous écrirons une
fonction dans la classe LivreManager qui permet de charger les livres.
cette fonction, tout en utilisants les objets pdo, préparera une requête qu’elle fera exécutée
dans la base de donnée tout en spécifiant les paramètres de la classe délivre créé dans la base
de donnée:
Ne pas oublier de réaliser un héritage de la classe Model. à partir de la classe livre Manager.
Ne pas oublier de faire require_once() verse la classeLivre.php et ModelClasse.php
au finale appeler la fonction qui permet de charger les livre tout en se servant de livre
Manager:
NB: Effacer les livres coddes en dure dans le fichier php ainsi que les objets livres declarres:
CHAP3: ARCHITECTURE MVC
Introduction:
MVC, l'acronyme de Modèle Vue contrôleur, est une architecture la plus utilisée en
développement web php.
Elle sépare les parties du site en plusieurs morceaux (3 principalement) .
Le Modèle: Correspond à la partie des données.
La vue correspond à la partie d’affichage.
Le contrôleur: Correspond à la partie pilotage.
C’est une architecture qui permet une meilleure sécurisation du code, une
maintenabilité plus aisée et assure la cohérence globale du site.
Le principal inconvénient de cette architecture est la lourdeur de sa mise en place.
NB: Au final, le site n’aura qu’une seule page index.php
I. Architecture MVC.
Modèle
Élément qui contient les données ainsi que de la logique en rapport avec les
données : validation, lecture et enregistrement . Il peut, dans sa forme la plus
simple, contenir uniquement une simple valeur, ou une structure de données
plus complexe . Le modèle représente l'univers dans lequel s'inscrit
l'application. Par exemple pour une application de banque, le modèle
représente des comptes, des clients, ainsi que les opérations telles que dépôt
et retraits, et vérifie que les retraits ne dépassent pas la limite de crédit .
Vue
Partie visible d'une interface graphique . La vue se sert du modèle, et peut
être un diagramme, un formulaire, des boutons, etc. Une vue contient des
éléments visuels ainsi que la logique nécessaire pour afficher les données
provenant du modèle . Dans une application de bureau classique, la vue
obtient les données nécessaires à la présentation du modèle en posant des
questions. Elle peut également mettre à jour le modèle en envoyant des
messages appropriés. Dans une application web une vue contient des balises
HTML3.
Contrôleur
Module qui traite les actions de l'utilisateur, modifie les données du modèle
et de la vue
Dans le cas d’un site internet on a un aspect: L’aspect routeur:
Le fichier routeur permet de créer les routes vers les pages demandées par
l’utilisateur.
Nous allons créer la vue accueille.view.php dans le dossier views, contenant le code déjà
présent dans le fichier index.php.
Le fichier index.php doit router les demandes des utilisateurs vers les pages correspondantes:
pour cela le fichier va regarder les urls et et choisir le bon canal pour réaliser les actions.
Dans index.php nous avons:
<?php
if(empty($_GET['page'])){
require "views/accueil.views.php";
} else {
switch($_GET['page']){
case "accueil" : require "views/accueil.views.php";
break;
}
}
1. Dans accueil.view.php , coupez et coller tout le code qui est dans index.php
2. Dans lives.views.php , coupez et coller tout le code qui est dans livres.php
3. Dans template.view.php , coupez et coller tout le code qui est dans templates.php
Un dernier exercice est de savoire router les liens vers les fiers qui se trouve dans le
dossier views de la maniere suivante:
ainsi nous venons de mettre en place la VUE
III. LE CONTRÔLEUR
En effet dans le fichier livre.views.php il a certains bout de codes qui réalisent des actions
(fonctionnalités du contrôleur) Dans le model MVC chaque couche doit jouer son rôle en
priorité. S’il doit y avoir quelques traitements dans une page de vue , celui- ci doit être très
minimaliste. Ainsi la maintenabilité du site devient un travail facile pour tous développeurs.
Nous allons créer un fichier livreControleur.php dans ce fichier, nous allons créer une classe
LivreControlers de la manière suivante:
Quelques modifications reste à faire dans le fichier index.php
Voici la structure generale des fichier lorsque l’architecture MVC est bien implementee:
voici les fichiers et les codes dans le model:
Dans le fichier Model il dois y avoire 3 fichier:
?>
private $livres;
}
public function getLivres(){
return $this->livres;
}
foreach($mesLivres as $livre){
$l=new Livres($livre['id'],
$livre['titre'],$livre['nbPages'],$livre['images']);
$this->ajoutLivre($l);
}
}
}?>
<?php
abstract class Model{
private static $pdo;
On a le fichier accueil.views.php
<?php ob_start()?>
Voici le contenu de ma page d accueill
<?php
$content = ob_get_clean();
$titre="page d acceuille";
require "views/template.view.php";
?>
Dans le fichier Livre.view.php on a le code suivant:
<?php
require_once "models/ClasseLivres.php";
//$l1=new livres(1,"Algorithme et structures de donnees",300, "algo.jpeg");
//$l2=new livres(2,"Language C",200,"langC.jpeg");
//$l3=new livres(3,"Nom du livre 3",100,"download.jpeg");
//$listLivres=[$l1,$l2,$l3];
//require_once "LivreManager.php";
//$livreManager=new LivreManager;
//$livreManager->chargerLivres();
//$livreManager->ajoutLivre($l1);
//$livreManager->ajoutLivre($l2);
//$livreManager->ajoutLivre($l4);
ob_start()?>
—-
Objectif:
Nous devons créer des routes pour atteindre les liens suivantes:
bibliotheque/accueil/xxxx/
bibliotheque/livres/l/ (lire ou afficher un livre)
bibliotheque/livres/a/ (Ajouter un livre)
bibliotheque/livres/m/ (Modifier un livre)
bibliotheque/livres/s/ (Supprimer un livre)
1. Implementation:
Pour procéder à l’affichage d’un livre, nous allons procéder de cette façon:
Nous allons respecter quelques règles:
1. La forme de l’url doit être de la forme localhost/bibliotheque/livres/l/2
2. Nous devons écrire une fonction afficheLivres($id) dans le contrôleur.
3. Création d’une fonction getLivreById($id) qui prend
Dans Controller/LivreController.php , on a:
Dans models/LivresManager.php , on a 👍
II. Ajout d’un livre:
<?php
require_once "models/LivreManager.class.php";
class LivresController{
private $livreManager;
$this->livreManager->ajoutLivreBd($_POST['titre'],$_POST['nbPages'],$nomImageAjoute);
header('Location: '. URL . "livres");
}
if(!file_exists($dir)) mkdir($dir,0777);
$extension = strtolower(pathinfo($file['name'],PATHINFO_EXTENSION));
$random = rand(0,99999);
$target_file = $dir.$random."_".$file['name'];
if(!getimagesize($file["tmp_name"]))
throw new Exception("Le fichier n'est pas une image");
if($extension !== "jpg" && $extension !== "jpeg" && $extension !== "png" &&
$extension !== "gif")
throw new Exception("L'extension du fichier n'est pas reconnu");
if(file_exists($target_file))
throw new Exception("Le fichier existe déjà");
if($file['size'] > 500000)
throw new Exception("Le fichier est trop gros");
if(!move_uploaded_file($file['tmp_name'], $target_file))
throw new Exception("l'ajout de l'image n'a pas fonctionné");
else return ($random."_".$file['name']);
}
}
Dans Model/LivreManager, Nous allons ecrire la fonction permettant d’ajouter les livre:
Exercice: