読者です 読者をやめる 読者になる 読者になる

初めてのシステムと日記

システムも日記も初めてです。

研修(管理画面作成:データ件数取得と表示)

DBに保存したデータを参照できる管理画面を作成する。

この管理画面にはページング機能を実装する。


■ページングとは
閲覧上の負荷を下げる目的で複数ページに分轄して表示させるナビゲーション。
簡単に言うと、Googleなどで検索した後に出てくる

1 2 3 4 5 ・・・ 次へ

のこと。


■ページング仕様
 ・各ページに全てのデータの件数を表示
 ・1ページの表示件数は5件
 ・ページングの最初のページの場合、次へのリンクのみが存在
 ・前後にページがあるページの場合、前へ、次へ、TOPへのリンクが存在
 ・最後のページの場合、前へ、TOPへのリンクが存在


この仕様を基にphpPEAR::DB、htmlを用いて管理画面を作成する。


■全てのデータの件数を表示

まずは、クエリを送ってデータ件数を取得する。

    // クエリ作成
    $sql = "SELECT * FROM user_info";

    // クエリ送信
    $array =& $db->getAll($sql, DB_FETCHMODE_ASSOC);

    // エラーがあったらエラー表示
    if(DB::isError($query)){
        echo "DBから入力情報を取得できませんでした。";
    }

    // DBに登録件数取得
    $num = count($array);


SELECT * FROM user_info で登録しているデータを全部取得するクエリを作った。


$db->getAll($sql, DB_FETCHMODE_ASSOC) でクエリの結果を全部取得。
DB_FETCHMODE_ASSOC でカラム名をキーとする連想配列が返される。
結果が3つ以上の場合は配列の中に連想配列という形で返ってくる。

array(10) {
  [0]=>
  array(16) {
    ["userid"]=>
    string(2) "10"
    ["lastname"]=>
    string(6) "ほげ"
    ["firstname"]=>
    string(6) "ほげ男"
    ["lastkana"]=>
    string(9) "ホゲ"
    ["firstkana"]=>
    string(9) "ホゲオ"
    ["sex"]=>
    string(3) "man"
    ["zipcode"]=>
    string(8) "111-1111"
    ["prefid"]=>
    string(1) "5"
    ["address"]=>
    string(21) "那覇市"
    ["housenumber"]=>
    string(7) "1-111-1"
    ["email"]=>
    string(15) "hoge@test.co.jp"
    ["hobby"]=>
    string(5) "movie"
    ["hobby_etc"]=>
    string(0) ""
    ["opinion"]=>
    string(18) "よろしくです"
    ["createtime"]=>
    string(19) "2009-06-26 17:35:00"
    ["updatetime"]=>
    string(19) "2009-06-29 16:08:07"
  }
  [1]=>
  array(16) {
  ・
  ・
  ・


count($array) で配列の数を受け取ることで登録件数を得る。


■取り出したデータの表示

データを一覧表形式で表示する。

データの型が配列の要素に連想配列が入っているのでそれに合わせて表示処理する。

    // クエリ作成
    $sql = "SELECT * FROM user_info";

    // クエリ送信
    $array =& $db->getAll($sql, DB_FETCHMODE_ASSOC);

    // エラーがあったらエラー表示
    if(DB::isError($query)){
        echo "DBから入力情報を取得できませんでした。";
    }

    // DBに登録件数取得
    $num = count($array);

  ここまでは前項と一緒======================================================

    <table>
    <?php
        for($i = 0; $i < count($array); $i++){
            echo "<tr>";
                echo "<td>".htmlspecialchars($array[$i]['userid'])."</td>";
                echo "<td>".htmlspecialchars($array[$i]['lastname'])."</td>";
                echo "<td>".htmlspecialchars($array[$i]['firstname'])."</td>";
                echo "<td>".htmlspecialchars($array[$i]['lastkana'])."</td>";
                echo "<td>".htmlspecialchars($array[$i]['firstkana'])."</td>";
                echo "<td>".htmlspecialchars($array[$i]['sex'])."</td>";
                echo "<td>".htmlspecialchars($array[$i]['zipcode'])."</td>";
                echo "<td>".htmlspecialchars($array[$i]['prefid'])."</td>";
                echo "<td>".htmlspecialchars($array[$i]['address'])."</td>";
                echo "<td>".htmlspecialchars($array[$i]['housenumber'])."</td>";
                echo "<td>".htmlspecialchars($array[$i]['email'])."</td>";
                echo "<td>".htmlspecialchars($array[$i]['hobby'])."</td>";
                echo "<td>".htmlspecialchars($array[$i]['hobby_etc'])."</td>";
                echo "<td>".htmlspecialchars($array[$i]['opinion'])."</td>";
                echo "<td>".htmlspecialchars($array[$i]['createtime'])."</td>";
                echo "<td>".htmlspecialchars($array[$i]['updatetime'])."</td>";
            echo "</tr>";
     }
     </table>

$array[0]にDBの1行目のデータが配列で入っている。

ので$array[id][カラム名]で順次データを表示する。