Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: постраничная навигация.ошибка
 
 автор: slo_nik   (03.09.2008 в 02:43)   письмо автору
 
 

Доброе время суток.
Помогите,пожалуйста,разобраться с ошибкой.
Попытался сделать постраничную навигацию,пример которой находится на этом сайте,но у меня выдаёт ошибку :
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 '-1, 1' at line 1.
Запрос к БД на вывод статей я делаю так:
$art=mysql_query("SELECT id,description,title,date,author,view,rating,q_vote FROM post_sn ORDER BY id DESC LIMIT $start, $num",$bd);
.
Если убрать строку
 LIMIT $start, $num
,то статьи выводятся нормально.
Подскажите как можно исправить ошибку?

  Ответить  
 
 автор: xx77   (03.09.2008 в 03:19)   письмо автору
 
   для: slo_nik   (03.09.2008 в 02:43)
 

переменная $start имеет отрицательное значение -1.

из приведённного кода невидно откуда Вы её получаете

  Ответить  
 
 автор: Slo_Nik   (03.09.2008 в 11:32)   письмо автору
 
   для: xx77   (03.09.2008 в 03:19)
 

Получаю переменню $start
$pnav = mysql_query("SELECT `str` FROM `options`",$bd);
$p_nav = mysql_fetch_array($pnav);
$num = $p_nav["str"];
// Извлекаем из URL текущую страницу
$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$pnav_n = mysql_query("SELECT COUNT(*) FROM post_sn");
$temp = mysql_fetch_array($pnav_n);
$posts = $temp[0];
// Находим общее число страниц
$total = intval(($posts - 1) / $num) + 1;
//$total =  intval($total);
// Определяем начало сообщений для текущей страницы
$page = intval($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
// Вычисляем начиная с какого номера
// следует выводить сообщения
$start = $page * $num - $num;

  Ответить  
 
 автор: Trianon   (03.09.2008 в 11:44)   письмо автору
 
   для: Slo_Nik   (03.09.2008 в 11:32)
 

По моему, ошибка здесь:
// Если значение $page меньше единицы или отрицательно
if(empty($page) or $page < 0) $page = 1;

Значение $num , кстати, тоже странное для постраничной навигации.

  Ответить  
 
 автор: xx77   (03.09.2008 в 13:07)   письмо автору
 
   для: Trianon   (03.09.2008 в 11:44)
 

наверное можно попробовать как-то так
<?
if (
!(
$pnav mysql_query('SELECT COUNT(post_sn.id), options.str FROM post_sn, options GROUP BY "COUNT(post_sn.id)"',$bd))
 || 
 !
mysql_num_rows($pnav)
)
exit(
'<h3>произошла ошибка:</h3>' mysql_error() . "<hr/>\n") ; 

list(
$total$num) = mysql_fetch_row($pnav); // получить 

$total ceil($total $num); 

$page =( isset($_GET['page']) ) ? (int) $_GET['page']: 1
if(
$page 1$page 1;  // если меньше
else if($page $total$page $total// если больше 

$start $num * ($page 1);// UPD// поправил

// не сильно проверял

  Ответить  
 
 автор: Slo_Nik   (03.09.2008 в 13:08)   письмо автору
 
   для: Trianon   (03.09.2008 в 11:44)
 

$num берётся с таблицы БД, там задано кол-во выводимых статей на страницу.

  Ответить  
 
 автор: BinLaden   (03.09.2008 в 13:12)   письмо автору
 
   для: Slo_Nik   (03.09.2008 в 13:08)
 

Странно то, что это кол-во - единица. :))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования