Bonjour,
Grâce aux 2 classes suivantes, j'affiche une liste de livres :
-> ListeLivres.class.php :
-> ManagerLivres.class.php :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 <?php class Livre { private $_titre; private $_isbn; private $_librairie; private $_genre; // Un tableau de données doit être passé à la fonction (d'où le préfixe « array »). public function hydrate(array $donnees) { foreach ($donnees as $key => $value) { // On récupère le nom du setter correspondant à l'attribut. $method = 'set'.ucfirst($key); // Si le setter correspondant existe. if (method_exists($this, $method)) { // On appelle le setter. $this->$method($value); } } } public function __construct(array $donnees){ $this->hydrate($donnees); } public function titre() { return $this->_titre; } public function isbn() { return $this->_isbn; } public function librairie() { return $this->_librairie; } public function genre() { return $this->_genre; } public function setTitre($titre) { // On vérifie qu'il s'agit bien d'une chaîne de caractères. if (is_string($titre) ) { $this->_titre = $titre; } } public function setLibrairie($librairie) { // On vérifie qu'il s'agit bien d'une chaîne de caractères. if (is_string($librairie) ) { $this->_librairie = $librairie; } } public function setGenre($genre) { // On vérifie qu'il s'agit bien d'une chaîne de caractères. if (is_string($genre) ) { $this->_genre = $genre; } } public function setIsbn($isbn) { // On vérifie qu'il s'agit bien d'un entier. if (intval($isbn) ) { $this->_isbn = $isbn; } } }
-> affiche.php :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 <?php class Manager { private $_db; // Instance de PDO public function __construct($db) { $this->setDb($db); } public function getList() { $liste = array(); $q = $this->_db->query('SELECT L.TITRE AS titre,L.ISBN AS isbn,L.SOUS_TITRE AS sous_titre,LEFT(L.TITRE,50)AS extrait_titre, L.ID_LIVRE AS id_livre, L.DATE_ACHAT AS date_achat,L.DATE_PUBLICATION AS date_publication,L.DATE_LECTURE AS date_lecture, L.fichier_couverture_recto AS couverture_recto, L.miniature, ED.NOM_EDITEUR AS editeur,ED.ID_EDITEUR AS id_editeur,LIB.NOM_LIBRAIRIE AS librairie,LIB.ID_LIBRAIRIE AS id_librairie,FORM.NOM_FORMAT AS format,FORM.ID_FORMAT AS id_format, L.COMMENTAIRES AS commentaires, L.RESUME AS resume,LEFT(L.RESUME,215)AS extrait, L.STATUT_LECTURE AS statut_lecture, L.APPRECIATION AS appreciation, L.NB_PAGES AS nb_pages,G.NOM_GENRE as genre, G.ID_GENRE FROM LIVRE L INNER JOIN EDITEUR ED ON ED.ID_EDITEUR = L.ID_EDITEUR INNER JOIN LIBRAIRIE LIB ON LIB.ID_LIBRAIRIE = L.ID_LIBRAIRIE INNER JOIN FORMAT FORM ON FORM.ID_FORMAT = L.ID_FORMAT INNER JOIN THEMATISE T ON T.ID_LIVRE = L.ID_LIVRE INNER JOIN GENRE G ON T.ID_GENRE = G.ID_GENRE '); while ($donnees = $q->fetch(PDO::FETCH_ASSOC)) { $liste[] = new Livre($donnees); } return $liste; } public function setDb(PDO $db) { $this->_db = $db; } }
Je souhaite ajouter une méthode à la classe ManagerLivres.class.php : la possibilité d'afficher ma liste de livres après une recherche multi-critères.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <?php require 'ListeLivres.class.php'; require 'ManagerLivres.class.php'; $db = new PDO('mysql:host=localhost;dbname=insert_reference', 'root', ''); $manager = new Manager($db); $livres= $manager->getList(); foreach($livres as $livre){ echo '<p>'.$livre->titre().'.</p>'; echo '<p>'.$livre->isbn().'</p>'; echo '<p>'.$livre->librairie().'</p>'; echo '<p>'.$livre->genre().'</p>'; }
Actuellement, j'utilise le code procédural suivant :
Etant débutant en POO, pouvez-vous m'aider à implémenter le code ci-dessus dans une nouvelle méthode de ma classe ManagerLivres.class.php ? Merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 $id_livre = (int)(iSset($_POST['id_livre'])) ? $_POST['id_livre'] : null; $isbn = (int)(iSset($_POST['isbn'])) ? $_POST['isbn'] : null; $id_librairie = (int)(iSset($_POST['id_librairie'])) ? $_POST['id_librairie'] : null; $id_genre = (int)(iSset($_POST['id_genre'])) ? $_POST['id_genre'] : null; $db = mysql_connect("localhost","root", "") or die ('erreur de connexion'); mysql_select_db('insert_reference',$db); mysql_set_charset( 'utf8' ); $select = 'SELECT SQL_CALC_FOUND_ROWS L.ID_LIVRE,titre,miniature,DATE_ACHAT,DATE_PUBLICATION,NB_PAGES, sous_titre,RESUME,commentaires'; $from = 'FROM LIVRE L'; $jointure=''; $where = array(); if($id_genre != null) { $select .=',G.NOM_GENRE, G.ID_GENRE'; $jointure=' INNER JOIN THEMATISE T ON T.ID_LIVRE = L.ID_LIVRE INNER JOIN GENRE G ON T.ID_GENRE = G.ID_GENRE'; $where[] ='G.id_genre = '.$id_genre; } if($id_librairie != null) { $select .=',LIB.ID_LIBRAIRIE,LIB.NOM_LIBRAIRIE'; $jointure .=' INNER JOIN LIBRAIRIE LIB ON LIB.ID_LIBRAIRIE = L.ID_LIBRAIRIE '; $where[] ='LIB.id_librairie = '.$id_librairie; } [... idem pour les autres critères de recherche] $sqlWhere = (empty($where)) ? null : 'WHERE '.implode(' AND ', $where); $sql = $select.' '.$from.' '.$jointure.' '.$sqlWhere; $query = mysql_query($sql); $html =''; while ($row = mysql_fetch_array($query)) { $html .= '<p>'.strip_tags($row['titre']).'</p>'; $html .= '<p>'.strip_tags($row['NOM_GENRE']).'</p>'; [...] } $data = array('content'=> $html); header('Content-type: application/json'); echo json_encode($data); //exploitation du résultat avec ajax
Partager