PHPページネーション表示制作の詳しい解説
1. はじめに
ページング表示は、大量のデータを参照および表示する非常に一般的な方法であり、Web プログラミングで最も一般的に処理されるイベントの 1 つです。 Web プログラミングのベテランにとって、この種のコードを書くことは呼吸するのと同じくらい自然なことですが、初心者にとってはこの問題について混乱することがよくあるため、この問題を詳しく説明するために特別にこの記事を書き、読者の友人に知ってもらえるよう努めています。この記事を読み終えると、ページング表示の原理と実装方法がある程度理解できるようになります。この記事は初心者が読むのに適しており、すべてのサンプル コードは PHP で書かれています。
2. 原則
いわゆるページング表示とは、データベース内の結果セットが表示のために人為的にセクションに分割されることを意味します。ここでは 2 つの初期パラメータが必要です:
。
1 ページあたりのレコード数 ($PageSize)?
現在のページ ($CurrentPageID) は何ページですか?
ここで、別の結果セットを与えるだけで、特定の結果を表示できます。
前のページ ($PReviousPageID)、次のページ ($NextPageID)、総ページ数 ($numPages) などの他のパラメーターについては、すべて前述の内容に基づいて取得できます。
MySQL データベースを例にとると、テーブルから特定のコンテンツをインターセプトしたい場合は、SQL ステートメントを使用できます: select * from table limit offset, rows。次の一連の SQL ステートメントを見て、ルールを見つけてください。
最初の 10 レコード: select * from table limit 0,10
レコード 11 ~ 20: テーブル制限 10,10 から * を選択
レコード 21 ~ 30: テーブル制限 20,10 から * を選択
…
この SQL ステートメントのセットは、実際には $PageSize=10 の場合にテーブルの各ページからデータをフェッチするための SQL ステートメントです。このようなテンプレートを要約すると次のようになります。
select * テーブル制限から ($CurrentPageID - 1) * $PageSize, $PageSizeこのテンプレートを使用し、対応する値を上記の一連の SQL ステートメントに代入して、該当するかどうかを確認してください。データを取得する方法という最も重要な問題を解決したら、あとはパラメータを渡し、適切な SQL ステートメントを作成し、PHP を使用してデータベースからデータを取得して表示するだけです。以下、具体的なコードを用いて説明していきます。
3. 簡単なコード
次のコードを詳しく読んで、自分でデバッグして実行してください。コードを変更して、検索などの独自の機能を追加するのが最善です。
// データベース接続を確立します
$link = mysql_connect("localhost", "mysql_user", "mysql_passWord")
または die("接続できませんでした: " .mysql_error());
// 現在のページ番号を取得します
if( isset($_GET['page']) ){
$page = intval( $_GET['page'] );
}
それ以外{
$page = 1;
}
//ページごとの数
$ページサイズ = 10;
// 総データ量を取得
$sql = "テーブルから金額として count(*) を選択";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
$amount = $row['amount'];
// 合計ページ数を計算します
if( $amount ){
If( $amount
If ($ amount % $ page_size) {// 合計データ量を取得し、ページあたりの数を割ります
$page_count = (int)($amount / $page_size) + 1; > 🎜>
}その他{
$page_count = $amount / $page_size; //余りがない場合、ページ数は総データ量をページ数で割った値となります
}
}
それ以外{
$page_count = 0;
}
// ページめくりリンク
$page_string = '';
if( $page == 1 ){
}
// ファイル名: Pager.class.php
それ以外{
$page_string .= '最初のページ|前のページ a>|' ;
}
if( ($page == $page_count) || ($page_count == 0) ){
$page_string .= '次のページ|最後のページ';
}
それ以外{
$page_string .= '次のページ| ;/a>';
}
// データを取得し、結果を 2 次元配列形式で返します
if( $amount ){
$sql = "select * from table order by id desc limit ". ($page-1)*$page_size .", $page_size";
$result = mysql_query($sql);
while ( $row = mysql_fetch_row($result) ){
$rowset[] = $row;
}
}その他{
$rowset = array();
}
// 結果を表示するコードがないため、説明の範囲を超えています。foreach
を使用して、取得した 2 次元配列を使用するだけで結果を表示できます。
?>
4. OO スタイル コード
次のコードのデータベース接続は、pear db クラス
を使用して処理されます。
//ページング クラス。このクラスはデータ構造の処理にのみ使用され、表示の処理には関与しません
クラスポケベル
{
var $PageSize //ページ数
var $CurrentPageID; //現在のページ番号
var $NextPageID; //次のページ
var $PreviousPageID; //前のページ
var $numPages; // 総ページ数
var $numItems; //レコードの総数
var $isFirstPage // 最初のページかどうか
var $isLastPage //最後のページかどうか
var $sql; //SQL クエリ文
関数ページャー($option)
{
グローバル $db;
$this->_setOptions($option);
//アイテムの総数
If ( !isset($this->numItems) )
{
$res = $db->query($this->sql);
$this->numItems = $res->numRows();
}
// 総ページ数
If ( $this->numItems > 0 )
{
If ( $this->numItems PageSize ){ $this->numPages = 1;
If ( $this->numItems % $this->PageSize )
{
$this->numPages= (int)($this->numItems / $this->PageSize) + 1;
}
その他
{
$this->numPages = $this->numItems / $this->PageSize;
}
}
その他
{
$this->numPages = 0;
}
スイッチ ( $this->CurrentPageID )
{
case $this->numPages == 1:
$this->isFirstPage = true;
$this->isLastPage = true;
休憩;
ケース 1:
$this->isFirstPage = true;
$this->isLastPage = false;
休憩;
case $this->numPages:
$this->isFirstPage = false;
$this->isLastPage = true;
休憩;
デフォルト:
$this->isFirstPage = false;
$this->isLastPage = false;
}
if ( $this->numPages > 1 )
{
if ( !$this->isLastPage ) { $this->NextPageID = $this->CurrentPageID + 1; }
if ( !$this->isFirstPage ) { $this->gt;前のページID = $this->現在のページID - 1; }
}
true を返します;
}
/***
*
*結果セットのデータベース接続を返します
* 結果セットが比較的大きい場合、このメソッドを直接使用してデータベース接続を取得し、クラスの外をトラバースできるため、オーバーヘッドが小さくなります
* 結果セットがそれほど大きくない場合は、getPageData を直接使用して 2 次元配列形式で結果を取得できます
* getPageData メソッドも呼び出して結果を取得します
*
***/
関数 getDataLink()
{
if ( $this->numItems )
{
グローバル $db;
$ページID = $this->現在のページID;
$from = ($PageID - 1)*$this->ページサイズ;
$count = $this->PageSize;
$link = $db->limitQuery($this->sql, $from, $count); //Pear DB::limitQuery メソッドを使用して保護データベース库互換性
$link を返す;
}
他
{
false を返します;
}
}
/***
*
* 結果セットを 2 次元配列の形式で返します
*
***/
関数 getPageData()
{
if ( $this->numItems )
{
if ( $res = $this->getDataLink() )
{
if ( $res->numRows() )
{
while ( $row = $res->fetchRow() )
{
$result[] = $row;
}
}
他
{
$result = array();
}
$result を返す;
}
他
{
false を返します;
}
}
他
{
false を返します;
}
}
function _setOptions($option)
{
$allow_options = array(
'ページサイズ'、
'現在のページID'、
'sql'、
'numItems'
);
foreach ( $option as $key => $value )
{
if ( in_array($key, $allow_options) && ($value != null) )
{
$this->$key = $value;
}
}
true を返します;
}
}
?>
// ファイル名: test_pager.php
// これは、最初の段階の代コードの例であり、前段では、pear db の構築データベース接続の使用を省略した代コード
"Pager.class.php" が必要です。
if ( isset($_GET['page']) )
{
$page = (int)$_GET['page'];
}
他
{
$page = 1;
}
$sql = "select * from table order by id";
$pager_option = array(
"SQL" => $sql、
"ページサイズ" => 10、
"現在のページID" => $ページ
);
if ( isset($_GET['numItems']) )
{
$pager_option['numItems'] = (int)$_GET['numItems'];
}
$pager = @new Pager($pager_option)
$data = $pager->getPageData();
if ( $pager->isFirstPage )
{
$turnover = "ホームページ|前のページ|";
}
それ以外
{
$turnover = "ホームページ|前のページ|";
}
if ( $pager->isLastPage )
{
$turnover .= "次のページ|最後のページ";
}
それ以外
{
$turnover .= "NextPage|numPages."&numItems=".$pager->numItems."'>最後のページ
}
?>
データ処理と結果表示を 1 つのクラスにまとめるのは少し抵抗があると思うので、このクラスはデータを処理するだけで表示は担当しません。表示するときは、状況や要件が変更される可能性があるため、Pager クラスを基にして独自のサブクラスを継承して別のページネーションを表示することをお勧めします。ユーザーのページネーションリストを表示します:
クラス MemberPager は Pager
を拡張します {
関数 showMemberList()
{
グローバル $db;
$data = $this->getPageData(); //結果を表示するコード
// }
}
///
に電話します if ( isset($_GET['page']) )
{
$page = (int)$_GET['page'];
}
それ以外
{
$page = 1;
}
$sql = "メンバーの ID 順から * を選択"; $pager_option = array(
"sql" => $sql,
"ページサイズ" => 10,
"現在のページID" => $ページ
);
if ( isset($_GET['numItems']) )
{
$pager_option['numItems'] = (int)$_GET['numItems'];
}
$pager = @new MemberPager($pager_option); $pager->showMemberList();
?>
次に説明する必要があるのは、異なるデータベースの互換性です。異なるデータベースでは結果をインターセプトする方法が異なります。
mysql: select * from table limit offset, rows
pgsql: select * from tablelimit m offset n
…… したがって、クラス内の結果を取得したい場合は、pear db クラスの limitQuery メソッドを使用する必要があります。

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。
