ダウンロードする件数を指定する
前回はひと言掲示板の管理ページに、投稿データをCSVファイルでダウンロードする機能を実装しました。
今回はダウンロードする件数を選べる機能を追加していきます。
「ひと言掲示板を作る」の概要については「ひと言掲示板を作る」をご覧ください。
デモはこちら
前回までに作成したコードはこちら:Github
ダウンロード件数を指定するフォームを設置する
まずは管理ページの「admin.php」に、ダウンロードする件数を指定するためのプルダウンメニューを設置しましょう。
以下の赤字のコードを追記してください。
admin.php
---- 省略 ----
<?php if( !empty($_SESSION['admin_login']) && $_SESSION['admin_login'] === true ): ?>
<form method="get" action="./download.php">
<select name="limit">
<option value="">全て</option>
<option value="10">10件</option>
<option value="30">30件</option>
</select>
<input type="submit" name="btn_download" value="ダウンロード">
</form>
---- 省略 ----
プルダウンメニューを表示するためのselect要素を設置しました。
件数は「全て」「10件」「30件」から選択できるようになっています。
これで「ダウンロード」ボタンが押されるとname属性に「limit」のついたselect要素も一緒に「download.php」へ送信されるようになりました。
パラメータからデータの取得件数を変更する
続いて、「download.php」がプルダウンメニューで選択された件数を受け取れるようにコードを修正します。
次の赤字のコードを追記していきましょう。
download.php
<?php
---- 省略 ----
// 変数の初期化
$csv_data = null;
$sql = null;
$pdo = null;
$option = null;
$message_array = array();
$limit = null;
session_start();
// 取得件数
if( !empty($_GET['limit']) ) {
if( $_GET['limit'] === "10" ) {
$limit = 10;
} elseif( $_GET['limit'] === "30" ) {
$limit = 30;
}
}
if( !empty($_SESSION['admin_login']) && $_SESSION['admin_login'] === true ) {
---- 省略 ----
変数$limitを追加し、この変数にGETパラメータのlimitが送信されていたら値をセットするように設定しています。
続いて、$limitの値を投稿データを取得するSQLに反映します。
ここで、データ登録のときと同様にプリペアドステートメントを使う形にしていきます。
PDOでデータベースを接続した後にある「// メッセージのデータを取得する」のコードを赤字のコードに置き換えてください。
download.php
<?php
---- 省略 ----
// 変数の初期化
$csv_data = null;
$sql = null;
$pdo = null;
$option = null;
$message_array = array();
$limit = null;
$stmt = null;
session_start();
// 取得件数
if( !empty($_GET['limit']) ) {
if( $_GET['limit'] === "10" ) {
$limit = 10;
} elseif( $_GET['limit'] === "30" ) {
$limit = 30;
}
}
if( !empty($_SESSION['admin_login']) && $_SESSION['admin_login'] === true ) {
// データベースに接続
try {
$option = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_MULTI_STATEMENTS => false
);
$pdo = new PDO('mysql:charset=UTF8;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option);
// メッセージのデータを取得する
if( !empty($limit) ) {
// SQL作成
$stmt = $pdo->prepare("SELECT * FROM message ORDER BY post_date ASC LIMIT :limit");
// 値をセット
$stmt->bindValue( ':limit', $_GET['limit'], PDO::PARAM_INT);
} else {
$stmt = $pdo->prepare("SELECT * FROM message ORDER BY post_date ASC");
}
// SQLクエリの実行
$stmt->execute();
$message_array = $stmt->fetchAll();
// データベースの接続を閉じる
$stmt = null;
$pdo = null;
} catch(PDOException $e) {
// 管理者ページへリダイレクト
header("Location: ./admin.php");
exit;
}
---- 省略 ----
まずはif文でempty関数を使い、$limitにダウンロード件数の値が入っているかを確認しています。
もし値が入っていたらLIMIT句をSQLに指定します。
LIMIT句は名前の通り、データベースから取得してくるデータ件数の最大数を指定することができます。
反対に$limitに値が入っていないときは、投稿データを全て取得します。
ダウンロード件数が指定されているかどうかに関わらず、その後はexecuteメソッドを使ってSQLを実行し、取得した投稿データをfetchAllメソッドで取得して変数$message_arrayに入れています。
前回までは投稿データは全件取得のみだったのでプリペアドステートメントは使いませんでしたが、今回はデータを取得するコードを共通化するために全件取得時でもプリペアドステートメントを使うように変更しています。
ここまでで、ダウンロードする投稿データの件数を指定できるようになりました。
早速ブラウザで管理ページを開いて試してみましょう。
管理ページを開き、ダウンロード件数を指定した上で「ダウンロード」ボタンを押してください。
ダウンロード件数を10件にすると、CSVファイルには10件の投稿データが入っていることを確認できます。
同じように、30件とすると最大30件を取得できるようになっています。
今回はここまでとなります。
次回は投稿データの編集機能を追加していきます。
今回作成したコード:Github