у меня ошибки в постраничном выводе

usascha

Новичок
у меня ошибки в постраничном выводе

у меня есть следующий код:
PHP:
@$outcome_art=mysql_query("SELECT * FROM articles ORDER BY ID ASC, adate ASC");

while ($article=mysql_fetch_array($outcome_art))
{
//здесь выбираются значения из базы типа
$id=$article["ID"];
$title=$article["title"];
}

//здесь вставляется строка с навигацией по страницам: 1 2 3  и т.д.

//а вот тут начинается то, что никак не могу осознать
for ($i=1; $i<=$limite; $i++) {

//здесь показываются выбранные ранее значения $id, $title  и т.д.
}
Вот с последним циклом меня и зациклило. :confused:

Как бы я ни пытался, у меня выводит всегда одну и ту же строку из базы $limite количество раз!!!

Знаю, что надо как-то сделать массив из значений, выбираемых из базы, а потом их привязать к $i, но как это сделать не понимаю.

Подскажите, пожалуйста.
 

Фанат

oncle terrible
Команда форума
постраничный вывод из базы делается совсем не так.
в mysql есть оператор LIMIT
вот с его помощью и делают
 

usascha

Новичок
Я искал по сайту и нашел много вариантов, описывающих разные нюансы вывода. С LIMIT тоже видел.
Через LIMIT это единственный вариант? Мне он немного сложноват, чтобы приделать к тому, что у меня есть.
 

Фанат

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

Впрочем, ошибку найти легко -надо всего лишь хорошенько посидеть надд твоим скриптом.
 

IBSN

Новичок
PHP:
$start=$page*$Messages-$Messages;
$end=$Messages+($page*$Messages-$Messages);
$page - страница (1, 2, 3)
$Messages - сколько можно выводить на стр.
это тебе под твой вариант, $start это с какого индекса показывать $end это каким индексом заканчивать показ... Если не глупый, догадаешься...

НО... лучше используй LIMIT ... с ним гораздо меньше хлопот...
 

Demiurg

Guest
IBSN
ты явно в школе плохо учил математику, а ну-ка быстро упрости выражение.
 

IBSN

Новичок
Demiurg
возможно : ) я и по сей день учу математику в школе : )
и на сегодняшний день не вижу более простого выражения...
предложи свой вариант, если не трудно.
 

Demiurg

Guest
>$end=$Messages+($page*$Messages-$Messages);
раскрываем скобки, получаем
$end=$Messages+$page*$Messages-$Messages;
$Messages и -$Messages сокращается, остается
$end=$page*$Messages;
 

usascha

Новичок
Я подредактировал код, но у меня все равно не получается то, что хотел. Сейчас почему то показывается только одна последняя запись.

Код:

PHP:
@$outcome_art=mysql_query("SELECT * FROM articles ORDER BY ID ASC, adate ASC"); 

while ($article=mysql_fetch_array($outcome_art)) 
{ 
//здесь выбираются значения из базы типа 
$id=$article["ID"]; 
$title=$article["title"]; 
} 

//здесь вставляется строка с навигацией по страницам: 1 2 3  и т.д. 

        $n_start = $lim_start+1;
        $num_tot = count($article);
        if ($n_start+$limite-1 < $num_tot) 
          {
            $n_end = ($lim_start+$limite);
            $more_results = 1;
          }
        else 
          {
            $n_end = $num_tot;
            $more_results = 0;
          }

for ($n = 1; $n <= $n_end; $n+=$limite) {
	if ($n >= $n_start) {
		$article[$n] = array ();
	}

//if (is_array($article)) {
	while (list($n) = each($article)) {


//здесь показываются выбранные ранее значения $id, $title  и т.д. 
}
 

Demiurg

Guest
и что, мы за тебя должны отлаживать ?
циклы, конечно у тебя интересные.
 

usascha

Новичок
Если они интересные, то почему не работает. Я не могу понять причину вывода только одной строки из базы, ведь $limite=10.
 

Demiurg

Guest
Объясни значение первых 5 строк, там где запрос и цикл. Что должно получиться после их выполнения? и зачем ты ставишь собаку ?
 

Фанат

oncle terrible
Команда форума
Кажется, ты не понял предыдущий мой ответ.
Мне нетрудно его повторить:
Никого не интересует исправлять бессмысленный код.
 

usascha

Новичок
Запрос формирует массив, из которого выбираются значения, выводимые в месте, обозначенном как
//здесь показываются выбранные ранее значения $id, $title и т.д.

Собаку я не ставлю, я ее не убираю, т.к. это было в коде, который работает и мне она не мешала. Смысл ее мне понятен - подавление сообщений PHP в случае ошибок.
 

Фанат

oncle terrible
Команда форума
В случае ошибок сообщения надо не подавлять. а читать и исправлять.
 

Demiurg

Guest
какой массив ?
давай называть все своими именами, я вижу там только массив $article. Кроме того запрос не формирует никакого массива, запрос обычно отправляют на сервер базы данных и в ответ получают Так называемый RecordSet
 

usascha

Новичок
Автор оригинала: Фанат
В случае ошибок сообщения надо не подавлять. а читать и исправлять.
Эта строка кода работает как и ожидается. Удаление собаки ничего не меняет.

Demiurg
ну да, $article я и имел ввиду. Ведь на основе ответа на запрос и формируется массив. Смысл понятен. В этом ошибка?
 

Demiurg

Guest
в $article у тебя массив мз одной записи, причем ты крутишь массив по всем записям, и естественно, что в $article остается массив от последний итерации, то есть последняя запись.
 

usascha

Новичок
Автор оригинала: Demiurg
в $article у тебя массив мз одной записи...
вот этого я не понял. Если убрать все мои "замечательные циклы", то на страницу будут выведены ВСЕ 180 записей из базы именно этим массивом.

Можно это пояснить подробнее.
Спасибо.
 
Сверху