カテゴリー
PHP

PDO接続のデータベースのページイング

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta name="GENERATOR" content="JustSystems Homepage Builder Version 18.0.14.0 for Windows">
<title></title>
<style>
<!--
    table,th,td{
        border: 1px solid #000;
    }
-->
</style>
</head>
<body background="y8b.gif">

<?php
  require_once ("newpage8.php");
//自身の環境に合わせて書き換える
//接続に必要な$hostname、$dbname、$username、$passwordはnewpage8.phpへ移動
//newpage8.phpはサイト転送出来ないので、転送ツールでアップする
 
  print $APPTITLE;
 
  MyTitlePrint("実験開始!データベースのテーブル表示テスト");
 
//------
  $dsn = "mysql:host=".$hostname.";dbname=".$dbname;
 
  try {
    $dbh = new PDO($dsn, $username, $password);
    // GETで現在のページ数を取得する(未入力の場合は1を挿入)

?>
    <form  method="GET" >
      <p> ページ: <input type="text" name="page" value=""><input type="submit" ></p>
    </form> 
<?php

    if (isset($_GET['page'])) {
	$page = (int)$_GET['page'];
    } else {
	$page = 1;
    }
  } catch (PDOException $e) {
      echo 'Connection failed: ' . $e->getMessage();
  }

    // スタートのポジションを計算する
    if ($page > 1) {
	// 例:2ページ目の場合は、『(2 × 10) - 10 = 10』
	$start = ($page * 10) - 10;
    } else {
	$start = 0;
    }
    //meiboテーブルから10件のデータを取得する
    $posts = $dbh->prepare("
        SELECT id, namae, jyusyo
        FROM meibo
        LIMIT {$start}, 10
    ");
    $posts->execute();
    $posts = $posts->fetchAll(PDO::FETCH_ASSOC);

    foreach ($posts as $meibo) {
        echo $meibo['id'], ' : ';
        echo $meibo['namae'], ' : ';
        echo $meibo['jyusyo'], '<BR>';
    }
    // 接続を使用する
    $page_num = $dbh->prepare("
	SELECT  COUNT(*) id
	FROM posts
     ");
    $page_num->execute();
    $page_num = $page_num->fetchColumn();
    //ページネーションの数を取得する
    $pagination = ceil($page_num / 10);
?>



<?php
    for ($x=1; $x <= $pagination ; $x++) { ?>
	<a href="?page=<?php echo $x ?>"><?php echo $x; ?></a>
<?php }
 
  print "$APPFOOTER";
 
?>
<p><a href="DBphpmenu.php">データベースメニューへ戻る</a></p>

</body>
</html> 

 ネットで見つけたコードそのままです。自分が今挑戦していて、半分挫折ですが、mysqliを使ったものですので、違うのが残念です。ほぼ最後の部分で、出力があります。でもここの部分がどうやって実行できているんでしょうか?なんか?リスト全部出力するんではないんですか?urlに?page=2とか書くと、2ページ目を出力する。そういうもんなんでしょうか?

またまたネット情報ですが、<FORM></FORM>でキーボードから入力を足してみました。するとurlのpageと連動して動きました。後はクリックと連動できれば、かなりいいかも。

 「PHP5.0とMySQL5.0で構築する最速Webシステム」は古いせいもあるかもしれませんが、難しい。一度目は全データを読み込みます。件数を調べないといけないので。一ページの表示できる件数を決めれば、何ページ必要か分かります。何ページ目か指定していない一番最初は一ページ目を表示ます。次から出来ないところですが、実行しているphpファイル(自分自身)に対して、どうやら表示すべきpageと全体の件数を教えないといけないようなんです。

 上の例では、ネットそのまま出できましたが、「ネタ本」では未だできません。((+_+))

inserted by FC2 system