LIMIT (recherche) HELP !
Posté : 25 mai 2012, 03:24
Bonsoir ! 
J'ai un petit soucis, voilà j'ai un script qui me permet de faire une recherche en fonction de la valeur rentré dans le champs, la pagination est gérer via les SESSIONS !
J'ai juste un problème de LIMIT , j'ai toujours pas trouvé la solution, si quelqu'un peux m'aider !
Vous pouvez testé ici : http://www.project-heberg.fr/arcades_n [...] recherche.php
Par exemple en choisissant Maison j'ai cette erreur de LIMIT qui s'affiche ^^
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 '-10, 10' at line 1
En affichant ma requête :
SELECT * FROM arc_achat WHERE type = 'Location' AND (prix BETWEEN 0 AND 999999999) ORDER BY prix ASC LIMIT -10, 10
J'ai un petit soucis, voilà j'ai un script qui me permet de faire une recherche en fonction de la valeur rentré dans le champs, la pagination est gérer via les SESSIONS !
J'ai juste un problème de LIMIT , j'ai toujours pas trouvé la solution, si quelqu'un peux m'aider !
Vous pouvez testé ici : http://www.project-heberg.fr/arcades_n [...] recherche.php
Par exemple en choisissant Maison j'ai cette erreur de LIMIT qui s'affiche ^^
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 '-10, 10' at line 1
En affichant ma requête :
SELECT * FROM arc_achat WHERE type = 'Location' AND (prix BETWEEN 0 AND 999999999) ORDER BY prix ASC LIMIT -10, 10
<?php
session_start();
include('includes/haut.php');
include('includes/menu.php');
include('includes/menu_d.php');
?>
<div id="page_principale">
<img src="images/titre8.png"><br><br>
<?
if (empty($_SESSION['recherche'])) {
// gestion du where
$where = array();
$filter = function($p) use (&$where) {
if ((isset($_POST[$p]) && strlen($_POST[$p]))) {
$where[] = "$p = '".mysql_real_escape_string($_POST[$p])."'";
$_SESSION['recherche'][$p] = $_POST[$p];
}
};
$filter('type');
$filter('bien');
$filter('ville');
$filter('habimm');
$prix_min = (isset($_POST['budget_min']) && ctype_digit($_POST['budget_min'])) ? $_POST['budget_min'] : 0;
$prix_max = (isset($_POST['budget_max']) && ctype_digit($_POST['budget_max'])) ? $_POST['budget_max'] : 999999999;
$_SESSION['recherche']['budget_min'] = $prix_min;
$_SESSION['recherche']['budget_max'] = $prix_max;
$where[] = "(prix BETWEEN $prix_min AND $prix_max)";
$sql_where = 'WHERE '.implode(' AND ', $where);
$_SESSION['recherche']['sql_where'] = $sql_where;
// gestion du tri
$order_by = (isset($_POST['tri']) && ($_POST['tri'] === 'DESC')) ? 'DESC' : 'ASC';
$sql_order_by = "ORDER BY prix $order_by";
$_SESSION['recherche']['tri'] = $order_by;
$_SESSION['recherche']['sql_order_by'] = $sql_order_by;
}
else {
// on récupère les morceaux de sql assemblés précédemment
$sql_where = $_SESSION['recherche']['sql_where'];
$sql_order_by = $_SESSION['recherche']['sql_order_by'];
}
$target_page = "recherche_ok.php";
$result = mysql_query ("SELECT * FROM arc_achat $sql_where $sql_order_by $sql_limit") or die(mysql_errno().' :: '.mysql_error());
if ($anno==' ') {
echo'<table width="100%" border="0" bgcolor="#FFFFFF"><tr>
<td align="center"><i>Aucun résultat pour cette recherche.</i></td></tr></table>';
exit();
}
// on compte le nombre total d'enregistrements renvoyés par la requête filtrée
$sql = 'SELECT COUNT(*) AS nbOfRec FROM arc_achat '.$sql_where;
$qry = mysql_query($sql) or die(mysql_errno().' :: '.mysql_error());
$nb_records = mysql_result($qry, 0, 0);
echo' <b><font size="5">Résultat de la recherche :<br><font color="#FF0000"> '.$nb_records.' biens correspondant à vos critères de recherche ont été trouvés.</font><br><a href="form_recherche.php" style="color:ff40a0;text-decoration:none;">Faire une nouvelle recherche.</a></b><hr>';
// on vérifie si la page demandée est dans les limites fixées par la pagination
$nb_items_per_page = 10;
$nb_pages = ceil($nb_records / $nb_items_per_page);
$asked_page = (isset($_GET['page']) && ctype_digit($_GET['page']) && ($_GET['page']))
? (int) $_GET['page']
: 1;
if ($nb_records === 0) {
$asked_page = 1;
}
else
if ($asked_page > $nb_pages) {
// si la page demandée est supérieure au nombre total de pages alors
// page demandée = dernière page
$asked_page = $nb_pages;
}
// on détermine la clause LIMIT du sql à partir des données de pagination
if ($asked_page<0){ $asked_page = 1; } // au cas où (int) $_GET['page'] vaut 0
$offset =($asked_page - 1) * $nb_items_per_page;
$length = $nb_items_per_page;
$sql_limit = "LIMIT $offset, $length";
// on extrait les données à afficher
$sql = "SELECT * FROM arc_achat $sql_where $sql_order_by $sql_limit";
$data = mysql_query($sql) or die(mysql_error());
// PAGINATION //
// je suppose que ton index affiche 10 pages
$index_range = 10;
// détermination des bornes à afficher
if ($nb_pages <= $index_range) {
$index_start = 1;
$index_end = $nb_pages;
}
else
if ($asked_page === 1) {
$index_start = 1;
$index_end = $index_range;
}
else {
$index_start = $asked_page;
$index_end = (($index_start + $index_range) > $nb_pages) ? $nb_pages : ($index_start + $index_range);
}
// affichage des liens spéciaux : Premier Précedent Suivant Dernier
$show_first = ($index_start > 1);
$show_prev = ($asked_page > 1);
$show_next = ($asked_page < $nb_pages);
$show_last = ($index_end < $nb_pages);
// génération des la pagination
$paginate = array();
$paginate[] = '<div class="paginate">';
// lien Premier
if ($show_first) {
$paginate[] = '<font size="5"><b><a href="'.$target_page.'?page=1" style="color:ff40a0;text-decoration:none;">First</font></b></a>';
}
// lien Précédent
if ($show_prev) {
$paginate[] = '<font size="5"><b><a href="'.$target_page.'?page='.($asked_page - 1).'" style="color:ff40a0;text-decoration:none;">Page précédente <<</font></b></a> ';
}
// affichage des numéros des pages
for ($i = $index_start; $i <= $index_end; ++$i) {
$paginate[] = ($i === $asked_page)
? '<span class="current"><font color="#ff40a0" size="5"><b>'.$i.'</b></font></span> '
: '<font size="5"><b><a href="'.$target_page.'?page='.$i.'" style="color:000000;text-decoration:none;">'.$i.'</font></b></a> ';
}
// lien Suivant
if ($show_next) {
$paginate[] = ' <font size="5" color="#ff40a0"><b><a href="'.$target_page.'?page='.($asked_page + 1).'" style="color:ff40a0;text-decoration:none;">Page suivante >></font></b></a>';
}
// lien Dernier
if ($show_last) {
$paginate[] = '<font size="5" color="#ff40a0"><b><a href="'.$target_page.'?page='.$index_end.'" style="color:ff40a0;text-decoration:none;">Last</a></font></b>';
}
$paginate[] = '</div>';
?>
<?
echo implode(null, $paginate);
?><br>
<?
while($plus = mysql_fetch_assoc($data))
{
$ligne = $data["idA"];
//Affichage l'aannonce
?>
<center><div style="background-image:url('images/fond_bien.png');background-repeat:no-repeat; width:650px; height:308px;">
<table width=650>
<td width=320>
<?
if ($plus['photo'] == true) {
echo '<br><center><img src="images/biens/'.$plus['photo'].'" width="300" height="260" /></center>';
?>
<?php } else { ?>
<br><center><img src="images/biens/photo.png" width="300" height="260" /></center>
<?php } ?>
</td>
<td>
<?
echo '<center><b><font size="6">'.stripslashes(htmlspecialchars($plus['bien'])).'</font></b><br><font size="5">'.stripslashes(htmlspecialchars($plus['ville'])).'</font>';
?>
<?
if ($plus['loc'] == true) {
echo '<font size="5">- '.stripslashes(htmlspecialchars($plus['loc'])).'</font><br>';
?>
<?php } else { ?>
<BR>
<?php } ?>
<?
echo '<font size="6" color="#ff40a0"><b>'.stripslashes(htmlspecialchars($plus['prix'])).' € AI
</font></b><br><br><font size="6"><b><a href="biens.php?id='.$plus['id'].'&action=consulter" style="color:000000;text-decoration:none;">> Détails</b></a></font><br><br>';
?>
<?
if ($plus['exclu'] == true) {
echo '<img src="images/exclu.gif"/>';
?>
<?php } else { ?>
<?php } ?>
<?
echo '</center>';
?>
</td>
</tr>
</table><br>
</div></center><br><br>
<?
}
?>
</div>
Merci