亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

ページネーションを作成する

実際のプロジェクトでは、ホスト、ユーザー名、パスワード、ライブラリを構(gòu)成ファイルに記述します。
コードにハード的に記述されている場(chǎng)合、データベースサーバーの関連情報(bào)が変更された場(chǎng)合、すべてのコードを変更するというプログラマーの考え方と明らかに一致しません。

さらに、データベースに接続する必要があるすべてのページで。接続を書いたり、エラーを判定したり、文字セットを設(shè)定したりする必要があり、とても面倒です。また、これらのコードを再利用することは有益ではありません。

目標(biāo)を達(dá)成するには、前述した一連の関數(shù)を使用できます。サンプル畫像は次のとおりです:

QQ截圖20161010101506.png

したがって、設(shè)定ファイル config.php を作成できます。定數(shù)として使用する必要があるすべての設(shè)定を設(shè)定します。コードは次のとおりです。

<?php
//數(shù)據(jù)庫(kù)服務(wù)器
define('DB_HOST', 'localhost');
//數(shù)據(jù)庫(kù)用戶名
define('DB_USER', 'root');
//數(shù)據(jù)庫(kù)密碼
define('DB_PWD', 123456789);
//庫(kù)名
define('DB_NAME', 'book');
//字符集
define('DB_CHARSET', 'utf8');
?>

將來(lái)データベースに接続する必要がある場(chǎng)合は、connection.php を含める必要があるだけです。ファイル。コードは次のとおりです:

<?php
include 'config.php';
$conn = mysqli_connect(DB_HOST, DB_USER, DB_PWD, DB_NAME);
if (mysqli_errno($conn)) {
    mysqli_error($conn);
    exit;
}
mysqli_set_charset($conn, DB_CHARSET);

將來(lái)的には、connection.php ファイルを各ファイルに直接インクルードすることでデータベース接続を?qū)g裝できます:

include 'connection.php';

上記の準(zhǔn)備を完了し、ページングを完了します。ページネーションの効果は次のとおりです:

QQ截圖20161010101814.png

ページには次の基本要素が含まれている必要があります:

QQ截圖20161010101852.png

QQ截圖20161010101858.png

ページ番號(hào)を制御するときは、常に URL アドレス バーを介してページ番號(hào)の値を渡します。ページ番號(hào)コントロール。ページ番號(hào)に関する情報(bào)をpage.phpに追記することで、より有効な情報(bào)を算出することができます。ページングを制御する URL の効果は次のとおりです。

QQ截圖20161010101933.png

コード実裝では、ページングは??オフセット (offset) と制限後の數(shù)値 (num) によって実際に実現(xiàn)されます。

limit offset 、num

QQ截圖20161010101943.png

は、1 ページあたり 5 つの項(xiàng)目が表示されると仮定します。ページングの制限を制御するための最終的な式は次のとおりです:

offset の値は (n-1)*5 です
num は指定された 5 です

コードを通じてビジネスを?qū)g裝します:

1 必要なパラメーターを計(jì)算します。ページング用

総數(shù)

ユーザーテーブルのcount(id)をクエリすることで総數(shù)$countを取得します。

$count_sql = 'select count(id) as c from user';
$result = mysqli_query($conn, $count_sql);
$data = mysqli_fetch_assoc($result);
//得到總的用戶數(shù)
$count = $data['c'];

現(xiàn)在のページ

最初に page.php ページに入ると、URL は http://www.phpxy.com/page.php となり、その後に ?page=1 ページ識(shí)別番號(hào)はありません。

そのため、ページ識(shí)別番號(hào)を手動(dòng)で作成し、それを現(xiàn)在のページ番號(hào)変數(shù) $page に渡す必要があります。

ユーザーから渡されたページに小數(shù)が含まれている可能性があるため、強(qiáng)制的な型変換を?qū)g行します: (int) $_GET['page']。

最初の書き方:

$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;

2 番目の書き方

if (isset($_GET['page'])) {
    $page = (int) $_GET['page'];
} else {
    $page = 1;
}

最後のページ

各ページは整數(shù)でなければなりません。小學(xué)校の算數(shù)と同じです。平均して、5.6 人が何個(gè)のリンゴを準(zhǔn)備する必要があります。答えは 6 でなければなりません。

ページに 20.3 ページが表示される場(chǎng)合は、丸め関數(shù) ceil を使用する必要があります。ページネーション數(shù)を21とします。

合計(jì)數(shù)を各ページに表示されるデータ項(xiàng)目の數(shù)で割って、合計(jì)ページ數(shù)を取得します。

//ページごとの表示數(shù)

$num = 5;
$total = ceil($count / $num);

前ページと次ページの例外制御

ユーザーが最初のページで前のページをクリックし、最後のページで次のページをクリックした場(chǎng)合はどうなりますか?

この場(chǎng)合、データが範(fàn)囲を超えるため、ページネーション時(shí)にデータが表示されなくなります。

