すたらSample

【PHP,MySQL】最も簡単なページング

2010/10/28

このコードの要点

表示したいid番号をURLパラメータとして送る

<a href="page.php?id=<?php echo $row['id'] ?>">
  <?php echo $row['id'] ?>
</a>

index.phpから送られたid番号をDBの検索条件にする

$query = sprintf("SELECT * FROM test_tbl WHERE test_tbl.id = %s", $id);

ソースコード全文

【index.php】
<!doctype html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>トップページ</title>
  </head>
  <body>
  <?php
    //DBから、idのみを取得する
    $connect = mysql_connect('localhost', 'root', '');
    $db = mysql_select_db('test', $connect);
    $query = 'SELECT id, data FROM test_tbl';
    $result = mysql_query($query);
    echo '|';
    while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
      ?>
      <a href="page.php?id=<?php echo $row['id'] ?>">
        <?php echo $row['id'] ?>
      </a>|
      <?php
    }
  ?>
  </body>
</html>
【page.php】
<!doctype html>
<html>
  <?php
    //GETでページ番号を渡されているか?
    if(isset($_GET['id'])){
      //安全対策。SQLようにエスケープ
      $id = mysql_real_escape_string($_GET['id']);
      //$idは数値か?
      if(is_numeric($id)){
  ?>
  <head>
    <meta charset="UTF-8">
    <title>個別ページ : <?php echo $id ?></title>
  </head>
  <body>
  <?php
        //DBから、idに対応したdataを取得する
        $connect = mysql_connect('localhost', 'root', '');
        $db = mysql_select_db('test', $connect);
        $query = sprintf("SELECT * FROM test_tbl WHERE test_tbl.id = %s", $id);
        $result = mysql_query($query);
        while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
          ?>
          <h3><?php echo $row['id'] ?></h3>
          <p><?php echo $row['data'] ?></p>
          <?php
        }
      }
  ?>
    <a href="index.php">トップへ戻る</a>
  </body>
  <?php
    }
  ?>
</html>
【test_tbl.sql】
CREATE TABLE `test_tbl` (
  `id` int(11) NOT NULL,
  `data` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
);

INSERT INTO `test_tbl` (`id`, `data`) VALUES (1, 'a');
INSERT INTO `test_tbl` (`id`, `data`) VALUES (2, 'b');
INSERT INTO `test_tbl` (`id`, `data`) VALUES (3, 'c');
INSERT INTO `test_tbl` (`id`, `data`) VALUES (4, 'd');
INSERT INTO `test_tbl` (`id`, `data`) VALUES (5, 'e');