PHPプログラミング

ワークショップ

ひと言掲示板を作る(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件を取得できるようになっています。

ダウンロードしたCSVファイルの例

なお、今回は投稿データをSQLのORDER BY句に「ASC」を指定して昇順(登録された順)に取得していますが、最近投稿された順に取得したい場合は「DESC」で降順を指定してください。

最後に、先ほどコメントアウトしたSQL文は削除しておいてください。

今回はここまでとなります。
次回は投稿データの編集機能を追加していきます。

今回作成したコード:Github

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

コメントありがとうございます!
運営の参考にさせていただきます。