ワークショップ
ひと言掲示板を作る(18)
投稿データをダウンロードする件数を指定する
「ひと言掲示板」の投稿データをダウンロードする機能について、ダウンロードする件数を指定する機能を追加します。
この記事のポイント
- SQLのLIMIT句で取得するデータ件数を指定する
- 投稿データの並び順はORDER BY句で指定する
目次
ダウンロードする件数を指定する
前回はひと言掲示板の管理ページに、投稿データをCSV形式でダウンロードする機能を実装しました。
今回はこの機能にダウンロードする件数を指定する機能を追加していきます。
「ひと言掲示板を作る」の概要については「ひと言掲示板を作る」をご覧ください。
デモはこちら
前回までに作成したコードはこちら:Github
ダウンロード件数を指定するフォームを設置する
まずは管理ページの「admin.php」に、ダウンロードする件数を指定するためのフォームを設置しましょう。
次のようにselect要素を追記してください。
コード例
-- 省略 --
<?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>
-- 省略 --
これで、「ダウンロード」ボタンが押されると「limit」と名前のついたselect要素も一緒に「download.php」へPOST送信されるようになりました。
パラメータからデータの取得件数を変更する
続いて、「download.php」を開いて、件数を指定するパラメータ「limit」を受け取れるように修正していきます。
次の赤字のコードを追記してください。
コード例
-- 省略 --
// 変数の初期化
$csv_data = null;
$sql = null;
$res = 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に反映していきます。
変更する前に、まずは次のコードをコメントアウトしてください。
コード例
-- 省略 --
// 接続エラーの確認
if( !$mysqli->connect_errno ) {
//$sql = "SELECT * FROM message ORDER BY post_date ASC";
$res = $mysqli->query($sql);
if( $res ) {
$message_array = $res->fetch_all(MYSQLI_ASSOC);
}
$mysqli->close();
}
-- 省略 --
続いて、SQLを作成するコードを追記します。
コード例
-- 省略 --
// 接続エラーの確認
if( !$mysqli->connect_errno ) {
if( !empty($limit) ) {
$sql = "SELECT * FROM message ORDER BY post_date ASC LIMIT $limit";
} else {
$sql = "SELECT * FROM message ORDER BY post_date ASC";
}
//$sql = "SELECT * FROM message ORDER BY post_date ASC";
$res = $mysqli->query($sql);
if( $res ) {
$message_array = $res->fetch_all(MYSQLI_ASSOC);
}
$mysqli->close();
}
-- 省略 --
if文ではempty関数で$limitに値が入っているかを確認し、もし値がセットされていたらLIMIT句をSQLに指定します。
LIMIT句は名前の通り、データを取得する件数の最大数を指定することができます。
ここまででデータを取得する件数を指定できるようになります。
早速管理ページを開いて試してみましょう。
管理ページを開き、ダウンロード件数を指定した上で「ダウンロード」ボタンを押してください。

ダウンロード件数を10件にすると、CSVファイルには10件の投稿データが入っていることを確認できます。
同じように、30件とすると最大30件を取得できるようになっています。

なお、今回は投稿データをSQLのORDER BY句に「ASC」を指定して昇順(登録された順)に取得していますが、最近投稿された順に取得したい場合は「DESC」で降順を指定してください。
最後に、先ほどコメントアウトしたSQL文は削除しておいてください。
今回はここまでとなります。
次回は投稿データの編集機能を追加していきます。
今回作成したコード:Github
こちらの記事は役に立ちましたか?
コメントありがとうございます!
運営の参考にさせていただきます。
記事一覧
- ひと言掲示板を作る(1) ひと言掲示板を作る
- ひと言掲示板を作る(2) メッセージの入力フォームを作る
- ひと言掲示板を作る(3) メッセージのデータを受け取る
- ひと言掲示板を作る(4) ファイルにデータを保存する
- ひと言掲示板を作る(5) ファイルからデータを読み込む
- ひと言掲示板を作る(6) 投稿完了メッセージを表示する
- ひと言掲示板を作る(7) 投稿の未入力バリデーションをつける
- ひと言掲示板を作る(8) 投稿されたデータをサニタイズする
- ひと言掲示板を作る(9) 投稿データの保存にデータベースを使う
- ひと言掲示板を作る(10) 掲示板のデータベースとテーブルを作成する
- ひと言掲示板を作る(11) 投稿データをデータベースに登録する
- ひと言掲示板を作る(12) データベースからデータを取得する
- ひと言掲示板を作る(13) コードを整理する
- ひと言掲示板を作る(14) セッションで表示名の入力を省略する
- ひと言掲示板を作る(15) 管理ページを作成する
- ひと言掲示板を作る(16) ログインページを作る
- ひと言掲示板を作る(17) 投稿データをCSV形式でダウンロードする
- ひと言掲示板を作る(18) 投稿データをダウンロードする件数を指定する
- ひと言掲示板を作る(19) 投稿メッセージの編集ページを作る
- ひと言掲示板を作る(20) メッセージを編集する機能を実装する
- ひと言掲示板を作る(21) 投稿メッセージの削除ページを作る
- ひと言掲示板を作る(22) 管理ページにログアウトを実装する
- ひと言掲示板を作る(23) リロードによる多重投稿を防止する
ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。