Bonjour,

Grâce aux 2 classes suivantes, j'affiche une liste de livres :

-> ListeLivres.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;
    }
  }  
 
}
-> 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
 
<?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;
  }		
 
}
-> 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
 
<?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>';
}
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.
Actuellement, j'utilise le code procédural suivant :
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
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.