powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разбивка на страницы с PHP. Sorry for Offtopic
8 сообщений из 8, страница 1 из 1
Разбивка на страницы с PHP. Sorry for Offtopic
    #33297204
NECTIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, выручайте.

Есть необходимость вывести выборку из базы на вэб страницу с помощью PHP.
Запрос работает, но получется до нескольких тысяч строк. С помощью OFFSET и LIMIT могу вытащить "нужную" часть.
Но как на РНР написать на страничке "страница 1 из 10" и поставить ссылку на следующую, не дотягиваю.
Если кто делал такое сам, помогите плиз - очень надо!
Пытался нарыть в РНР-шных форумах, ничего не нахожу. Может кто ссылку знает где это описано?

Извиняюсь за оффтопик
и Спасибо за помощь!
...
Рейтинг: 0 / 0
Разбивка на страницы с PHP. Sorry for Offtopic
    #33297241
darkio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ставишь переменную страница
$page;
если она не передана через $_GET['page'] то приравниваешь ее к 0
далее у тебя офсет будет равен "колличеству строк запроса" умноженному на $_GET['page']
...
Рейтинг: 0 / 0
Разбивка на страницы с PHP. Sorry for Offtopic
    #33297260
NECTIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
darkioставишь переменную страница
$page;
если она не передана через $_GET['page'] то приравниваешь ее к 0
далее у тебя офсет будет равен "колличеству строк запроса" умноженному на $_GET['page']
А можно пример кода?
Я только ещё учусь и могу что-то упустить по незнанию...
...
Рейтинг: 0 / 0
Разбивка на страницы с PHP. Sorry for Offtopic
    #33297292
Uncle_Joe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Качаешь, например NEOgeN Labs GuestBook, там в gbook.php есть довольно ясный код, иллюстрирующий этот принцип. Правда, там синтаксис сиквела для MySQL (для LIMIT), но оно и так понятно :))

Впрочем, привожу кусок сабжевого кода оттуда:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
		# Считаем сколько страниц
		global $PerPage; // глобальная переменная в которой хранится кол-во сообщений на странице
		if(!isset($Page)) $Page =  1 ;

		$Query = ("SELECT id FROM $TableName");
		$Result = mysql_db_query ($DBName, $Query, $Link);
		$TotalMsg = mysql_num_rows($Result);
		unset($Result );

                 // а вот тут все считается :)
		if ($TotalMsg <= $PerPage) $TotalPages =  1 ;
		elseif ($TotalMsg % $PerPage ==  0 ) $TotalPages = $TotalMsg / $PerPage;
		else $TotalPages = ceil ($TotalMsg / $PerPage);
		if($TotalMsg ==  0 ) $MsgStart =  0 ;
		else $MsgStart = $PerPage * $Page - $PerPage +  1 ;
		if ($Page == $TotalPages) $msgEnd = $TotalMsg;
		else $msgEnd = $PerPage * $Page;
		$InitialMsg = $PerPage * $Page - $PerPage;

		#Показываем данные
		$Query = ("SELECT * FROM $TableName ORDER BY id DESC LIMIT $InitialMsg, $PerPage");
		$Result = mysql_db_query ($DBName, $Query, $Link);
		 	while ($Row = mysql_fetch_array ($Result)) {
				# Шаблон вывода сообщений
				include ("messages.php");
			}
		# Шаблон количества страниц и сообщений
		include ("pages.php");

...
Рейтинг: 0 / 0
Разбивка на страницы с PHP. Sorry for Offtopic
    #33299613
NECTIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Более менее понятно. Но тут есть момент.
База может пополняться каждую секунду, может даже чеще или реже.
Но часто.
Если я начинаю листать страницы, то индех высчитывается каждый раз по новой.
И если я перехожу на следующую страницу, может получиться что следующая, по логике запись в новой странице не окажется.
Как тут быть? есть возможность это зафиксировать?
Выборка делается по типу SELECT * FROM table WHERE xxx DESC (чтобы всегда видеть последнюю запись).

Можно конечно листать с первой записи, но если там 100 страниц? а сначала хочется видеть свеженькое... :-)
...
Рейтинг: 0 / 0
Разбивка на страницы с PHP. Sorry for Offtopic
    #33757101
flit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть такой вариант:

<?
//номер страницы

if (!isset($npage))
{
$npage = 1;
}

//количество строк на одной странице
$spage = 7;

@$db = mysql_connect("host","name","pas");
mysql_select_db("base",$db);
$query = "select * from $tabla";
$result = mysql_query($query);
$total = mysql_num_rows ($result);

for ( $i = $total - ($npage -1)*$spage - 1 ; ($i > $total - $npage*$spage -1) and ($i >= 0) ; $i --)
{
mysql_data_seek ( $result , $i );
$array_exp = mysql_fetch_array($result);

// вывод полей...
}

// таблица нумерации страниц

echo '<tr> <td align=center> Страницы:';
$kpage = ceil($total/$spage);
for ($k = 1 ; $k <= $kpage ; $k++)
{
echo '<a href="start.php3?npage='.$k.'">'.$k.'</a>';
}

//вроде все работает шоколадно (хотя я 3-тий день с пхп)
...
Рейтинг: 0 / 0
Разбивка на страницы с PHP. Sorry for Offtopic
    #34060534
Jelis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Uncle_Joe
Код: plaintext
1.
2.
3.
4.
		$Query = ("SELECT id FROM $TableName");
		$Result = mysql_db_query ($DBName, $Query, $Link);
		$TotalMsg = mysql_num_rows($Result);
		unset($Result );


Как то странно вы количество записей считаете! Не лучше ли просто SELECT count(*) AS count FROM Table; ?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Разбивка на страницы с PHP. Sorry for Offtopic
    #35425078
mySQLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот гляньте сюда Постраничный вывод PHP
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разбивка на страницы с PHP. Sorry for Offtopic
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]