|
Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » постраничный вывод |
|
постраничный вывод
|
Пользователь Сообщения: 67 |
Профиль | Отправить PM | Цитировать PHP + SQL
Хотелось бы чтобы на страницу из базы выводилось по 50 позиций, на следующую еще 50 и т.д. |
|
Отправлено: 10:52, 16-01-2004 |
Новый участник Сообщения: 28
|
Профиль | Сайт | Отправить PM | Цитировать А в чем собственно проблема ... пишем
<? $countres = mysql_query("SELECT COUNT(*) as `count` FROM `".$tbl_name."` WHERE 1"); $count = mysql_result($countres,"count"); $limit = 50; /* кол-во записей*/ $nowpage = $_GET[p]; /* текущая страница */ if ($count > $limit) { * *$start = ($nowpage * $limit) - $limit; * *$minus = ($count % $limit); * *if ($minus == 0) { * * *$countpage = ($count / $limit); * *} else { * * *$countpage = (($count - $minus) / $limit) + 1; * *} *} else { * *$countpage = 1; * *$start = 0; *} //запрос к БД с лимитом записей mysql_query("SELECT COUNT(*) as `count` FROM `".$tbl_name."` WHERE 1 LIMIT ".$start.",",$limit); ?> |
------- Отправлено: 11:27, 16-01-2004 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Engrossed by the Void Сообщения: 2229
|
Профиль | Отправить PM | Цитировать Кроме вышеприведенного кода постарничный вывод очень популярен у скриптописателей и скриптов реализующих эту феньку довольно много в Сети, поиск вам поможет.
|
------- Отправлено: 12:57, 16-01-2004 | #3 |
Ветеран Сообщения: 1864
|
Профиль | Отправить PM | Цитировать а я когда себе постраничный вывод делал, решил малость поизвращаться и, чтобы определить сколько у меня будет страниц, использовал функцию bcdiv с параметром 0, то есть
$a=bcdiv($n,$m,0); функция деления двух чисел, а третий переметр, сколько знаков после запятой $n-записей в базе, $m-сколько записей выводить на страницу а если $a будет с остатком, то количество страниц равно $a+1 Конечно не проще, зато интересней А вообще математические функции бывают очень полезны, хотя многие уделяют им не достаточно внимания |
------- Отправлено: 15:30, 16-01-2004 | #4 |
Engrossed by the Void Сообщения: 2229
|
Профиль | Отправить PM | Цитировать Можно так еще... реализовать класс меню -
<? define('PART1_LENGTH', 10); define('PART2_LENGTH', 3); define('PART3_LENGTH', 2); define('FULL_LENGTH', 37); class Navigation { var $ParamName; /* имя параметра строки адреса с инфой о меню*/ var $FileName; /* куда, собственно, меню будет строить ссылки*/ var $Delimiter; /* символ-разделитель пунктов*/ var $DelimiterClass; /* имя стиля для символа-разделителя*/ var $CurPage; /* номер активной паги */ var $Total; /* общее число элементов */ var $AClass; /* имя стиля для ссылки*/ var $NAClass; /* имя стиля не для ссылки*/ var $ColPerStr; /* количество столбцов на строку при выводе номеров страниц*/ function Info() { echo "<br>Class info:<br> CurPage: ".$this->CurPage."<br> Total: ".$this->Total."<br> ParamName: ".$this->ParamName."<br> FileName: ".$this->FileName."<br> Delimiter: ".$this->Delimiter."<br> AClass: ".$this->AClass."<br> NAClass: ".$this->NAClass."<br> DelimiterClass: ".$this->DelimiterClass."<br>"; } function Init() { if (isset($_GET[$this->ParamName])) { $Str = substr($_GET[$this->ParamName], PART1_LENGTH); } else { $Str=''; } if (!trim($Str)) { $this->CurPage = $this->Total = 0; return false; } @list($CurPage, $Total) = preg_split('/[^0-9]/si', $Str, 3, PREG_SPLIT_NO_EMPTY); $this->CurPage = abs(intval($CurPage)); $this->Total = abs(intval($Total)); if ($this->Total<$this->CurPage) $this->CurPage=$this->Total; } function MakeSecureParam($CurIndex, $Total) { srand(time()); $Part1 = substr(md5(uniqid(mt_rand())), 0, PART1_LENGTH); srand(time()); $T_Str = eregi_replace('[0-9]', '', md5(uniqid(mt_rand()))); $Part2 = substr($T_Str, 0, PART2_LENGTH); srand(time()); $T_Str = eregi_replace('[0-9]', '', md5(uniqid(mt_rand()))); $Part3 = substr($T_Str, 0, PART3_LENGTH); srand(time()); return str_pad($Part1.$CurIndex.$Part2.$Total.$Part3, FULL_LENGTH, md5(uniqid(mt_rand())), STR_PAD_RIGHT ); } function ShowMenu() { if (strpos($this->FileName, "?")===false) $ParamDelimiter='?'; else $ParamDelimiter='&'; echo '<table cellpadding=3 cellspacing=0 border=0><tr>'; $ColCnt = 0; for ($I=1;$I<=$this->Total;$I++) { if ($ColCnt<=$this->ColPerStr) { echo '<td>'; $ColCnt++; } else { echo '</tr><tr><td>'; $ColCnt = 0; } if ($I==$this->CurPage) { if (Trim($this->NAClass)) echo "<span class=\"".Trim($this->NAClass)."\">".$I."</span>\n"; else echo $I; if ($I<$this->Total) echo $this->Delimiter; } else { if (Trim($this->AClass)) echo "<a class=\"".Trim($this->AClass)."\" href=\"".$this->FileName.$ParamDelimiter.$this->ParamName."=".$this->MakeSecureParam($I,$this->Total)."\">".$I."</a>\n"; else echo "<a href=\"".$this->FileName."?".$this->ParamName."=".$this->MakeSecureParam($I,$this->Total)."\">".$I."</a>\n"; if ($I<$this->Total) echo $this->Delimiter; } echo '</td>'; } echo '</tr><tr><td align=center colspan='.$this->ColPerStr.'>'; if ($this->CurPage>1) echo "<a class=\"".$this->AClass."\" href=\"".$this->FileName.$ParamDelimiter.$this->ParamName."=".$this->MakeSecureParam(($this->CurPage-1),$this->Total)."\">назад</a>".$this->Delimiter; else echo " <span class=\"".$this->NAClass."\">назад</span>".$this->Delimiter; if ($this->CurPage<$this->Total) echo " <a class=\"".$this->AClass."\" href=\"".$this->FileName.$ParamDelimiter.$this->ParamName."=".$this->MakeSecureParam(($this->CurPage+1),$this->Total)."\">вперед</a>"; else echo " <span class=\"".$this->NAClass."\">вперед</span>"; echo '</td></tr>'; echo '<tr><td align=center colspan='.$this->ColPerStr.'>'; echo " <a class=\"".$this->AClass."\" href=\"".$this->FileName.$ParamDelimiter.'full=1'."\">все страницы</a>"; echo '</td></tr></table>'; } function Navigation($ParamName, $FileName, $Delimiter, $AClass, $NAClass, $DelimiterClass, $ColPerStr) { $this->CurPage = $this->Total = 0; $this->ParamName = $ParamName; $this->FileName = $FileName; $this->Delimiter = $Delimiter; $this->AClass = $AClass; $this->NAClass = $NAClass; $this->DelimiterClass = $DelimiterClass; $this->ColPerStr = $ColPerStr; } } ?> $Result = mysql_query ('какой-то запрос'); $StringsNum = mysql_num_rows($Result) //инициализация страничной системы $NavMenu = new Navigation('nav', 'index.php', ' ', 'navmenu', 'navmenu', '', 15); // nav - имя параметра где от скрипта к скрипту будет хранится информация о текущей странице и их полного числа // index.php - скрипт который будет участвовать в ссылках страниц // 15 - число страниц в строке, остальные переносятся на новую $NavMenu->Init(); if ($NavMenu->CurPage==0 && $NavMenu->Total==0) { $NavMenu->CurPage=1; // StringsPerPage - константа с числом записей на странице (= лимиту выборки) $NavMenu->Total=$NewsNum / StringsPerPage; if ($StringsNum % StringsPerPage!=0) $NavMenu->Total+=1; } $Page = $NavMenu->CurPage; while ($Row = mysql_fetch_array($Result, MYSQL_NUM)) { $Data[]=$Row; } // собственно вывод foreach (Range (($Page-1)*StringsPerPage, $Page*StringsPerPage-1) as $I) { if (isset($Data[$I])) { вывод в каком угодно виде } } //проверка надобности рисования менюшки страничной системы и отрисовка в каком надо виде if ($StringsNum>StringsPerPage) { echo "<br><center>"; $NavMenu->ShowMenu(); echo "</center>"; } [s]Исправлено: Prisoner, 2:20 17-01-2004[/s] |
|
------- Отправлено: 22:46, 16-01-2004 | #5 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Постраничный вывод PHP + MySQL (готовое решение) | darksmoke | Вебмастеру | 6 | 19-05-2011 20:43 | |
[решено] Алгоритм. Постраничный вывод. SQL. | Scorpion666 | Вебмастеру | 5 | 26-06-2007 07:14 | |
Вывод на печать???? | Novistok | Microsoft Windows NT/2000/2003 | 4 | 08-11-2005 10:52 | |
Вывод на телевизор | dascon | Программное обеспечение Windows | 15 | 04-09-2004 06:55 | |
Как сделать постраничный вывод? | FADE | Вебмастеру | 7 | 20-07-2004 18:37 |
|