Bonjour,

J'ai voulu implémenter dans mon code un script de pagination mais le résultat pêche en raison apparemment de la requête SQL (entre autres ?) :

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
 
<?php
 
// Connexion à la base de donnée
require_once("connexionMysql.inc.php");
 
 
// Le nom de notre table
$tablename = 'liste';
 
$ID_AUTEUR = (iSset($_GET['ID_AUTEUR']) ? $_GET['ID_AUTEUR'] : null);
$GENRE = (iSset($_GET['GENRE']) ? $_GET['GENRE'] : null);
 
 
// Tri sur colonne
$tri_autorises = array('AUTEUR','TITRE','GENRE');
 
if(!isset($_GET['order'])) $_GET['order']="";
$order_by = in_array($_GET['order'],$tri_autorises) ? $_GET['order'] : 'AUTEUR';
 
 
// Sens du tri
$order_dir = isset($_GET['inverse']) ? 'DESC' : 'ASC';
 
// PAGINATION
 
/* Numero de page (1 par défaut) */
if( isset($_GET['page']) && is_numeric($_GET['page']) )
  $page = $_GET['page'];
else
  $page = 1;
 
/* Nombre d'info par page */
$pagination = 10;
/* Numéro du 1er enregistrement à lire */
$limit_start = ($page - 1) * $pagination;
 
// PAGINATION
 
 
$requete  = "SELECT * FROM liste LIMIT $limit_start, $pagination";
 
 
if ( $ID_AUTEUR != null) {   // permet de filtrer ma liste de livres par auteur
  $requete  .= " WHERE ID_AUTEUR='".$ID_AUTEUR."'";
 
  if ( $GENRE != null) { $requete  .= " and GENRE='".$GENRE."'"; }//filtre par auteur et genre
 
}
else
{
  if( $GENRE != null) { // filtre par genre
  $requete  .= " WHERE GENRE='".$GENRE."'"; 
  }
}
 
$requete .= " ORDER BY ".$order_by." ".$order_dir; // tri
 
 
echo "$requete";
 
 
$resultat = mysql_query($requete) or die('Erreur SQL !'.$requete.'<br>'.mysql_error());
 
$num_rows = mysql_num_rows($resultat);//pour d'avoir le nb de mes livres
 
 
// fonction qui affiche les liens de TRI
function sort_link($text,$order=false)
{
	global $order_by, $order_dir;
 
	if(!$order)
		$order = $text;
 
 
	$link = '<a href="?order=' . $order ;
 
 
 
	if (isset($_GET['ID_AUTEUR'])) {            
     $link .= "&ID_AUTEUR=".$_GET['ID_AUTEUR'];	 	
	}
 
	if (isset($_GET['GENRE'])) {            
     $link .= "&GENRE=".$_GET['GENRE'];	 
	}
 
	if($order_by==$order && $order_dir=='ASC')
		$link .= '&inverse=true';
	$link .= '"';
	if($order_by==$order && $order_dir=='ASC')
		$link .= ' class="order_asc"';
	elseif($order_by==$order && $order_dir=='DESC')
	$link .= ' class="order_desc"';
 
	$link .= '>' . $text . '</a>';
 
	return $link;
}
 
?>
...contenu de ma page...
 
Puis suite et fin du scrip de pagination : 
 
<div class="barrenavigation">
 
<?php   $nb_total = mysql_query('SELECT COUNT(*) AS nb_total FROM liste');
$nb_total = mysql_fetch_array($nb_total);
$nb_total = $nb_total['nb_total'];
 
/* Pagination */
$nb_pages = ceil($nb_total / $pagination);
 
echo '<p>[ Page :';
/* Boucle sur les pages */
for ($i = 1 ; $i <= $nb_pages ; $i++) {
  if ($i == $page )
    echo " $i";
  else
    echo " <a href=\"?page=$i\">$i</a> ";
}
echo ' ]</p>';
 
?>
 
</div>
Mais lorsque je veux afficher la page,l'erreur suivante intervient :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
SELECT * FROM liste LIMIT 0, 10 ORDER BY AUTEUR ASCErreur SQL !SELECT * FROM liste LIMIT 0, 10 ORDER BY AUTEUR ASC
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY AUTEUR ASC' at line 1
Je vois que le LIMIT est mal placé...c'est sans doute ce qui empêche la requête d'aboutir et ma page de s'afficher n'est-ce pas ? Comment faire pour résoudre cela ? Merci d'avance.