У меня есть этот код:
$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
Спасибо...
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 :)
Самый простой способ - создать поле идентификатора в своей таблице и использовать его для отображения требуемой информации, ваш запрос будет изменен следующим образом:
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";