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

_RVK_

Новичок
usascha
Почему ты не хочешь сделать по человечески? За то время, что ты дебагишь свой кривой код, ты бы давно разобрался и сделал все нормально, с LIMIT.
 

Demiurg

Guest
Тяжело учить основам программирования.
сделай внутри цикла var_dump($article);
и после цикла тоже самое сделай, и подумай почему так получается.
 

usascha

Новичок
Diesel
...ты бы давно разобрался и сделал все нормально, с LIMIT.
С этой конструкцией я разобрался, благо там все по порядку написано. Во-первых? хочу понять этот вариант, во-вторых, в варианте с LIMIT мне не понравился вариант вывода записей. В моем случае нет индекса и записи могут иметь пропуск в нумерации. Как все это учесть в LIMIT варианте я не разбирался. То на то и выйдет.

Demiurg
Думаю, что действительно тяжело. Но я не программист. Программирование, при этом только для моего сайта - мое хобби. Учиться приходиться на ходу. Что понимаю - то делаю, что не понимаю стараюсь найти в книгах. Обращение на сайт к тем, кто этому был терпеливо обучен в вузе - последняя попытка понять ошибку.

var_dump($article) выдает "array(1) { [1]=> array(0) { } } "
и внутри цикла и вне его.

Если удалить все циклы, то выдается уникальная строка для каждой записи вида
array(30) { [0]=> string(2) "11" ["ID"]=> string(2) "11" [1]=> string(72)

Могу только предположить, что это значит: каким-то образом надо назначить каждому значению, выбираемому в $article через функцию each соответствующее значение равное $n.
Тогда $n записи в количестве меньше $limite=10 будет выводиться на страницу.
Правильно?
 

Фанат

oncle terrible
Команда форума
1. у записей нет никакой нумерации. то есть вообще.
2. LIMIT к тому, что ты называешь нумерацией не имеет ни малейшего отношения.
3. Какой смысл спрашивать тех, кто был терпеливо обучен, если ты не желаешь делать так, как тебе терпеливо обученные талдычат уже неделю?
С какой стати ты решил, что не будет работать то, что тебе говорят терпеливо обученные?

-~{}~ 30.08.04 19:25:

если же идти твоим путем, то
Могу только предположить, что это значит: каким-то образом надо назначить каждому значению, выбираемому в $article через функцию each соответствующее значение равное $n.
Тогда $n записи в количестве меньше $limite=10 будет выводиться на страницу.
Правильно?
неправильно.
each в этом коде вообще не нужен.

Если тебе так уж горит работать с массивами, то почитал бы ты сначала про них, а?
http://www.php.net/manual/ru/language.types.array.php
потренировался на примерах.
а потом уже в скрипт вставлял.
а то у тебя получается в темной комнате с завязанными глазами - и массивов не знаешь, и клгоритм себе слабо представляешь
 

usascha

Новичок
Речь не о том, будет или не будет работать, а о том сколько времени надо на это потратить.
В варианте с LIMIT у меня не возникло вопросов. Просто хочется разобраться с этим вариантом.


Ссылку я прочитал. Она - существенно расширенный вариант того, что я прочитал в книге. Буду пытаться осмыслить и применить.
 

Фанат

oncle terrible
Команда форума
варианте с LIMIT у меня не возникло вопросов
Позволь тебе заметить, что ты заблуждаешься. Или - скорее - пытаешься ввести в заблуждение меня.
ты только что писал про проблемы, с этим вариантом у тебя возникшие.
Если "в варианте с LIMIT тебе не понравился вариант вывода записей", то ты в нем не понял НИ-ЧЕ-ГО.

Впрочем, это не снимает с тебя обязанности прочитать ссылку, которую я тебе дал.
 

cray

Guest
Originally posted by usascha
Речь не о том, будет или не будет работать, а о том сколько времени надо на это потратить.
В варианте с LIMIT у меня не возникло вопросов. Просто хочется разобраться с этим вариантом.
А есть ли смысл с ним разбираться? Ты говоришь, что у тебя 180 записей в базе?? а будет еще больше... :)

SELECT * FROM articles ORDER BY ID ASC, adate ASC
выбирает все эти записи, а в ПХП потом они все обрабатываются???

В варианте с LIMIT ты выбираешь столько, сколько тебе надо на одну страницу (например штук 10) - таким макаром в ПХП тебе надо обработать уже в 18 раз меньше...

улавливаешь разницу??? можешь чисто позасекать время генерации.. С LIMIT'ом там будет намного быстрее. Могу подогнать кусок кода...
 

usascha

Новичок
Автор оригинала: cray
А есть ли смысл с ним разбираться? Ты говоришь, что у тебя 180 записей в базе?? а будет еще больше... :)
Это в этой базе столько, а в другой - больше.

Могу подогнать кусок кода...
За это большое спасибо.
 

Фанат

oncle terrible
Команда форума
ХАХАХАХАХА
вот так бы и давно!
А то - "разобраться хочу"
 

cray

Guest
Originally posted by usascha
Это в этой базе столько, а в другой - больше.


За это большое спасибо.
Почитай сначала тут http://phpfaq.ru/paginator

PHP:
<?php

//
// Эта функция дописывает к чему-то что-то (в адресе)
// (упрощенный вариант)
//
function append_var($to, $what)
{
	return $to."?".$what;
}

