powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) Как из БД данные выводить постранично?
15 сообщений из 15, страница 1 из 1
(PHP) Как из БД данные выводить постранично?
    #33733184
Фотография Sherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет Всем!
Ребята Может Кто делал Грамотную Пагинацию Вывода результата из базы?
ТАк что Бы Если записей 5000, выводило к примеру сначало 5 страциц потом ссылка на еще 5 и так далее... к примеру как а Yandex?
P.s. Все Факи Я читал.
...
Рейтинг: 0 / 0
(PHP) Как из БД данные выводить постранично?
    #33733191
Фотография Damnedest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И в чем у вас проблема возникла? Что трудного в цикле for и нескольких if?
...
Рейтинг: 0 / 0
(PHP) Как из БД данные выводить постранично?
    #33733432
Фотография Sherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DamnedestИ в чем у вас проблема возникла? Что трудного в цикле for и нескольких if?
Вот В это то и проблема., Если не трудно подскажите канструкцию Плиз
...
Рейтинг: 0 / 0
(PHP) Как из БД данные выводить постранично?
    #33733505
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну покажите, что вы делаете, и с какого момента возникает проблема.
...
Рейтинг: 0 / 0
(PHP) Как из БД данные выводить постранично?
    #33733538
Фотография Sherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DocAlНу покажите, что вы делаете, и с какого момента возникает проблема.
Проблем как таковых нет.
Я По стандартному факу Выводу к примеру по 10 строк на странице и разбиваю рез, А как сделать так что бы если записей 50000 и выводиль не 500 страниц а к примеру только по 5....

if (isset($_GET['page'])) $page=($_GET['page']-1); else $page=0;
// вычисляем первый оператор для LIMIT
$start=abs($page*$per_page);


Запрос

SELECT users.id, users.first_name as first_name, users.last_name, cities.name as city_name, countries.name as country_name
FROM users
LEFT JOIN cities ON ( users.city_id = cities.id )
LEFT JOIN countries ON (cities.country_id = countries.id) ORDER BY users.first_name LIMIT $start , $per_page ") or die ("Не могу сделать запрос выбор из базы всех пользователей");

Ну и
сам выывод
$res=mysql_query($sql);
//$row=mysql_fetch_row($res);

$total_rows=mysql_num_rows($res);

$num_pages=ceil($total_rows/$per_page);

if ($page==0) { /* если текущаяя страница первая - нам не надо выводить "previos page" */
// ничего не делаем
}
else {
echo "<a href='javascript:history.back()'><b class=lnk><<< Previos Page</b></a>   ";
}

for($i=1;$i<=$num_pages;$i++) {
if ($i-1 == $page) {
echo $i." ";
// уточняем следующую страницу
$next_page=$i+1;

} else {
echo "<a href=".$_SERVER['PHP_SELF']."?page=$i&per_page=$per_page><b class=style>|$i|</b></a> ";
}

}
...
Рейтинг: 0 / 0
(PHP) Как из БД данные выводить постранично?
    #33733623
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так и добавить соответствующую проверку?
...
Рейтинг: 0 / 0
(PHP) Как из БД данные выводить постранично?
    #33733660
Фотография Sherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята Я про проверку знаю.
Я про конструкцию прошу уточнить.
Несколько циклоа с if -ами да и все.
Просто Я Уже несколько суток не спал, развязывал задачки похожие, а вот на это уже соображалки не хватает...
...
Рейтинг: 0 / 0
(PHP) Как из БД данные выводить постранично?
    #33733674
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sherbakov
Код: plaintext
1.
2.
3.
4.
5.
if ($page== 0 ) {  /* если текущаяя страница первая - нам не надо выводить "previos page" */
// ничего не делаем 
}
   else {
   echo  "<a href='javascript:history.back()'><b class=lnk><<< Previos Page</b></a>   ";
   }

Фига се. Я академиев не кончал, но что-то мне подсказывает, что если я попал на страницу не с предыдущей (а, например, из поисковика), то я не обрадуюсь такой ссылке.
...
Рейтинг: 0 / 0
(PHP) Как из БД данные выводить постранично?
    #33733718
Фотография Sherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята, Убедительная просьба кто себе посты набивает пускай найдет Другую Тему.
Это предидущаяя страница вычисляется легко, Я дал простенький пример.
...
Рейтинг: 0 / 0
(PHP) Как из БД данные выводить постранично?
    #33733747
Фотография 4m@t!c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем тогда давать примеры, если они не рабочие?????
Если вы хотели узнать за сам механизм, то так бы и задавали вопрос.
Если у вас проблема с каким-то конкретным местом в скрипте - запостите логически законченный участок кода и опишите, что должен выдавать скрипт и что выдает. Если топ в таком же русле продолжится - я просто его закрою, что бы сэкономить время людям, а вам дать возможность пойти и хорошо выспаться.
Повторюсь - не будет конструктива - закрою топик.

P.S. удосужтесь прочитать правила форума.
P.P.S/ Зеленый текст и форматированый текст - это разные вещи.
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
(PHP) Как из БД данные выводить постранично?
    #33733789
Фотография Sherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята код работает, и разбивает результат на страницы.
но мне надо вот так:
1 2 3 4 5 6 7 8 ... <-Вот так .
...
Рейтинг: 0 / 0
(PHP) Как из БД данные выводить постранично?
    #33736020
