PHP で Web ページのページング効果を実現する方法

WBOY
リリース: 2016-06-20 12:47:28
オリジナル
1433 人が閲覧しました

PHP Web サイトでは、主に小説を読む場合にページネーション効果を実現したいというニーズが多くあります。

この関数は次のように実装されます:

ページングに SQL クエリを使用する場合、詳細については、スクリプトを参照してください。
1.pager.class.php
$sql; query state
public $datanum; //全データの総レコード数をクエリ
public $page_size; //各ページに表示されるレコード数
protected $_errstr;
protected $_conn;
protected $_query_id;

public function query($query)///この関数には問題があるため、当面は使用できません
$ret = false;
if (! Empty ($ query)) {
if ($ this- & gt; _conn === false ||! Is_Resource ($ this- & gt; _conn)) {
warninglog (__ method__. ': 接続なしのクエリ SQL', true);
return false; , $this->_conn);
if ($this->_query_id === false) {
$this- >_errstr = '成功';
$ret = $this->_query_id;
}
}
msg = ($ret === false) : strval($ ret);
debugLog(__METHOD__.": SQL クエリ [$query] に対して [$msg] が返されました");
return $ret;
}
function __construct($sql,$ Page_ size){
$ result = mysql_query($ sql);
$ datanum = mysql_num_rows($ result);
$ this-> sql = $ sql;
$ this-> datanum =$datanum;
                        $this->page_size=$page_size;
}

