0% ont trouvé ce document utile (0 vote)
7 vues11 pages

Développement d'un Framework PHP3

Le document décrit le développement d'une application de partage de connaissances en PHP, comprenant des pages pour afficher et ajouter des URL. Il détaille les étapes de création d'un framework, incluant le routage, la gestion des erreurs, et l'administration avec authentification. Le code fourni inclut des classes pour la gestion des messages et de la base de données, ainsi que des instructions pour la mise en place de templates et la gestion des exceptions.

Transféré par

amani sayari
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
7 vues11 pages

Développement d'un Framework PHP3

Le document décrit le développement d'une application de partage de connaissances en PHP, comprenant des pages pour afficher et ajouter des URL. Il détaille les étapes de création d'un framework, incluant le routage, la gestion des erreurs, et l'administration avec authentification. Le code fourni inclut des classes pour la gestion des messages et de la base de données, ainsi que des instructions pour la mise en place de templates et la gestion des exceptions.

Transféré par

amani sayari
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

TDM08 de Technologie Web: PHP3

ASI4 - INSA Rouen


correction

Contexte
Un concepteur de sites web a commencé à développer une application de partage de connaissances. Les
visiteurs du site peuvent ajouter des URL d’autres sites avec un descriptif. Ces URL sont visibles à partir de la
page [Link]. Chaque URL peut être consultée par l’intermédiaire d’une iframe, ce qui permet de revenir
facilement à la liste et de naviguer ainsi entre les ressources partagées.
Vous récupérerez ce code sur Moodle. Il est constitué de 3 pages PHP :
— [Link] affiche la liste et le formulaire d’ajout ;
— [Link] affiche le site ;
— [Link] crée et initialise la base de données.
Vous trouverez également 3 classes : [Link] qui gère les objets messages, [Link] qui
gère l’abstraction BD et [Link] qui gère la persistance BD des objets messages.
Votre objectif est de mettre ce développement dans un framework que vous allez vous-même créer. Attention,
certains sites interdisent l’affichage en iframe, notamment [Link]. Choisissez donc bien vos exemples.
Ce TP est volontairement long car il clôture la partie PHP. Le découpage en étapes devraient vous permettre
d’itérer dans sa construction en maintenant une version fonctionnelle.
Vous trouverez ci-dessous un visuel vous permettant de vous donner une idée du résultat final.
Première étape : routage
Dans un premier temps vous mettrez uniquement en place le « routage » de votre framework.
— La page avec la liste des sites sera accessible sur l’URL directe /.
— La page contenant l’iframe de chaque site mémorisé sera disponible sur /site/ID (ID étant l’identifiant
du site correspondant en BD).
— Pour toutes les autres URL, vous afficherez une page 404.
Vous utiliserez la ré-écriture d’URL. Vous créerez également une classe route chargée de gérer la liste des
routes autorisées. Celle-ci variera bien évidemment en fonction des ressources ajoutées.
Pensez dès à présent et durant tout le TDM à bien organiser votre code dans des répertoires aux noms
appropriés (classes, db, routes, templates, etc.).

Seconde étape : charte graphique et templates


Le concepteur vous a fourni deux pages en HTML pour charter le développement. Vous commencerez donc
par appliquer les CSS aux pages déjà fournies.
La liste des pages à afficher étant amenée à évoluer régulièrement, vous devrez mettre en place un système
de templates pour que le concepteur puisse continuer à les faire évoluer sans votre intervention. Ainsi, vous
définirez un template pour les pages non trouvées (404), un pour la page d’accueil du site et un pour les pages
référencées (iframe contenant une instance de la liste de sites).
Optionnel : ajoutez une classe tpl factorisant les éléments communs à tous les templates (ex : formatage
des dates) et mettant en place un espace de nommage.

Troisième étape : gestion des erreurs


Ajoutez la gestion des exceptions pour remonter les erreurs au client dans tous les cas. Pensez bien à proposer
un template pour l’affiche de cet erreur.

Quatrième étape : administration (authentification)


En se connectant avec un mot de passe stocké dans un fichier [Link], les utilisateurs peuvent supprimer
un enregistrement de la base de données.
En étant connectés, les utilisateurs peuvent également modifier un élément de la BD.

Correction
.htaccess
R e w r i t e E n g i n e On
# ATTENTION s i dans un d o s s i e r /~ d o s s i e r _ u t i l i s a t e u r
# R e w r i t e B a s e /URL_JUSQUA_L_URL_DU_DOSSIER_DU_HTACCESS
R e w r i t e B a s e /~ p a u c h e t a /TW/PHP−TDM08/
RewriteCond %{REQUEST_FILENAME} !− f
RewriteCond %{REQUEST_FILENAME} !−d
R e w r i t e R u l e ( . ∗ ) i n d e x . php ? a r g=$1 [ QSA, L ]

[Link]
<? php
header ( ’ Content −Type : t e x t / h t m l ; c h a r s e t=u t f −8 ’ ) ;
// I n i t i a l i s a t i o n du Framework
include ( ’ c o n f . php ’ ) ;
include ( ’ c l a s s e s / t p l . c l a s s . php ’ ) ;
include ( ’ c l a s s e s / r o u t e . c l a s s . php ’ ) ;
include ( ’ c l a s s e s / db . c l a s s . php ’ ) ;
// Chargement d e s c l a s s e s m é t i e r s
include ( ’ c l a s s e s / m e s s a g e . c l a s s . php ’ ) ;
include ( ’ c l a s s e s / m e s s a g e . db . c l a s s . php ’ ) ;

try {
// I n i t i a l i s a t i o n du moteur de t e m p l a t e
$ t p l = new a s i 4 f r a m e \ t e m p l a t e ( ) ;

// I n i t i a l i s a t i o n de l a b a s e de d o n n é e s
i f ( ! f i l e _ e x i s t s (DB_PATH) ) {
a s i 4 f r a m e \ db : : Connect ( ’ s q l i t e : ’ .DB_PATH) ;
messageDb : : C r e a t e T a b l e ( ) ;
messageDb : : LoadSample ( ) ;
} else {
a s i 4 f r a m e \ db : : Connect ( ’ s q l i t e : ’ .DB_PATH) ;
}
// g e s t i o n de l a c o n n e x i o n
session_start ( ) ;
i f ( ! empty($_POST [ ’ a u t h ’ ] ) && s h a 1 ($_POST [ ’ a u t h ’ ] . SALT)==ADMIN_PASS) {
$_SESSION [ ’ a u t h ’ ] = true ;
}
$ t p l −> i s a u t h = ! empty ( $_SESSION [ ’ a u t h ’ ] ) ;

// I n i t i a l i s a t i o n du r o u t a g e
a s i 4 f r a m e \ r o u t e : : i n i t ( a r r a y ( ’ home ’ , ’ s i t e ’ ) ) ; // d e f i n i t i o n d e s r o u t e s a u t o r i s é e s
a s i 4 f r a m e \ r o u t e : : s e t D e f a u l t R o u t e ( ’ home ’ ) ; // d e f i n i t i o n d e s r o u t e s a u t o r i s é e s

// E x e c u t i o n du r o u t a g e
$maroute = a s i 4 f r a m e \ r o u t e : : g e t C u r r e n t R o u t e ( ) ;
i n c l u d e ( ’ r o u t e s / ’ . $maroute . ’ . r o u t e . php ’ ) ;
} c a t c h ( E x c e p t i o n $e ) {
i n c l u d e ( ’ t e m p l a t e s / e r r e u r . t p l . php ’ ) ;
}

[Link]
<? php
d e f i n e ( ’DB_PATH ’ , ’ db / m e s s a g e s . s q l i t e ’ ) ;
d e f i n e ( ’ADMIN_PASS ’ , ’ 4 d e f 8 2 6 4 d 8 7 d 2 2 a 4 4 3 2 b 5 b 1 9 6 8 e c f 8 1 9 e c 5 b 0 f 2 b ’ ) ; // s t o c k é h a c h é
d e f i n e ( ’SALT ’ , ’ 1 g r o s G r a i n D e S e l ’ ) ;

// p o u r c a l c u l e r un mot de p a s s e h a c h é
// e c h o s h a 1 ( ’ m o t d e p a s s e ’ . SALT) ;