//
// Функция вывода номеров страниц - the heart of script
//
// $base_url - адрес, к которому надо цеплять start=
// $num_items - общее количество элементов
// $per_page - количество элементов на странице
// $start_item - вот тот старт, который приходит от пользователя
// $add_prevnext_text - добавлять ли ссылки "назад" и "вперед"
//
function generate_pagination($base_url, $num_items, $per_page, $start_item, $add_prevnext_text = true)
{
	// Считаем, сколько всего будет страниц
	$total_pages = ceil($num_items / $per_page);
	$prev_string = "";
	$next_string = "";

	// Если одна, то нет смысла выводить номера :)
	if ($total_pages == 1)
	{
		return "";
	}

	// Найдем номер текущей страницы для украшательств
	// например, можно отменить ссылку для этой страницы
	$curr_page = floor($start_item / $per_page);
	$page_string = "";

		// Проходимся циклом по всем страницам
		// и формируем строку из ссылок
		// ... если на итерации у нас попалась текущая страница, то сделаем так,
		// чтобы она не была ссылкой (не кликалась)
		for ($i = 0; $i < $total_pages; $i++)
		{
			if ($i != $curr_page) $page_string .= "<a href=\"".append_var($base_url, "start=".($i * $per_page))."\">".($i + 1)."</a> \n";
			else $page_string .= "<a>".($curr_page + 1)."</a> \n";
		}

	// Если надо, добавим ссылки "назад" и "вперед"
	if ($add_prevnext_text)
	{
		if ($curr_page > 0) $prev_string = "<a href=\"".append_var($base_url, "start=".($curr_page * $per_page - $per_page))."\">&lt;&lt;</a> \n";
		if ($curr_page < $total_pages - 1) $next_string = "<a href=\"".append_var($base_url, "start=".($curr_page * $per_page + $per_page))."\">&gt;&gt;</a>\n";
	}

	// И все это возвращаем
	return "<div>\n".$prev_string.$page_string.$next_string."</div>\n";
}

// Установки для коннекта к базе
$host="localhost";
$login="root";
$pass="pass";
$dbname="db";

// Количество элементов на странице
$items_per_page = 10;

// Собсно коннект к оной
mysql_connect($host, $login, $pass) or die("Problem Database Connection");
mysql_select_db($dbname);

// Считаем, сколько всего записей в таблице
$query = "SELECT count(*) FROM table"; // Если кто знает способы посчитать записи, напишите, плиз
$res = mysql_query($query);
$total_items_count = mysql_fetch_row($res);

// Если мы открыли страничку первый раз, т.е. не кликали на ссылки...
// значит $_GET['start'] не установлен, надо исправить, и записать в него 0 (тоесть браузим сначала)
if (!isset($_GET['start'])) $_GET['start'] = 0;

// Запрос для выбора элементов
$query = "SELECT * FROM table WHERE 1 ORDER BY field LIMIT ".$_GET['start'].", ".$items_per_page;
$res = mysql_query($query);

	while ($item = mysql_fetch_row($res))
	{
		// Вывод твоих данных
		echo $item[3]."<br />\n";
	}

	// Вывод номеров страниц
	echo generate_pagination($_SERVER['PHP_SELF'], $total_items_count[0], $items_per_page, $_GET['start'], true);

?>
 

Фанат

oncle terrible
Команда форума
cray
ты уверен в его качестве?
а то ж ведь, разнесу! ;-)

-~{}~ 30.08.04 23:56:

Давай, все-таки, остановимся не на наспех написанном коде, а на специаьлно написанном объяснении?

http://phpfaq.ru/paginator
 

cray

Guest
2Фанат:
тода я его сейчас проверю... и чуть комментов добавлю...
практически это тоже самое, что и ты показал
 

Фанат

oncle terrible
Команда форума
Ну, сложно предположить ,что в такой простой задаче можно придумать что-то особенное :)
 

Фанат

oncle terrible
Команда форума
Это да.
хотя я с трудом представляю себе человека, который не может вывести эти ссылки самостоятельно :)
 

usascha

Новичок
есть такие и всякие другие. Я например, вряд ли без подсказок управлюсь.
Ссылку на paginator я уже давно читал. Теперь попробую понять вновь присланный cray код.

Еще раз спасибо.
 

usascha

Новичок
http://phpclub.ru/talk/showthread.php?s=&threadid=51566&highlight=FOUNDROWS

на этом или на другом сайте я видел аналогичный код. Мне особенно запомнилась в комментарии фраза:
"Либо, если версия mysql больше 4.0, то общее количество строк можно запросить в том же запросе. см. документацию mysql по функции FOUND_ROWS()
Однако, первый сособ представляется более удобным, хотя и немного более медленным."

Какие у меня способности ты можешь видеть только в отношении PHP програмирования. Если бы они были лучше я бы здесь не торчал. Чтобы получить ответ на вопрос надо выслушать массу снобистских наездов и тыканий мордой об стол в ошибки, которые и просишь помочь исправить.

Cray, спасибо за код.
 

cray

Guest
Originally posted by usascha
Чтобы получить ответ на вопрос надо выслушать массу снобистских наездов и тыканий мордой об стол в ошибки, которые и просишь помочь исправить.
И ты их достойно выслушал :)
С кодом хоть разобрался??
 
Сверху