>  기사  >  백엔드 개발  >  PHP 페이징 원리 및 PHP 페이징 코드 종합 예제

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

WBOY
WBOY원래의
2016-07-25 08:52:451833검색
  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 <= 0){
  63. $intNums =10;
  64. }
  65. //총 페이지 수 계산
  66. $strSql1="`{$strTablename}`에서 num으로 count(*) 선택";
  67. $resObj1=mysql_query($ strSql1,$resLink);
  68. $arrObj1=mysql_fetch_assoc($ resObj1);
  69. $intAllRecords=$arrObj1['num'];
  70. $intAllPage=ceil($intAllRecords/$intNums);
  71. //SQL 문 제한 키워드의 첫 번째 매개변수
  72. $intOffset=($intPage-1)*$intNums;
  73. //이전 페이지와 다음 페이지만 표시, 즉 표시되는 링크 수는 0보다 크지 않음
  74. if($intLinks <= 0){
  75. $strSql2="`{$strTablename}`에서 * 선택 제한 {$intOffset},{$intNums}";
  76. $arrParameter ['start']=null;
  77. $arrParameter['end'] =null;
  78. $arrParameter['page']=$intPage;
  79. $arrParameter['nums']=$intNums;
  80. $arrParameter['links']=null;
  81. $arrParameter[ 'all']=$intAllPage;
  82. $arrParameter['sql']=$strSql2;
  83. $arrParameter['tag'] =1;
  84. //페이징 바코드가 표시될 때 표시되는 링크 숫자가 0보다 큰 경우
  85. }else{
  86. //총 기록이 0보다 큰 경우
  87. if($intAllPage > ; 0){
  88. //현재 페이지 번호의 값 결정
  89. if($ intPage <= 0){
  90. $intPage=1;
  91. }
  92. if($intPage > ;= $intAllPage){
  93. $intPage=$intAllPage;
  94. }
  95. $ intHalfLinks=floor($intLinks/2);
  96. //시작 페이지 번호 값 계산
  97. $ intStartPage=$intPage-$intHalfLinks;
  98. if($intStartPage <= 0){
  99. $intStartPage =1;
  100. }
  101. if(($intAllPage-$intPage) < $intHalfLinks) {
  102. //$intStartPage=$intPage-$intHalfLinks-($intHalfLinks-($intAllPage-$intPage) );
  103. //$intStartPage=$intPage-$intHalfLinks-$intHalfLinks $intAllPage-$intPage;
  104. $intStartPage=$intAllPage-2*$intHalfLinks;
  105. }
  106. //끝 페이지 번호 계산
  107. $intEndPage=$intPage $intHalfLinks;
  108. if($intEndPage < ; $intLinks && $intAllPage >=$intLinks){
  109. $intEndPage=$intLinks;
  110. }
  111. if($intEndPage > $intAllPage){
  112. $intEndPage=$intAllPage;
  113. }
  114. //실행할 SQL문 생성
  115. $strSql2="select * from `{$strTablename}`limit {$intOffset},{$intNums}";
  116. $arrParameter['start' ]=$intStartPage;
  117. $arrParameter['end']=$intEndPage;
  118. $arrParameter['page'] =$intPage;
  119. $arrParameter['nums']=$intNums;
  120. $arrParameter['links']=$intLinks;
  121. $arrParameter['all']=$intAllPage;
  122. $ arrParameter['sql']=$strSql2;
  123. $arrParameter['tag']= 2;
  124. //전체 레코드가 0인 경우
  125. }else{
  126. $arrParameter['start ']=null;
  127. $arrParameter['end']=null;
  128. $arrParameter['page']=null;
  129. $arrParameter['nums']=null;
  130. $arrParameter[ 'links']=null;
  131. $arrParameter['all']=null;
  132. $arrParameter['sql']=null;
  133. $arrParameter['tag']=3;
  134. }
  135. }
  136. return $arrParameter;
  137. }
  138. /**
  139. * 페이징 바 생성
  140. *
  141. * @param int $intPage 현재 표시된 페이지 번호 값
  142. * @param int $intStartPage 시작 페이지 번호
  143. * @param int $intEndPage 끝 페이지 번호
  144. * @param int $intAllRecords 총 레코드 수
  145. * @param int $intTag 페이징 막대 유형 태그
  146. * @return 문자열
  147. **/
  148. function createPagingItem($intPage,$intStartPage,$intEndPage,$intAllPage,$intTag){
  149. $strPageItem='';
  150. //표시만 top 한 페이지와 다음 페이지의 경우 표시되는 링크의 개수는 0개 이하입니다
  151. if($intTag == 1){
  152. if($intAllPage <= 0){
  153. $strPageItem.='홈페이지  ; 마지막 페이지';
  154. }else{
  155. if($intPage == 1){
  156. $strPageItem.="홈 이전 페이지";
  157. $strPageItem.= " ";
  158. }else{
  159. $strPageItem.="홈페이지";
  160. $strPageItem .="   ";
  161. $strPageItem.="이전 페이지";
  162. $ strPageItem.="  ";
  163. }
  164. if($intPage == $intAllPage){
  165. $strPageItem.="다음 페이지  마지막 페이지";
  166. } else {
  167. $strPageItem.="다음 페이지";
  168. $strPageItem.="  ;  ";
  169. $strPageItem.="마지막 페이지";
  170. }
  171. }
  172. }
  173. //페이징 바코드 표시 시 표시되는 링크 개수가 0보다 큽니다
  174. if($intTag == 2){
  175. if($intPage == 1){
  176. $ strPageItem.= "홈  이전 페이지";
  177. $strPageItem.="  ";
  178. }else{
  179. $strPageItem.=" 홈페이지";
  180. $strPageItem.="  ";
  181. $strPageItem.="";
  182. $strPageItem.="  ";
  183. }
  184. for($i=$intStartPage;$i<= $intEndPage;$i ){
  185. if($i == $intPage){
  186. $strPageItem.=$i;
  187. }else{
  188. $strPageItem.="[".$i."]";
  189. }
  190. $strPageItem.="  ";
  191. }
  192. if($intPage == $intAllPage ){
  193. $strPageItem.="다음 페이지  마지막 페이지";
  194. }else{
  195. $strPageItem.="다음 페이지";
  196. $strPageItem.="  ";
  197. $strPageItem.="마지막 페이지";
  198. }
  199. }
  200. //전체 레코드가 0일 때
  201. if ($intTag == 3){
  202. $strPageItem .='홈  마지막 페이지';
  203. }
  204. return $strPageItem;
  205. }
  206. /**
  207. * 데이터 획득 및 출력
  208. *
  209. * @param string $strSql sql 문 쿼리
  210. * @param array $arrFields 표시해야 할 필드로 구성된 배열
  211. * @param 리소스 $resLink 데이터 연결 핸들
  212. * @return 문자열
  213. ** /
  214. function outPutData($strSql,$arrFields,$ resLink){
  215. $resObj=mysql_query($strSql,$resLink);
  216. $arrObj=array();
  217. $strOutPutData='' ;
  218. $arrFieldsCode=array_keys($arrFields);
  219. while(@$arrRow=mysql_fetch_assoc($resObj)){
  220. $arrObj[]=$arrRow;
  221. }
  222. $strOutPutData.="";
  223. $strOutPutData.='
  224. ';
  225. foreach($arrFieldsCode as $strVal){
  226. $strOutPutData.="< td>".$arrFields[trim($strVal)]. "";
  227. }
  228. $strOutPutData.="
  229. ";
  230. foreach($arrObj as $ arrVal){
  231. $strOutPutData.=" foreach($arrFieldsCode as $strVal){
  232. $strOutPutData.="
  233. ";
  234. }
  235. $strOutPutData.="
  236. ";
  237. }
  238. $strOutPutData.="
  239. ".$arrVal[trim($strVal )]."
    ";
  240. return $strOutPutData;
  241. }
  242. // 데이터베이스 연결 및 선택
  243. // 참고: 데이터베이스 이름뿐만 아니라 데이터베이스 계정과 비밀번호도 수정해야 합니다.
  244. $resLink=mysqlConnect('localhost','root','root' ,'ztlibrary') ;
  245. // 페이징 매개변수 찾기 참고: 데이터 테이블 이름을 수정해야 합니다.
  246. $arrParameter=calculateParamester(@$_GET['page']?$_GET['page']:1 ,
  247. 10, 5,'book_info',$resLink);
  248. //표시할 데이터는 테이블의 필드 이름과 해당 키 값으로 구성됩니다. 필드 이름의 중국어 해석은 해당 요소입니다. 값
  249. //참고: 데이터 테이블
  250. $arrFields=array('Id_code'=>'Book Code', 'Book_name'=>'Book Name에서 다음 배열 수정을 기반으로 해야 합니다. ',
  251. 'Book_ISBN'=>'ISBN', 'Contribute_man'=>'출처','Issue_time'=>'출판 시간','Storing_time'=>'저장 시간');
  252. ?>
  253. "http://www.w3.org/TR/xhtml1 /DTD/xhtml1-transitional.dtd">
  254. PHP 페이징 데모--www.yuju100.com
  255. < /head>
  256. / /페이징 데이터 출력
  257. echo outPutData($arrParameter[' sql'],$arrFields,$resLink);
  258. ?>
  • < ;?php
  • //페이징 바 표시
  • echo createPagingItem($arrParameter['page'],$arrParameter['start'],$arrParameter['end'],
  • $arrParameter['all' ],$arrParameter['tag']);
  • ?>
  • 코드 복사


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