[Link]
<? php
namespace a s i 4 f r a m e ;
c l a s s db {
private s t a t i c $conString ;
p r i v a t e s t a t i c $conActive = false ;
p r i v a t e s t a t i c $db ;
private s t a t i c $preparequery = false ;
p u b l i c s t a t i c f u n c t i o n Connect ( $ c o n s t r i n g = f a l s e ) {
if ( $constring ) {
db : : $ c o n S t r i n g = $ c o n s t r i n g ;
}
try {
s e l f : : $ d b = new \PDO( db : : $ c o n S t r i n g ) ;
s e l f : : $db−> s e t A t t r i b u t e ( \PDO : : ATTR_ERRMODE, \PDO : : ERRMODE_EXCEPTION) ;
} c a t c h ( E x c e p t i o n $e ) {
s e l f : : $conActive = f a l s e ;
t h r o w $e ;
}
s e l f : : $conActive = true ;
}

public s t a t i c f u n c t i o n OnlyConActive ( ) {
if ( ! s e l f : : $conActive ) {
t h r o w new \ E x c e p t i o n ( "DB non c o n n e c t é e " ) ;
}
}

p u b l i c s t a t i c f u n c t i o n Query ( $ s q l ) {
s e l f : : OnlyConActive ( ) ;
try {
r e t u r n s e l f : : $db−>q u e r y ( $ s q l ) ;
} c a t c h ( E x c e p t i o n $e ) {
t h r o w $e ;
}
}
p u b l i c s t a t i c f u n c t i o n Prepare ( $ s q l ) {
s e l f : : OnlyConActive ( ) ;
try {
s e l f : : $ p r e p a r e q u e r y = s e l f : : $db−>p r e p a r e ( $ s q l ) ;
} c a t c h ( E x c e p t i o n $e ) {
t h r o w $e ;
}
}
p u b l i c s t a t i c f u n c t i o n E x e c u t e ( $params ) {
s e l f : : OnlyConActive ( ) ;
i f ( ! s e l f : : $preparequery ) {
t h r o w new \ E x c e p t i o n ( "On ne p e u t p a s e x e c u t e r a v a n t d ’ a v o i r p r é p a r é s a q u e r y
");
}
try {
s e l f : : $ p r e p a r e q u e r y −>e x e c u t e ( $params ) ;
r e t u r n s e l f : : $ p r e p a r e q u e r y −> f e t c h A l l ( ) ;
} c a t c h ( E x c e p t i o n $e ) {
t h r o w $e ;
}
s e l f : : $preparequery = f a l s e ;
}

[Link]
<? php
c l a s s Message {
p r i v a t e $ i d=NULL ;
p r i v a t e $timestamp ;
p r i v a t e $ e m a i l= ’ ’ ;
p r i v a t e $ t e x t e= ’ ’ ;
p r i v a t e $ u r l= ’ ’ ;
p u b l i c f u n c t i o n __construct ( ) {
$ t h i s −>t i m e s t a m p = t i m e ( ) ;
}

p u b l i c f u n c t i o n g e t D a t e ( $ f o r m a t = "%A %d %B %Y %T" ) {
r e t u r n s t r f t i m e ( $ f o r m a t , ( i n t ) $ t h i s −>t i m e s t a m p ) ;
}

public function getDateSql () {


r e t u r n $ t h i s −>g e t D a t e ( "%Y−%m−%d %H:%M:%S " ) ;
}

p u b l i c f u n c t i o n s e t D a t e ( $d ) {
$ t h i s −>t i m e s t a m p= ( i n t ) $d ;
}

p u b l i c function getEmail () {
r e t u r n $ t h i s −>e m a i l ;
}

p u b l i c f u n c t i o n s e t E m a i l ( $e ) {
i f ( f i l t e r _ v a r ( $e , FILTER_VALIDATE_EMAIL) ) {
$ t h i s −>e m a i l=$e ;
} else {
t h r o w new \ E x c e p t i o n ( " Email non v a l i d e " ) ;
}
}

public function getTexte () {


r e t u r n $ t h i s −>t e x t e ;
}

public function setTexte ( $t ) {


$ t h i s −>t e x t e = f i l t e r _ v a r ( $ t , FILTER_SANITIZE_STRING) ;
}

public function getId () {


r e t u r n $ t h i s −>i d ;
}

public function setId ( $id ) {


$ t h i s −>i d = ( i n t ) $ i d ;
}

public function getUrl () {


r e t u r n $ t h i s −>u r l ;
}

p u b l i c f u n c t i o n s e t U r l ( $u ) {
i f ( f i l t e r _ v a r ( $u , FILTER_VALIDATE_URL) ) {
$ t h i s −>u r l=$u ;
} else {
t h r o w new \ E x c e p t i o n ( "URL non v a l i d e " ) ;
}
}
}

[Link]
<? php
c l a s s MessageDb e x t e n d s a s i 4 f r a m e \ db {
p u b l i c s t a t i c function CreateTable () {
s t a t i c : : Query ( "CREATE TABLE IF NOT EXISTS m e s s a g e s (
m e s s a g e _ i d INTEGER PRIMARY KEY,
m e s s a g e _ d a t e TEXT NOT NULL,
m e s s a g e _ e m a i l TEXT NOT NULL,
m e s s a g e _ t e x t e TEXT NOT NULL,
m e s s a g e _ u r l TEXT NOT NULL
)");
}

p u b l i c s t a t i c f u n c t i o n LoadSample ( ) {
$ a l l m = array (
array ( ’ e m a i l ’=> ’ o l i v i e r @ s b . am ’ , ’ t e x t e ’=>" Symfony , l ’ un d e s f r a m e w o r k l e s
p l u s u t i l i s é " , ’ u r l ’=>" h t t p : / / symfony . com/ " ) ,
a r r a y ( ’ e m a i l ’=> ’ o l i v i e r @ s b . am ’ , ’ t e x t e ’=>" L ’ un d e s p r e m i e r s f r a m e w o r k s PHP,
i n s p i r é de RAIL " , ’ u r l ’=>" h t t p : / / c a k e p h p . o r g / " ) ,
a r r a y ( ’ e m a i l ’=> ’ o l i v i e r @ s b . am ’ , ’ t e x t e ’=>" Code I g n i t e r , l ’ une d e s r é f é r e n c e s "
, ’ u r l ’=>" h t t p s : / /www . c o d e i g n i t e r . com/ " ) ,
a r r a y ( ’ e m a i l ’=> ’ o l i v i e r @ s b . am ’ , ’ t e x t e ’=>" FuelPHP un f r a m e w o r k q u i monte en
c e moment " , ’ u r l ’=>" h t t p : / /www . f u e l p h p . com/ " )
);
f o r e a c h ( $ a l l m a s $m) {
$ m e s s a g e = new Message ( ) ;
$message −>s e t E m a i l ($m [ ’ e m a i l ’ ] ) ;
$message −>s e t T e x t e ($m [ ’ t e x t e ’ ] ) ;
$message −>s e t U r l ($m [ ’ u r l ’ ] ) ;
s t a t i c : : Create ( $message ) ;
}
}

p u b l i c s t a t i c f u n c t i o n Create ( $message ) {
s t a t i c : : P r e p a r e ( "INSERT INTO m e s s a g e s ( message_date , message_email ,
m e s s a g e _ t e x t e , m e s s a g e _ u r l ) VALUES ( : d a t e , : e m a i l , : t e x t e , : u r l ) " ) ;
s t a t i c : : E x e c u t e ( a r r a y ( ’ : d a t e ’=>$message −>g e t D a t e S q l ( ) ,
’ : e m a i l ’=>$message −>g e t E m a i l ( ) ,
’ : t e x t e ’=>$message −>g e t T e x t e ( ) ,
’ : u r l ’=>$message −>g e t U r l ( )
));
}

p u b l i c s t a t i c f u n c t i o n Read ( $ i d ) {
s t a t i c : : P r e p a r e ( "SELECT ∗ FROM m e s s a g e s WHERE m e s s a g e _ i d = : i d " ) ;
$ l i s t e _ m e s s a g e s = s e l f : : E x e c u t e ( a r r a y ( ’ : i d ’=>( i n t ) $ i d ) ) ;
$row = $ l i s t e _ m e s s a g e s [ 0 ] ;
$ m e s s a g e = new Message ( ) ;
$message −>s e t I d ( $row [ ’ m e s s a g e _ i d ’ ] ) ;
$message −>s e t D a t e ( s t r t o t i m e ( $row [ ’ m e s s a g e _ d a t e ’ ] ) ) ;
$message −>s e t E m a i l ( $row [ ’ m e s s a g e _ e m a i l ’ ] ) ;
$message −>s e t T e x t e ( $row [ ’ m e s s a g e _ t e x t e ’ ] ) ;
$message −>s e t U r l ( $row [ ’ m e s s a g e _ u r l ’ ] ) ;
r e t u r n $message ;
}

p u b l i c s t a t i c f u n c t i o n Update ( $ m e s s a g e ) {
s t a t i c : : P r e p a r e ( "UPDATE m e s s a g e s SET m e s s a g e _ d a t e = : d a t e , m e s s a g e _ e m a i l = :
e m a i l , m e s s a g e _ t e x t e = : t e x t e , m e s s a g e _ u r l = : u r l WHERE m e s s a g e _ i d = : i d " ) ;
s t a t i c : : E x e c u t e ( a r r a y ( ’ : d a t e ’=>$message −>g e t D a t e S q l ( ) ,
’ : e m a i l ’=>$message −>g e t E m a i l ( ) ,
’ : t e x t e ’=>$message −>g e t T e x t e ( ) ,
’ : u r l ’=>$message −>g e t U r l ( ) ,
’ : i d ’=>$message −>g e t I d ( )
));
}

public s t a t i c function Delete ( $id ) {


s t a t i c : : P r e p a r e ( "DELETE FROM m e s s a g e s WHERE m e s s a g e _ i d = : i d " ) ;
s t a t i c : : E x e c u t e ( a r r a y ( ’ : i d ’=>$ i d ) ) ;
}

p u b l i c s t a t i c function ListMessage () {
$messages = array () ;
$ l i s t e _ m e s s a g e s = s e l f : : Query ( "SELECT ∗ FROM m e s s a g e s ORDER BY m e s s a g e _ i d ASC" ) ;
f o r e a c h ( $ l i s t e _ m e s s a g e s a s $row ) {
$ m e s s a g e = new Message ( ) ;
$message −>s e t I d ( $row [ ’ m e s s a g e _ i d ’ ] ) ;
$message −>s e t D a t e ( s t r t o t i m e ( $row [ ’ m e s s a g e _ d a t e ’ ] ) ) ;
$message −>s e t E m a i l ( $row [ ’ m e s s a g e _ e m a i l ’ ] ) ;
$message −>s e t T e x t e ( $row [ ’ m e s s a g e _ t e x t e ’ ] ) ;
$message −>s e t U r l ( $row [ ’ m e s s a g e _ u r l ’ ] ) ;
$messages [ ] = $message ;
}
return $messages ;
}
}

[Link]
<? php
namespace a s i 4 f r a m e ;
class route {
p r i v a t e s t a t i c $ r o u t e s a u t o r i s e = array ( ) ;
private static $defaultroute ;
public s t a t i c function i n i t ( $routes ) {
i f ( is_array ( $ r o u t e s ) ) {
route : : $routesautorise = $routes ;
} else {
t h r o w new \ E x c e p t i o n ( " Route a b e s o i n d ’ un t a b l e a u de r o u t e s p o u r ê t r e
initialisé ");
}
}

public s t a t i c function setDefaultRoute ( $route ) {


i f ( in_array ( $ r o u t e , r o u t e : : $ r o u t e s a u t o r i s e ) ) {
route : : $defaultroute = $route ;
} else {
t h r o w new \ E x c e p t i o n ( " La r o u t e d e f i n i e p a r d e f a u l t n ’ e s t p a s dans l a liste
des routes a u t o r i s é s " ) ;
}
}

p u b l i c s t a t i c function getCurrentRoute () {
$ r o u t e = array ( ) ;
// s i p a s de PATH_INFO = d e f a u l t r o u t e
i f ( ! i s s e t ($_GET [ ’ a r g ’ ] ) && i s s e t ($_SERVER [ ’PATH_INFO ’ ] ) ) {
$ p a t h = trim ($_SERVER [ ’PATH_INFO ’ ] , ’ / ’ ) ;
} e l s e i f ( i s s e t ($_GET [ ’ a r g ’ ] ) ) {
$ p a t h = $_GET [ ’ a r g ’ ] ;
}
i f (empty( $ p a t h ) && ! empty( r o u t e : : $ d e f a u l t r o u t e ) ) {
return route : : $defaultroute ;
}
// e x t r a c t i o n de l a r o u t e du PATH_INFO
e l s e i f ( preg_match ( ’ / ^ ( [ a−z ]+) \ / ? ( [ 0 − 9 ] ∗ ) $ / ’ , $ p a t h , $ r o u t e ) ) {
// v é r i f i c a t i o n s i l a r o u t e e s t a u t o r i s é
i f ( in_array ( $ r o u t e [ 1 ] , r o u t e : : $ r o u t e s a u t o r i s e ) ) {
return $route [ 1 ] ;
}
}

r e t u r n " 404 " ; // r o u t e p a s t r o u v é


}

p u b l i c s t a t i c function getCurrentArg () {
$ r o u t e = array ( ) ;
// s i p a s de PATH_INFO = d e f a u l t r o u t e
i f ( ! i s s e t ($_GET [ ’ a r g ’ ] ) && i s s e t ($_SERVER [ ’PATH_INFO ’ ] ) ) {
$ p a t h = trim ($_SERVER [ ’PATH_INFO ’ ] , ’ / ’ ) ;
} e l s e i f ( i s s e t ($_GET [ ’ a r g ’ ] ) ) {
$ p a t h = $_GET [ ’ a r g ’ ] ;
}
i f ( preg_match ( ’ / ^ ( [ a−z ]+) \ / ? ( [ 0 − 9 ] ∗ ) $ / ’ , $ p a t h , $ r o u t e ) ) {
i f ( in_array ( $ r o u t e [ 1 ] , r o u t e : : $ r o u t e s a u t o r i s e ) ) {
return ( int ) $route [ 2 ] ;
}
}
r e t u r n f a l s e ; // p a s d e f a u t
}
p u b l i c s t a t i c f u n c t i o n show404 ( ) {
include ( ’ r o u t e s / 4 0 4 . r o u t e . php ’ ) ;
exit ;
}
}

[Link]
<? php
namespace a s i 4 f r a m e ;
class template {
// I c i on p o u r r a i t m e t t r e d e s m e t h o d e s s p é c i f i q u e s p o u r l e f o r m a t a g e de d a t e p a r
exemple . . .
}

[Link]
<? php
header ( "HTTP/ 1 . 0 404 Not Found " ) ;
// a f f i c h a g e du t e m p l a t e 404
include ( ’ t e m p l a t e s / 4 0 4 . t p l . php ’ ) ;

[Link]
<? php
// g e s t i o n de l a s u p p r e s i o n
i f ( ! empty($_GET [ ’ d e l ’ ] ) ) {
MessageDb : : Delete ($_GET [ ’ d e l ’ ] ) ;
}

// g e s t i o n de l a m o d i f i c a t i o n
i f ( ! empty($_GET [ ’ e d i t ’ ] ) ) {
$ e d i t m e s s a g e = MessageDb : : Read ($_GET [ ’ e d i t ’ ] ) ;
$ t p l −>e d i t m e s s a g e = new A r r a y O b j e c t ( ) ;
$ t p l −>e d i t m e s s a g e −>t e x t e = $ e d i t m e s s a g e −>g e t T e x t e ( ) ;
$ t p l −>e d i t m e s s a g e −>u r l = $ e d i t m e s s a g e −>g e t U r l ( ) ;
$ t p l −>e d i t m e s s a g e −>i d = $ e d i t m e s s a g e −>g e t I d ( ) ;
$ t p l −>e d i t m e s s a g e −>e m a i l = $ e d i t m e s s a g e −>g e t E m a i l ( ) ;
}

// g e s t i o n du f o r m u l a i r e
i f ( ! empty ($_POST [ ’ u r l ’ ] ) ) {
// I n s e r t i o n du nouveau
try {
$m= new Message ( ) ;
$m−>s e t U r l ($_POST [ ’ u r l ’ ] ) ;
$m−>s e t E m a i l ($_POST [ ’ e m a i l ’ ] ) ;
$m−>s e t T e x t e ($_POST [ ’ t e x t e ’ ] ) ;
i f ( ! empty ($_POST [ ’ i d ’ ] ) ) {
$m−>s e t I d ($_POST [ ’ i d ’ ] ) ;
MessageDb : : Update ($m) ;
} else {
MessageDb : : C r e a t e ($m) ;
}
} c a t c h ( E x c e p t i o n $e ) {
// r e c h a r g e m e n t du f o r m u l a i r e p o u r l a c o r r e c t i o n
$ t p l −>e d i t m e s s a g e = new A r r a y O b j e c t ( ) ;
$ t p l −>e d i t m e s s a g e −>t e x t e = $_POST [ ’ t e x t e ’ ] ;
$ t p l −>e d i t m e s s a g e −>u r l = $_POST [ ’ u r l ’ ] ;
$ t p l −>e d i t m e s s a g e −>e m a i l = $_POST [ ’ e m a i l ’ ] ;
// g e s t i o n d e s e r r e u r s
$ t p l −>e r r = $e−>g e t M e s s a g e ( ) ;
}
}

// c h a r g e m e n t du " moteur " de t e m p l a t e


$ l i s t e d e s m e s s a g e s = MessageDb : : L i s t M e s s a g e ( ) ;
f o r e a c h ( $ l i s t e d e s m e s s a g e s a s $m) {
$ m e s s a g e = new A r r a y O b j e c t ( ) ;
$message −>d a t e = $m−>g e t D a t e ( ) ;
$message −>t e x t e = $m−>g e t T e x t e ( ) ;
$message −>i d = $m−>g e t I d ( ) ;
$message −>u r l = $m−>g e t U r l ( ) ;
$message −>e m a i l = $m−>g e t E m a i l ( ) ;
$ t p l −>m e s s a g e s [ ] = $ m e s s a g e ;
}

// a f f i c h a g e du t e m p l a t e home
i n c l u d e ( ’ t e m p l a t e s /home . t p l . php ’ ) ;

[Link]
<? php
// r é c u p é r a t i o n du p a r a m e t r e
$ i d=a s i 4 f r a m e \ r o u t e : : g e t C u r r e n t A r g ( ) ;
i f (! $id ) {
a s i 4 f r a m e \ r o u t e : : show404 ( ) ;
}

// r e c h e r c h e du m e s s a g e
$ m e s s a g e = MessageDb : : Read ( $ i d ) ;
i f ( ! $message ) {
a s i 4 f r a m e \ r o u t e : : show404 ( ) ;
}

// c h a r g e m e n t du " moteur " de t e m p l a t e


$ t p l −> t e x t e = $message −>g e t T e x t e ( ) ;
$ t p l −>e m a i l = $message −>g e t E m a i l ( ) ;
$ t p l −>d a t e = $message −>g e t D a t e ( ) ;
$ t p l −>u r l = $message −>g e t U r l ( ) ;

// l a n c e m e n t du t e m p l a t e
i n c l u d e ( ’ t e m p l a t e s / s i t e . t p l . php ’ ) ;

[Link]
<html>
<head>
< t i t l e>Page non t r o u v é e</ t i t l e>
<s t y l e>
div {
f o n t − s i z e : 3 0 0 px ;
color : grey ;
margin−t o p : 100 px ;
w i d t h : 100%;
t e x t −a l i g n : c e n t e r ;
}
</ s t y l e>
</head>
<body>
<div>404</ div>
</body>
</html>

[Link]
<html>
<head>
< t i t l e>E r r e u r</ t i t l e>
<s t y l e>
div {
f o n t − s i z e : 2 4 px ;
color : grey ;
margin−t o p : 100 px ;
w i d t h : 100%;
t e x t −a l i g n : c e n t e r ;
}
.t {
f o n t − s i z e : 2 0 0 px ;
}
</ s t y l e>
</head>
<body>
<div c l a s s=" t ">E r r e u r</ div>
<div c l a s s="m"><?=$e−>g e t M e s s a g e ( ) ?></ div>
</body>
</html>

[Link]
< !DOCTYPE html>
<html lang=" en "><head>
<meta h t t p −e q u i v=" c o n t e n t −t y p e " content=" t e x t / h t m l ; c h a r s e t=UTF−8">
< t i t l e>P a r t a g e de r e s s o u r c e s</ t i t l e>
<meta name=" v i e w p o r t " content=" w i d t h=d e v i c e −w i d t h , i n i t i a l −s c a l e =1.0 ">
<meta charset=" u t f −8">
<l i n k r e l=" s t y l e s h e e t " h r e f=" . . / s t a t i c / b o o t s t r a p . c s s " media=" s c r e e n ">
<l i n k r e l=" s t y l e s h e e t " h r e f=" . . / s t a t i c / b o o t s w a t c h . c s s ">
<s t y l e>
. bs −d o c s −s e c t i o n {
margin−t o p : 3em ;
}
iframe {
border : 0 ;
margin : 0 ;
padding : 0 ;
width :100%;
h e i g h t : 1 0 0 0 px ;
}
</ s t y l e>
</head>
<body>
<div c l a s s=" n a v b a r n a v b a r − d e f a u l t n a v b a r −f i x e d −t o p ">
<div c l a s s=" c o n t a i n e r ">
<div c l a s s=" n a v b a r −h e a d e r ">
<span c l a s s=" n a v b a r −b r a n d "><?= $ t p l −> t e x t e ?></span>
</ div>
<div c l a s s=" n a v b a r −c o l l a p s e c o l l a p s e " id=" n a v b a r −main ">
<ul c l a s s=" nav n a v b a r −nav n a v b a r − r i g h t ">
< l i><a type=" b u t t o n " c l a s s=" b t n b t n −w a r n i n g " h r e f=" . . / ">R e t o u r à l a l i s t e<
/a></ l i>
</ ul>
</ div>
</ div>
</ div>
<iframe s r c="<?= $ t p l −>u r l ?>"></ iframe>

<s c r i p t s r c=" . . / s t a t i c / j q u e r y . j s "></ s c r i p t>


<s c r i p t s r c=" . . / s t a t i c / b o o t s t r a p . j s "></ s c r i p t>
<s c r i p t s r c=" . . / s t a t i c / b o o t s w a t c h . j s "></ s c r i p t>

</body></html>

[Link]
< !DOCTYPE html>
<html lang=" en ">
<head>
<meta h t t p −e q u i v=" c o n t e n t −t y p e " content=" t e x t / h t m l ; c h a r s e t=UTF−8">
< t i t l e>P a r t a g e de r e s s o u r c e s</ t i t l e>
<meta name=" v i e w p o r t " content=" w i d t h=d e v i c e −w i d t h , i n i t i a l −s c a l e =1.0 ">
<meta charset=" u t f −8">
<l i n k r e l=" s t y l e s h e e t " h r e f=" s t a t i c / b o o t s t r a p . c s s " media=" s c r e e n ">
<l i n k r e l=" s t y l e s h e e t " h r e f=" s t a t i c / b o o t s w a t c h . c s s ">
<s t y l e>
. bs −d o c s −s e c t i o n {
margin−t o p : 3em ;
}
</ s t y l e>
</head>
<body>
<div c l a s s=" n a v b a r n a v b a r − d e f a u l t n a v b a r −f i x e d −t o p ">
<div c l a s s=" c o n t a i n e r ">
<div c l a s s=" n a v b a r −h e a d e r ">
<span c l a s s=" n a v b a r −b r a n d ">P a r t a g e de r e s s o u r c e</span>
</ div>
<div c l a s s=" n a v b a r −c o l l a p s e c o l l a p s e " id=" n a v b a r −main ">
<ul c l a s s=" nav n a v b a r −nav n a v b a r − r i g h t ">
< l i><a h r e f="#i n s e r t ">A j o u t e r</a></ l i >
< l i><a h r e f="#c o n n e c t ">Connexion</a></ l i >
</ ul>
</ div>
</ div>
</ div>

<div c l a s s=" c o n t a i n e r ">

<? php
i f ( ! empty( $ t p l −>e r r ) ) { ?>
< !−− A f f i c h a g e d e s é v e n t u e l s m e s s a g e s d ’ e r r e u r −−>
<d i v c l a s s ="row">
<d i v c l a s s =" c o l −l g −12">
<d i v c l a s s =" bs −e x a m p l e ">
<d i v c l a s s =" a l e r t a l e r t −d i s m i s s a b l e a l e r t −w a r n i n g ">
<b u t t o n t y p e =" b u t t o n " c l a s s =" c l o s e " d a t a −d i s m i s s =" a l e r t ">x</ b u t t o n >
<h4>Er reu r </h4>
<p><?=$ t p l −>e r r ?></p>
</ d i v >
</ d i v >
</ d i v >
</ d i v >
<?php } ?>

<!−− T a b l e s
================================================== −−>
<d i v c l a s s =" bs −d o c s −s e c t i o n ">
<d i v c l a s s ="row">
<d i v c l a s s =" c o l −l g −12">
<d i v c l a s s =" bs −e x a m p l e t a b l e −r e s p o n s i v e ">
< t a b l e c l a s s =" t a b l e t a b l e −s t r i p e d t a b l e −b o r d e r e d t a b l e −h o v e r ">
<t h e a d >
<t r >
<t h >#</t h >
<t h >R e s s o u r c e </t h >
<t h >URL</t h >
<t h >A c t i o n s </t h >
</ t r >
</ t h e a d >
<t b o d y >
<?php f o r e a c h ( $ t p l −>m e s s a g e s a s $ m e s s a g e ) { ?>
<t r >
<t d ><?=$message −>i d ?></t d >
<t d ><?=$message −>t e x t e ?></t d >
<t d ><a h r e f =" s i t e /<?=$message −>i d ?>"><?=$message −>u r l ?></a></t d >
<t d >
<?php i f ( $ t p l −>i s a u t h ) {?>
<!−− s i on e s t c o n n e c t é u n i q u e m e n t −−><a h r e f= ’ . / ? e d i t=<?=
$message −>id ?> ’ c l a s s =" b t n b t n −x s b t n −p r i m a r y ">
M o d i f i e r </a> <a h r e f= ’ . / ? del=<?=$message −>id ?> ’ c l a s s
=" b t n b t n −x s b t n −d a n g e r "> Supprimer </a>
<?php } ?>
</t d >
</ t r >
<?php } ?>
</ t b o d y >
</ t a b l e >
</ d i v ><!−− / e x a m p l e −−>
</ d i v >
</ d i v >
</ d i v >

<!−− F o r m u l a i r e d ’ a j o u t
================================================== −−>
<div c l a s s=" bs −d o c s −s e c t i o n ">
<div c l a s s=" row ">
<div c l a s s=" c o l −l g −6">
<div c l a s s=" w e l l ">
<form id=" i n s e r t " method="POST" a c t i o n=" . / " c l a s s=" bs −e x a m p l e form−
h o r i z o n t a l ">
< f i e l d s e t>
<legend>A j o u t e z v o t r e r e s s o u r c e</ legend>
<div c l a s s=" form−g r o u p ">
<l a b e l f o r=" i n p u t E m a i l " c l a s s=" c o l −l g −2 c o n t r o l − l a b e l ">Email</ l a b e l>
<div c l a s s=" c o l −l g −10 ">
<input c l a s s=" form−c o n t r o l " name=" e m a i l " id=" e m a i l " p l a c e h o l d e r="
Email " type=" t e x t " value=" <?=(! empty ( $ t p l −>e d i t m e s s a g e −>e m a i l ) ?
$ t p l −>e d i t m e s s a g e −>e m a i l : ’ ’ ) ?>">
</ div>
</ div>
<div c l a s s=" form−g r o u p ">
<l a b e l f o r=" i n p u t P a s s w o r d " c l a s s=" c o l −l g −2 c o n t r o l − l a b e l ">URL</ l a b e l
>
<div c l a s s=" c o l −l g −10 ">
<input c l a s s=" form−c o n t r o l " name=" u r l " id=" u r l " p l a c e h o l d e r="URL"
type=" t e x t " value=" <?=(! empty ( $ t p l −>e d i t m e s s a g e −>u r l ) ? $ t p l −>
e d i t m e s s a g e −>u r l : ’ ’ ) ?>">
</ div>
</ div>
<div c l a s s=" form−g r o u p ">
<l a b e l f o r=" t e x t A r e a " c l a s s=" c o l −l g −2 c o n t r o l − l a b e l "> D e s c r i p t i f</
l a b e l>
<div c l a s s=" c o l −l g −10 ">
<textarea c l a s s=" form−c o n t r o l " name=" t e x t e " rows=" 3 " id=" t e x t e "><
?=(!empty( $ t p l −>e d i t m e s s a g e −>t e x t e ) ? $ t p l −>e d i t m e s s a g e −>t e x t e : ’ ’
)?></ textarea>
<span c l a s s=" h e l p −b l o c k ">D é c r i v e z r a p i d e m e n t l a r e s s o u r c e p a r t a g é e
.</span>
<?=(!empty( $ t p l −>e d i t m e s s a g e −>i d ) ? "<i n p u t t y p e =’ h i d d e n ’ name=’ i d ’
v a l u e =’ " . $ t p l −>e d i t m e s s a g e −>i d . " ’/> " : ’ ’ )?>
</ div>
</ div>

<div c l a s s=" form−g r o u p ">


<div c l a s s=" c o l −l g −10 c o l −l g −o f f s e t −2">
<button type=" s u b m i t " c l a s s=" b t n b t n −p r i m a r y "> E n r e g i s t r e r</ button>
</ div>
</ div>
</ f i e l d s e t>
</form>
</ div>
</ div>
<div c l a s s=" c o l −l g −5 c o l −l g −o f f s e t −1">
<div c l a s s=" w e l l ">
<? php i f ( ! $ t p l −> i s a u t h ) {?>

<form id=" c o n n e c t " method="POST" a c t i o n=" . / " c l a s s=" bs −e x a m p l e form−


h o r i z o n t a l ">
< f i e l d s e t>
<legend>Connexion</ legend>
<div c l a s s=" form−g r o u p ">
<l a b e l f o r=" i n p u t E m a i l " c l a s s=" c o l −l g −4 c o n t r o l − l a b e l ">Mot de
p a s s e</ l a b e l>
<div c l a s s=" c o l −l g −8">
<input c l a s s=" form−c o n t r o l " name=" a u t h " id=" a u t h " p l a c e h o l d e r="
Mot de p a s s e " type=" p a s s w o r d ">
<span c l a s s=" h e l p −b l o c k ">Avec l e mot de p a s s e a d m i n i s t r a t e u r ,
v o u s p o u r r e z m o d i f i e r e t s u p p r i m e r d e s r e s s o u r c e s .</span>
</ div>
</ div>

<div c l a s s=" form−g r o u p ">


<div c l a s s=" c o l −l g −8 c o l −l g −o f f s e t −4">
<button type=" s u b m i t " c l a s s=" b t n b t n −p r i m a r y ">C o n n e c t e r</ button>
</ div>
</ div>
</ f i e l d s e t>
</form>
<? php } e l s e {?>
Connecté
<? php } ?>

</ div>

</ div>
</ div>
</ div>

< f o o t e r>
<div c l a s s=" row ">
<div c l a s s=" c o l −l g −12 ">
<p>Made b y <a h r e f=" h t t p : / / t h o m a s p a r k . me/ ">Thomas Park</a> . C o n t a c t him a t
<a h r e f=" m a i l t o : h e l l o @ t h o m a s p a r k . me">h e l l o @ t h o m a s p a r k . me</a> .</p>
<p>Code l i c e n s e d u n d e r t h e <a h r e f=" h t t p : / /www . a p a c h e . o r g / l i c e n s e s /LICENSE
−2.0 ">Apache L i c e n s e v2 . 0</a> .</p>
<p>Based on <a h r e f=" h t t p : / / g e t b o o t s t r a p . com/ ">B o o t s t r a p</a> . I c o n s from <
a h r e f=" h t t p : / / f o r t a w e s o m e . g i t h u b . i o / Font−Awesome/ ">Font Awesome</a> .
Web f o n t s from <a h r e f=" h t t p : / /www . g o o g l e . com/ w e b f o n t s ">G o o g l e</a> .
F a v i c o n b y <a h r e f=" h t t p s : / / t w i t t e r . com/ g e r a l d h i l l e r ">G e r a l d H i l l e r</a>
.</p>

</ div>
</ div>

</ f o o t e r>

</ div>

<s c r i p t s r c=" s t a t i c / j q u e r y . j s "></ s c r i p t>


<s c r i p t s r c=" s t a t i c / b o o t s t r a p . j s "></ s c r i p t>
<s c r i p t s r c=" s t a t i c / b o o t s w a t c h . j s "></ s c r i p t>

</body></html>

Remarques
1. Le serveur asi-technoweb utilisé lors de la session précédente est toujours à votre disposition et est
configuré pour interpréter les scripts PHP.
2. Pour plus d’informations sur PHP : [Link]
3. Continuez à vérifier vos pages HTML et CSS sur le site du W3C ([Link]
4. À l’issu de la séance, vous aurez accès à la correction de ce TDM au format PDF.
5. Déposez votre compte-rendu sur moodle sous la forme d’un fichier PDF de 2p. (1 feuille
recto-verso) nommé [Link], chez chacune des 2 personnes du binôme.

Vous aimerez peut-être aussi