Нужна небольшая помощь с пейджингом Mysql (LIMIT)

0

У меня есть этот код:

    $page = $_GET['page'];
    $res_per_page = $_GET['res_per_page'];

    $start_point = (($page * $res_per_page) - $res_per_page);
    $query.= " LIMIT $start_point, $res_per_page";
    $qry_result = mysql_query($query) or die(mysql_error());
    $total_pages = ceil($nr_ads / $res_per_page); 

Переменная "$ nr_ads" - это общее количество объявлений...

Код работает отлично, но мне интересно, как я могу определить, какие объявления показываются, например:

   Showing ads 10 - 20

Спасибо...

Теги:

2 ответа

2
Лучший ответ
print 'Showing ads ' . $start_point . ' - ' . min($nr_ads, $start_point + res_per_page);

В принципе, у вас уже есть исходная точка (которая предоставляется вашему предложению LIMIT в SQL. "Конечная точка" вычисляется путем добавления $res_pre_page к этой начальной точке. Однако на последней странице, у вас может быть только 2 записи - поэтому вы должны использовать функцию min() для печати, например, "Показывать объявление 60 - 62".


Followup: В другом ответе упоминается риск SQL-инъекции. Вы будете в безопасности, используя:

$page = intval($_GET['page']);
$res_per_page = max(1, intval($_GET['res_per_page'])); // To avoid division by zero :)
2

Самый простой способ - создать поле идентификатора в своей таблице и использовать его для отображения требуемой информации, ваш запрос будет изменен следующим образом:

 LIMIT $start_point, $res_per_page ORDER BY ad_id ASC

оттуда вы можете получить первый результат и последний результат и использовать его для вывода информации, которую вы собираете.

Одна очень важная заметка по безопасности: следующий код может привести к удаленной SQL-инъекции:

$query.= " LIMIT $start_point, $res_per_page";

Настоятельно рекомендуется изменить его на:

$query.= " LIMIT $start_point, ".mysql_real_escape_string($res_per_page)." ORDER BY ad_id ASC";

Ещё вопросы

Сообщество Overcoder
Наверх
Меню