この異常な狀況を考慮する必要があるのは明らかです。したがって、ページング中に最初のページが 1 減算される場(chǎng)合は、それを最初のページとします。
最終ページに追加した場(chǎng)合は最終ページ、つまり例外制御が完了します。

if ($page <= 1) {
    $page = 1;
} 
if ($page >= $total) {
    $page = $total;
}

2. SQL ステートメント

ページングの核心は、SQL ステートメントのオフセットと數(shù)値によって各ページの表示數(shù)を制御することであると前に述べました。

また、上記の特定の式を次のようにコードに変換しました:

$num = 5;
$offset = ($page - 1) * $num;

$num と $offset を SQL ステートメントに適用しました:

$sql = "select id,username,createtime,createip from user order by id desc limit $offset , $num";

URI のページング値を制御します

echo '<tr>
    <td colspan="5">
    <a href="page.php?page=1">首頁(yè)</a>
    <a href="page.php?page=' . ($page - 1) . '">上一頁(yè)</a>
    <a href="page.php?page=' . ($page + 1) . '">下一頁(yè)</a>
    <a href="page.php?page=' . $total . '">尾頁(yè)</a>
    當(dāng)前是第 ' . $page . '頁(yè)  共' . $total . '頁(yè)
    </td>
    </tr>';

最後に、最終的な効果を達(dá)成するために、ビジネス全體が直列に接続されます。 コードは次のとおりです:

<?php
include 'connection.php';
$count_sql = 'select count(id) as c from user';
$result = mysqli_query($conn, $count_sql); 
$data = mysqli_fetch_assoc($result);
//得到總的用戶數(shù)
$count = $data['c'];
$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;
/*
if (isset($_GET['page'])) {
    $page = (int) $_GET['page'];
} else {
    $page = 1;
}
 */
//每頁(yè)顯示數(shù)
$num = 5;
//得到總頁(yè)數(shù)
$total = ceil($count / $num);
if ($page <= 1) {
    $page = 1;
}
if ($page >= $total) {
    $page = $total;
}
$offset = ($page - 1) * $num;
$sql = "select id,username,createtime,createip from user order by id desc limit $offset , $num";
$result = mysqli_query($conn, $sql);
if ($result && mysqli_num_rows($result)) {
    //存在數(shù)據(jù)則循環(huán)將數(shù)據(jù)顯示出來(lái)
    echo '<table width="800" border="1">';
    while ($row = mysqli_fetch_assoc($result)) {
        echo '<tr>';
        echo '<td>' . $row['username'] . '</td>';
        echo '<td>' . date('Y-m-d H:i:s', $row['createtime']) . '</td>';
        echo '<td>' . long2ip($row['createip']) . '</td>';
        echo '<td><a href="edit.php?id=' . $row['id'] . '">編輯用戶</a></td>';
        echo '<td><a href="delete.php?id=' . $row['id'] . '">刪除用戶</a></td>';
        echo '</tr>';
    }
    echo '<tr><td colspan="5"><a href="page.php?page=1">首頁(yè)</a>  <a href="page.php?page=' . ($page - 1) . '">上一頁(yè)</a>   <a href="page.php?page=' . ($page + 1) . '">下一頁(yè)</a>  <a href="page.php?page=' . $total . '">尾頁(yè)</a>  當(dāng)前是第 ' . $page . '頁(yè)  共' . $total . '頁(yè) </td></tr>';
    echo '</table>';
} else {
    echo '沒(méi)有數(shù)據(jù)';
}
mysqli_close($conn);
?>

ページングの原則

1. まず、SQL ステートメントでの制限の使用方法を理解します

SELECT * FROM table...limit 開始位置、操作數(shù) (開始位置は0から始まります)

例:

最初の20レコードを取得: SELECT * FROM table...limit 0, 20
先頭から20レコードを取得11位:SELECT * FROM table ……limit 10, 20

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

select * from table LIMIT 5; // 最初の 5 行を返す、select * from table LIMIT 0, 5 と同じ

2. いわゆるページング表示とは、データベース內(nèi)の結(jié)果セット、1 つずつ表示セグメント化方法、現(xiàn)在どの段落にあるか (ページあたりのレコード數(shù)、現(xiàn)在のページは何ページか)

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

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

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

ページング式:

(現(xiàn)在のページ番號(hào) - 1) X ページごとのアイテム數(shù)、アイテム1 ページあたりの番號(hào)

Select * from table limit ($Page- 1) * $PageSize, $PageSize


3. $_SERVER["REQUEST_URI"] 関數(shù)

は、事前定義されたサーバー変數(shù)の一種であり、$_SERVER で始まるものはすべて事前定義サーバー変數(shù)と呼ばれます。 REQUEST_URI は、ドメイン名を除いた完全なアドレス パスである現(xiàn)在の URI を取得するために使用されます。

例:

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

echo $_SERVER["REQUEST_URI"]

結(jié)果は次のとおりです:/home.php?id=23&cid= 22