//当前页数
public function page_id() {
if($_SERVER['QUERY_STRING'] == "" ){
return 1;
elseif(substr_count($_SERVER['QUERY_STRING'],"page_id=") == 0){
return 1;
}else{
return intval(substr($_SERVER['QUERY_STRING'],8));
}
}

//剩余url值
パブリック関数 url() {
if($ _SERVER['QUERY_STRING'] == ""){
return "";
elseif(substr_count($_SERVER['QUERY_STRING'],"page_id) =") == 0){
return " &".$_SERVER['QUERY_STRING'];
else{
str_replace("page_id=".$this->page_id(),"",$_ SERVER['QUERY_STRING']);
}
}

//总页数
public function page_num( ) {
if($this->datanum == 0){
return 1;
}else{
return ceil($this->datanum/$this->page_size);
}
}
// データベースクエリのオフセット ;page_size;
turn $this->sql." 制限 ".$this->start().",". page_size;
return $ _server ['php_ self'];
..、$ _server ['php_ self'];
>>
return "< a href ="。$ this-> php_self()."?page_id=1".$this->url().">前のページ ->page_id() != 1) { //ページの数ページ数が 1 に等しくありません
return "前のページ ";
// ページネーションを表示
private function display_page() {
$display_page = "";
if($this-> ;page_num() for ($i=1; $ipage_num();$i++) //ページをループします
".$i.$this->url().">".$i." ";
                                        return $display_page;
elseif($this->page_num() > 10){ //大10页
if($this->page_ id() for ($i=1;$i<=10;$i++) //循環环显表示页面
$display_page .= "".$i." }elseif(($this->page_id () > 6) && ($this->page_num()-$this->page_id() >= 4)){
for ($i=$this->page_id()-5 ;$i<=$this->page_id()+4;$i++) //循環显示页面
$display_page .= "url().">".$i." ";
return $display_page;
}elseif(($this- >page_id() > 6) && ($this->page_num()-$this->page_id() < 4)){
for ($i=$this->page_num()-9;$i<=$this->page_num();$i++) //循環掯显示页面
$display_page .= "".$i." $display_page;

}
}

//次のページ
private function next_page() {
if ($this->page_id() < $this->page_num()) { //ページ数が総ページ数より少ないページの数
は "
次の 1 ページ ";
return "< a href=".$this->php_self()."?page_id=".$this->page_num(). $ this->url().">次のページ " ; () {

$page_info .= "url().">ホームページ " ;
$page_info .= $this->pre_page(); $page_info .= $this-> next_page();
$page_info .= " 終了ページ & lt;/a & gt; "
$ page_info. =" ". $ This- & gt; page_id () . $page_info;
}

}
?>
2. スクリプト 2:
/read ページネーション クラス
include("pager .class.php");
// データベース接続の初期化
// $db = new mysql();
$impeach_host = '10.81.43.139';
$impeach_usr = 'vmtest15';
$impeach_passwd = 'vmtest15';
$impeach_name = 'ufeature';
$impeach_con = mysql_connect($impeach_host, $impeach_usr, $impeach_passwd) または
die("接続できません ".mysql_error());
mysql_select_db($impeach_name, $impeach_con);
// これは SQL クエリ ステートメントであり、クエリ結果を取得します
$sql = "select ufeature.spam_accuse_word_list の単語、 flag='0'";
// $ res_1 = mysql_query ($ SQL) または
// DIE ("Canon Result" . mysql_error ());

$ resql_query ($ page- & gt; sqlquery () ; "]."
";
>
2. ajax の使い方



1. まずはSQL文でのlimitの使い方を理解します


SELECT * FROM table ……limit Start Position 、操作数 (開始位置は0から始まります)



例:

最初の 20 レコードを取得します: SELECT * FROM table...limit 0, 20
11 番目から始まる 20 レコードを取得します: SELECT * FROM table... limit 10, 20

LIMIT n は LIMIT 0,n と同等です。

たとえば、select * from table LIMIT 5; //select * from table LIMIT 0, 5 と同じです。

2. ページングの原理


いわゆるページング表示とは、データベース内の結果セットをセグメントごとに表示することを意味します

セグメント化の方法、現在どのセグメントにあるか (何番目のセグメントにあるか)ページあたりの項目、現在そのページに含まれる項目の数) ページ)

最初の 10 レコード: select * from table limit 0,10

11 番目から 20 番目のレコード: select * from table limit 10,10

21 番目から 30 番目のレコード :テーブル制限 20,10 から * を選択

ページング式:

(現在の番号ページ数 - 1) ページごとの番号、アイテム数

テーブル制限 ($Page- 1) から * $PageSize、$PageSize



3, $ _SERVER["REQUEST_URI"] 関数

は、事前定義されたサーバー変数の一種であり、$_SERVER で始まるものはすべて事前定義サーバー変数と呼ばれます。

REQUEST_URI の機能は、ドメイン名を除いた完全なアドレス パスである現在の URI を取得することです。
例:

現在のページは次のとおりです: http://www.test.com/home.php?id=23&cid=22

echo $_SERVER["REQUEST_URI " ]

結果は次のようになります: /home.php?id=23&cid=22

4. parse_url() 解析 URL 関数

parse_url() は、URL を固定キー値を持つ配列に解析する関数です。

$ua= parse_url("http://username:password@hostname/path?arg=value#anchor"); print_r($ua)

結果: 配列

( [スキーム] => http ; [ホスト] => ホストドメイン名

[パス] =>パス] => パス [クエリ] => パラメータを取得します。

[fragment] => アンカー ; 🎜> メッセージのこのページングは​​ 3 つの部分に分かれており、1 つはデータベース設計、1 つは接続ページ、もう 1 つは表示ページです。

(1) デザイン データベース


デザイン データベースは bbs と呼ばれ、message と呼ばれるデータ テーブルがあり、タイトル、最終日付、ユーザー、メッセージタイトル、メッセージ日付、メッセージ相手、メッセージ内容

(2) 接続ページ

$ conn = @ mysql_connect ("localhost", "root", "123456") または die("データベース リンク エラー"); mysql_select_db("bbs", $conn); '"); //GBK 中国語エンコーディングを使用します;

//スペースと改行を解析可能な HTML に変換します

function htmtocode($content) {

$content = str_replace("n" , "
", str_replace(" ", " ", $content)); // 2 つの str_replace ネスト return $content;

// $content=str_replace("'","'",$content);

//htmlspecialchars();



(3) ページの表示

include("conn.php"); //1 ページに 2 件のレコードを表示するように設定します。
$url=$_SERVER["REQUEST_URI"];

$url=parse_url($url);


$numq= mysql_query("SELECT * FROM `message`");

$num = mysql_num_rows($numq);

if($_GET[ページ]){

$pageval=$_GET[ページ] ;

$page=($pageval-1)*$pagesize;

$page.=',';

if($num > $pagesize){

if( $pageval<=1)$pageval=1; echo "合計 $num 項目".

"
次のページ";

}
$SQL ="SELECT * FROM `message` 制限 $page $pagesize ";

$query=mysql_query($SQL);


while($row=mysql_fetch_array($query)){
?> ;

;td>タイトル: 時刻:


ユーザー:
コンテンツ: ;

}
?>
(4)最終表示


方法 3:

<script>  <br> function viewpage(p){ <br> if(window.XMLHttpRequest){ <br> var xmlReq = new XMLHttpRequest();  <br> } else if(window.ActiveXObject) { <br> var xmlReq = new ActiveXObject('Microsoft.XMLHTTP');  <br> } <br> var formData = "page="+p;  <br> xmlReq.onreadystatechange = function(){ <br> if(xmlReq.readyState == 4){ <br> document.getElementByIdx_x('content2').innerHTML = xmlReq.responseText;  <br> } <br> } <br> xmlReq.open("post", "hotel_list.php", true);  <br> xmlReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");  <br> xmlReq.send(formData);  <br> false を返します。  <br> } <br> </script>

脚本 2:


header("Content-Type:text/html;charset=GB2312"); 
$pagesize=10; 
//エコー $_POST['page']; 
$result = mysql_query("選択数(DISTINCT ホテル名) FROM ".TBL_HOTELS); 
$myrow = mysql_fetch_array($result); 
$numrows=$myrow[0]; 

$pages=intval($numrows/$pagesize); 
if ($numrows%$pagesize)
$pages++; 
if (isset($_POST['page'])){
$page=intval($_POST['page']); 
}
else{
//第一页
$page=1; に設定します。 
}
$first=1; 
$prev=$page-1; 
$next=$page+1; 
$last=$pages; 
//计算记录偏移量
$offset=$pagesize*($page - 1); 
//读取指定记录数
$result=mysql_query("select `hotelname` , count( * ) from ".TBL_HOTELS." GROUP BY `hotelname` order by id desc limit $offset,$pagesize" ); 
$num = mysql_num_rows($result); 
while ($row = mysql_fetch_array($result,MYSQL_NUM)) {
$hotelname[] = $row[0]; 
$countpeople[] = $row[1]; 
}
for($a=0;$a<$num;$a++)
{
//$result=mysql_query("select count(title) from " . TBL_Comments ." where `title`="".$title[$a]."""); 
//$row = mysql_fetch_row($result); 
echo "

n"; 
echo "

n"; 
echo "n"; 
echo "n"; 
echo "n"; 
echo " n"; 
echo "n"; 
echo "
n"; 
//評価_バー($title[$a],5); 
echo "
n"; 
echo "
n"; 
echo " 推荐人数:($countpeople[$a]) |n"; 
echo "平均分: (".$count."票) | 评论数:()n"; 
echo "
n"; 
}
echo " echo "border=0>"; 
echo ""; 
echo "
"; 
echo "

第".$page."页/总".$pages."页 | 总".$numrows."条 | "; 
if ($page>1) echo "首页 | "; 
if ($page>1) echo "上页 | "; 
if ($page<$pages) echo "下页 | "; 
if ($page<$pages) echo "尾页"; 
echo "转到第 "; 
echo "

";

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート