>백엔드 개발 >PHP 튜토리얼 >PHP 페이징 원리 및 PHP 페이징 코드 종합 예제

PHP 페이징 원리 및 PHP 페이징 코드 종합 예제

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB원래의
2016-07-25 08:52:452439검색
  1. /**
  2. * PHP 페이지 매김 코드
  3. **/
  4. /**
  5. * 데이터베이스 연결
  6. * bbs.it-home.org
  7. * @param string $strHost 데이터베이스 서버 호스트 주소
  8. * @param string $strAccount 데이터베이스 계정
  9. * @param string $strPassword 데이터베이스 비밀번호
  10. * @return 리소스
  11. **/
  12. 함수 mysqlConnect($strHost, $strAccount,$strPassword,$strDBname)
  13. {
  14. $strHost=trim($strHost);
  15. $strAcount=trim($strAccount);
  16. $strPassword=trim($strPassword);
  17. $resLink=mysql_connect($strHost,$strAccount,$strPassword);
  18. if(!$resLink)
  19. {
  20. return false;
  21. }
  22. else
  23. { // 이름 설정... 데이터베이스 인코딩에 따라 설정
  24. mysql_query('set names utf8',$resLink);
  25. $isValidate=mysql_select_db($strDBname,$resLink);
  26. if($isValidate )
  27. {
  28. return $resLink;
  29. }
  30. else
  31. {
  32. return false;
  33. }
  34. }
  35. }
  36. /**
  37. *페이징의 현재 페이지 번호를 승인하고 해당 매개변수 값을 계산합니다.
  38. *포함: 시작 페이지 번호 $arrParameter['start']
  39. * 끝 페이지 번호 $arrParameter['end']
  40. * 총 레코드 수 $arrParameter['all']
  41. * 각 페이지에 표시되는 레코드 수 $arrParameter['nums']
  42. * 페이지에 표시되는 링크 수 $arrParameter['links']
  43. * 쿼리할 sql 문 $arrParameter['sql']
  44. * 페이징 막대 유형 $arrParameter['tag']
  45. *
  46. int $intPage 현재 페이지 번호 값
  47. int $intNums 개수 각 페이지에 표시되는 레코드
  48. int $intLinks 페이지에 표시되는 링크 수
  49. string $strTablename 페이지에 데이터 테이블 표시
  50. resource $resLink 데이터 연결 핸들
  51. 배열
  52. ** /
  53. 함수 계산 매개변수($intPage,$intNums,$intLinks,$strTablename,$resLink){
  54. $intPage=(int)$intPage;
  55. $intNums=(int)$intNums;
  56. $intLinks=(int)$intLinks;
  57. //표시되는 링크의 개수가 홀수가 아닌 경우 홀수로 조정
  58. if($intLinks % 2 == 0){
  59. $intLinks--;
  60. }
  61. //각 페이지에 표시되는 레코드 개수가 0보다 크지 않으면 10으로 조정
  62. if($intNums $intNums =10;
  63. }
  64. //총 페이지 수 계산
  65. $strSql1="`{$strTablename}`에서 num으로 count(*) 선택";
  66. $resObj1=mysql_query($ strSql1,$resLink);
  67. $arrObj1=mysql_fetch_assoc($ resObj1);
  68. $intAllRecords=$arrObj1['num'];
  69. $intAllPage=ceil($intAllRecords/$intNums);
  70. //SQL 문 제한 키워드의 첫 번째 매개변수
  71. $intOffset=($intPage-1)*$intNums;
  72. //이전 페이지와 다음 페이지만 표시, 즉 표시되는 링크 수는 0보다 크지 않음
  73. if($intLinks $strSql2="`{$strTablename}`에서 * 선택 제한 {$intOffset},{$intNums}";
  74. $arrParameter ['start']=null;
  75. $arrParameter['end'] =null;
  76. $arrParameter['page']=$intPage;
  77. $arrParameter['nums']=$intNums;
  78. $arrParameter['links']=null;
  79. $arrParameter[ 'all']=$intAllPage;
  80. $arrParameter['sql']=$strSql2;
  81. $arrParameter['tag'] =1;
  82. //페이징 바코드가 표시될 때 표시되는 링크 숫자가 0보다 큰 경우
  83. }else{
  84. //총 기록이 0보다 큰 경우
  85. if($intAllPage > ; 0){
  86. //현재 페이지 번호의 값 결정
  87. if($ intPage $intPage=1;
  88. }
  89. if($intPage > ;= $intAllPage){
  90. $intPage=$intAllPage;
  91. }
  92. $ intHalfLinks=floor($intLinks/2);
  93. //시작 페이지 번호 값 계산
  94. $ intStartPage=$intPage-$intHalfLinks;
  95. if($intStartPage $intStartPage =1;
  96. }
  97. if(($intAllPage-$intPage) //$intStartPage=$intPage-$intHalfLinks-($intHalfLinks-($intAllPage-$intPage) );
  98. //$intStartPage=$intPage-$intHalfLinks-$intHalfLinks $intAllPage-$intPage;
  99. $intStartPage=$intAllPage-2*$intHalfLinks;
  100. }
  101. //끝 페이지 번호 계산
  102. $intEndPage=$intPage $intHalfLinks;
  103. if($intEndPage < ; $intLinks && $intAllPage >=$intLinks){
  104. $intEndPage=$intLinks;
  105. }
  106. if($intEndPage > $intAllPage){
  107. $intEndPage=$intAllPage;
  108. }
  109. //실행할 SQL문 생성
  110. $strSql2="select * from `{$strTablename}`limit {$intOffset},{$intNums}";
  111. $arrParameter['start' ]=$intStartPage;
  112. $arrParameter['end']=$intEndPage;
  113. $arrParameter['page'] =$intPage;
  114. $arrParameter['nums']=$intNums;
  115. $arrParameter['links']=$intLinks;
  116. $arrParameter['all']=$intAllPage;
  117. $ arrParameter['sql']=$strSql2;
  118. $arrParameter['tag']= 2;
  119. //전체 레코드가 0인 경우
  120. }else{
  121. $arrParameter['start ']=null;
  122. $arrParameter['end']=null;
  123. $arrParameter['page']=null;
  124. $arrParameter['nums']=null;
  125. $arrParameter[ 'links']=null;
  126. $arrParameter['all']=null;
  127. $arrParameter['sql']=null;
  128. $arrParameter['tag']=3;
  129. }
  130. }
  131. return $arrParameter;
  132. }
  133. /**
  134. * 페이징 바 생성
  135. *
  136. * @param int $intPage 현재 표시된 페이지 번호 값
  137. * @param int $intStartPage 시작 페이지 번호
  138. * @param int $intEndPage 끝 페이지 번호
  139. * @param int $intAllRecords 총 레코드 수
  140. * @param int $intTag 페이징 막대 유형 태그
  141. * @return 문자열
  142. **/
  143. function createPagingItem($intPage,$intStartPage,$intEndPage,$intAllPage,$intTag){
  144. $strPageItem='';
  145. //표시만 top 한 페이지와 다음 페이지의 경우 표시되는 링크의 개수는 0개 이하입니다
  146. if($intTag == 1){
  147. if($intAllPage $strPageItem.='홈페이지  ; 마지막 페이지';
  148. }else{
  149. if($intPage == 1){
  150. $strPageItem.="홈  이전 페이지";
  151. $strPageItem.= "  ";
  152. }else{
  153. $strPageItem.="홈페이지";
  154. $strPageItem .="   ";
  155. $strPageItem.="이전 페이지";
  156. $ strPageItem.="  ";
  157. }
  158. if($intPage == $intAllPage){
  159. $strPageItem.="다음 페이지  마지막 페이지";
  160. } else {
  161. $strPageItem.="다음 페이지";
  162. $strPageItem.="  ;  ";
  163. $strPageItem.="마지막 페이지";
  164. }
  165. }
  166. }
  167. //페이징 바코드 표시 시 표시되는 링크 개수가 0보다 큽니다
  168. if($intTag == 2){
  169. if($intPage == 1){
  170. $ strPageItem.= "홈  이전 페이지";
  171. $strPageItem.="  ";
  172. }else{
  173. $strPageItem.=" 홈페이지";
  174. $strPageItem.="  ";
  175. $strPageItem.="";
  176. $strPageItem.="  ";
  177. }
  178. for($i=$intStartPage;$i if($i == $intPage){
  179. $strPageItem.=$i;
  180. }else{
  181. $strPageItem.="[".$i."]";
  182. }
  183. $strPageItem.="  ";
  184. }
  185. if($intPage == $intAllPage ){
  186. $strPageItem.="다음 페이지  마지막 페이지";
  187. }else{
  188. $strPageItem.="다음 페이지";
  189. $strPageItem.="  ";
  190. $strPageItem.="마지막 페이지";
  191. }
  192. }
  193. //전체 레코드가 0일 때
  194. if ($intTag == 3){
  195. $strPageItem .='홈  마지막 페이지';
  196. }
  197. return $strPageItem;
  198. }
  199. /**
  200. * 데이터 획득 및 출력
  201. *
  202. * @param string $strSql sql 문 쿼리
  203. * @param array $arrFields 표시해야 할 필드로 구성된 배열
  204. * @param 리소스 $resLink 데이터 연결 핸들
  205. * @return 문자열
  206. ** /
  207. function outPutData($strSql,$arrFields,$ resLink){
  208. $resObj=mysql_query($strSql,$resLink);
  209. $arrObj=array();
  210. $strOutPutData='' ;
  211. $arrFieldsCode=array_keys($arrFields);
  212. while(@$arrRow=mysql_fetch_assoc($resObj)){
  213. $arrObj[]=$arrRow;
  214. }
  215. $strOutPutData.="";
  216. $strOutPutData.='
  217. ';
  218. foreach($arrFieldsCode as $strVal){
  219. $strOutPutData.="".$arrFields[trim($strVal)]. "";
  220. }
  221. $strOutPutData.="
  222. ";
  223. foreach($arrObj as $ arrVal){
  224. $strOutPutData.="
  225. foreach($arrFieldsCode as $strVal){
  226. $strOutPutData.="
  227. ";
  228. }
  229. $strOutPutData.="
  230. ";
  231. }
  232. $strOutPutData.="
  233. ".$arrVal[trim($strVal )]."
    ";
  234. return $strOutPutData;
  235. }
  236. // 데이터베이스 연결 및 선택
  237. // 참고: 데이터베이스 이름뿐만 아니라 데이터베이스 계정과 비밀번호도 수정해야 합니다.
  238. $resLink=mysqlConnect('localhost','root','root' ,'ztlibrary') ;
  239. // 페이징 매개변수 찾기 참고: 데이터 테이블 이름을 수정해야 합니다.
  240. $arrParameter=calculateParamester(@$_GET['page']?$_GET['page']:1 ,
  241. 10, 5,'book_info',$resLink);
  242. //표시할 데이터는 테이블의 필드 이름과 해당 키 값으로 구성됩니다. 필드 이름의 중국어 해석은 해당 요소입니다. 값
  243. //참고: 데이터 테이블
  244. $arrFields=array('Id_code'=>'Book Code', 'Book_name'=>'Book Name에서 다음 배열 수정을 기반으로 해야 합니다. ',
  245. 'Book_ISBN'=>'ISBN', 'Contribute_man'=>'출처','Issue_time'=>'출판 시간','Storing_time'=>'저장 시간');
  246. ?>
  247. p>

  248. li> "http://www.w3.org/TR/xhtml1 /DTD/xhtml1-transitional.dtd">
  249. PHP 페이징 데모--www.yuju100.com
  250. / /페이징 데이터 출력
  251. echo outPutData($arrParameter[' sql'],$arrFields,$resLink);
  252. ?>
  • < ;?php
  • //페이징 바 표시
  • echo createPagingItem($arrParameter['page'],$arrParameter['start'],$arrParameter['end'],
  • $arrParameter['all' ],$arrParameter['tag']);
  • ?>
  • 코드 복사


    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.