Фотография Sherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
  
   
   if ($cur_page> 11 ) {  /* если текущаяя больше 10 - нам не надо выводить "previos page" */
				// ничего не делаем 
		
		
   			$last_pages=$page- 10 ; // .показатель прошлых страниц шаг в  10 
   		
			$prevs="<b class='lnk'>   <a href='index.php?page=$last_pages&per_page=$per_page&sort_name=$sort_name&sort_country=$sort_country&sort_city=$sort_city'><b class='lnk'>...</b></a>";
   			$smarty->append('prevs',$prevs); 
   
		   }

/***********************************************
//
// если  пользователь двигался по базе нормально то все окей, если он захотел перместится на 10 щаписей вперед 
//
//******************************************************
*******************************************************/



if (!isset($next_ten) or($next_ten== 0 ) or ($page< 10 )) {
$start_from= 1 ; // откуда начинать движение по базе, если если человек нажал ссылку больше  10 
} else {
$start_from=$next_ten;
}


//		for($i= 1 ;$i<=$num_pages;$i++) {
	//for($i=$start_from;$i<=($start_from+ 9 );$i++) {
//	$var_for_next5= 0 ;
//    while ($var_for_next5 != 4 ) {
    	
for($i=$start_from; $i<=$num_pages; $i++) {
  						if ($i- 1  == $page) {
  							//$a=$i."  ";
  							$a=$cur_page;
    						//echo $a."	 ";
    						$smarty->append('a',$a); 
    						
    						// уточняем следующую страницу
    						
  									} else {
  	  								$next_page=$i+ 1 ;
    								$smarty->append('next_page',$next_page); 
  									$smarty->assign('i',$i);   	 
  								}

  								
  					}
  					
//  					$var_for_next5++;
//    						}
  					
  					
//  	$next_pages="<b class='lnk'>   <a href='index.php?page=$next_page&per_page=$per_page&sort_name=$sort_name&sort_country=$sort_country&sort_city=$sort_city'><b class='lnk'>...</b></a>";		
//    $smarty->assign('next_pages',$next_pages);

mysql_close($db);


// дополнетиельное условие елси страница только одна  - выводить -> next page не надо
if ($num_pages> 1 ){
	$next_for_sm="<b class='lnk'>   <a href='index.php?page=$next_page&per_page=$per_page&sort_name=$sort_name&sort_country=$sort_country&sort_city=$sort_city'><b class=lnk>Next Page >>></b></a>";	
	$smarty->assign('next_for_sm', $next_for_sm);
			
			} elseif ($page==$num_pages) {
					$smarty->assign('next_for_sm', "");
			}


...
Рейтинг: 0 / 0
(PHP) Как из БД данные выводить постранично?
    #33736039
Фотография Sherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выше код - результат Моих ночных мерских утех...
Получается ТАк
Код выводит 1 2 3 4 5 6 ...
Когда нажимаешь на ...
Надо что бы получалось 7 8 9 10 11 ...
А получается
12345678910 11 ...
Расталкуйте Ребята....
P.s. Чуть не забыл, все это дело передается в Smarty.
P.p.s. Smarty Paginate не рулит.
...
Рейтинг: 0 / 0
(PHP) Как из БД данные выводить постранично?
    #33736754
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задаём переменную
Код: plaintext
$max_pages =  9 ;
Лучше нечётное число, иначе некрасиво. Можно задать "средний размер максимального отклонения", там не будет искусственных ограничений на число, но поди объясни ещё, что это такое.)
Далее
Код: plaintext
1.
2.
$first_page = max( 1 , $curr_page - floor($max_pages/ 2 ));
$last_page = min($num_pages, $first_page + $max_pages);
И цикл ведём от $first_page до $last_page.
...
Рейтинг: 0 / 0
(PHP) Как из БД данные выводить постранично?
    #33736803
Фотография Sherbakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DocAlЗадаём переменную
Код: plaintext
$max_pages =  9 ;
Лучше нечётное число, иначе некрасиво. Можно задать "средний размер максимального отклонения", там не будет искусственных ограничений на число, но поди объясни ещё, что это такое.)
Далее
Код: plaintext
1.
2.
$first_page = max( 1 , $curr_page - floor($max_pages/ 2 ));
$last_page = min($num_pages, $first_page + $max_pages);
И цикл ведём от $first_page до $last_page.
Супер Спасибо! Хвалю! DocAl
Пользователю DocAl Объявляю Благодарность!
Я сделал немного по другому. ПоюзалЪ :)

Количество выводимвх я поставил 5,
Код: plaintext
1.
2.
3.
4.
5.
6.
 if (($start_from+ 5 ) <$num_pages) { // если количество страниц + шаг не больше количества страниц всего, тогда нормуль.
	$where_to_step =$start_from+ 5 ; // сколько раз можно прибавить по  5  для шага в рез
				  					} else { // если нет то то вывод страниц надо ограничить что бы они не множились бесполезно.
				  						//} else if (($start_from+ 5 )>$num_pages)  {
				  						$where_to_step=$num_pages;
				  										}
DocAl Еще раз спасибо.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) Как из БД данные выводить постранично?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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