4. parse_url() で URL を解析する関數(shù)

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


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

結(jié)果:

Array
(
[スキーム] => http ; [パス] => /パス ; パラメータを取得します。フラグメント] => )


5. コード例

メッセージのこのページは 3 つの部分に分かれており、1 つはデータベース設(shè)計(jì)、1 つは接続ページ、もう 1 つは表示ページです。

(1) デザインデータベース デザインデータベースは bbs と呼ばれるデータテーブルで、タイトル、最終日付、ユーザー、コンテンツなどのフィールドが含まれており、それぞれメッセージのタイトル、日付を表します。メッセージ、メッセージを殘した人、メッセージの內(nèi)容

(2) ページを接続

<?php
$conn = @ mysql_connect("localhost", "root", "123456") or die("數(shù)據(jù)庫(kù)鏈接錯(cuò)誤"); mysql_select_db("bbs", $conn); mysql_query("set names 'GBK'"); //使用GBK中文編碼;
//將空格,換行轉(zhuǎn)換為HTML可解析
function htmtocode($content) {  $content = str_replace("\n", "<br>", str_replace(" ", "&nbsp;", $content)); //兩個(gè)str_replace嵌套
 return $content; }
//$content=str_replace("'","‘",$content);  //htmlspecialchars(); 
?>
(3) ページを表示

<?php  
include("conn.php");
$pagesize=2;       
//設(shè)置每頁(yè)顯示2個(gè)記錄 $url=$_SERVER["REQUEST_URI"];   
$url=parse_url($url); 
$url=$url[path];
$numq=mysql_query("SELECT * FROM `message`"); 
$num = mysql_num_rows($numq);
if($_GET[page]){ $pageval=$_GET[page]; 
$page=($pageval-1)*$pagesize; 
$page.=','; 
} 
if($num > $pagesize)
{ 
if($pageval<=1)$pageval=1;
 echo "共 $num 條".  " <a href=$url?page=".($pageval-1).">上一頁(yè)</a> 
 <a href=$url?page=".($pageval+1).">下一頁(yè)</a>"; 
 } 
 $SQL="SELECT * FROM `message` limit $page $pagesize ";    
  $query=mysql_query($SQL);   
  while($row=mysql_fetch_array($query)){ 
  ?>
<table width=500 border="0" cellpadding="5" cellspacing="1" bgcolor="#add3ef">
   <tr bgcolor="#eff3ff">
   <td>標(biāo)題:<?php echo $row[title]?></td> <td>時(shí)間:<?php echo $row[lastdate]?></td>
   </tr>
   <tr bgcolor="#eff3ff">
   <td> 用戶:<?php echo $row[user]?></td><td></td>
   </tr>
   <tr>
   <td>內(nèi)容:<?php echo htmtocode($row[content]);?></td>
   </tr>
   <br>
 </table>

學(xué)び続ける
||
<?php include 'connection.php'; $count_sql = 'select count(id) as c from user'; $result = mysqli_query($conn, $count_sql); $data = mysqli_fetch_assoc($result); //得到總的用戶數(shù) $count = $data['c']; $page = isset($_GET['page']) ? (int) $_GET['page'] : 1; /* if (isset($_GET['page'])) { $page = (int) $_GET['page']; } else { $page = 1; } */ //每頁(yè)顯示數(shù) $num = 5; //得到總頁(yè)數(shù) $total = ceil($count / $num); if ($page <= 1) { $page = 1; } if ($page >= $total) { $page = $total; } $offset = ($page - 1) * $num; $sql = "select id,username,createtime,createip from user order by id desc limit $offset , $num"; $result = mysqli_query($conn, $sql); if ($result && mysqli_num_rows($result)) { //存在數(shù)據(jù)則循環(huán)將數(shù)據(jù)顯示出來(lái) echo '<table width="800" border="1">'; while ($row = mysqli_fetch_assoc($result)) { echo '<tr>'; echo '<td>' . $row['username'] . '</td>'; echo '<td>' . date('Y-m-d H:i:s', $row['createtime']) . '</td>'; echo '<td>' . long2ip($row['createip']) . '</td>'; echo '<td><a href="edit.php?id=' . $row['id'] . '">編輯用戶</a></td>'; echo '<td><a href="delete.php?id=' . $row['id'] . '">刪除用戶</a></td>'; echo '</tr>'; } echo '<tr><td colspan="5"><a href="page.php?page=1">首頁(yè)</a> <a href="page.php?page=' . ($page - 1) . '">上一頁(yè)</a> <a href="page.php?page=' . ($page + 1) . '">下一頁(yè)</a> <a href="page.php?page=' . $total . '">尾頁(yè)</a> 當(dāng)前是第 ' . $page . '頁(yè) 共' . $total . '頁(yè) </td></tr>'; echo '</table>'; } else { echo '沒(méi)有數(shù)據(jù)'; } mysqli_close($conn); ?>
提出するリセットコード