PHP+MySQLでチェックボックスの値を保存する方法(個別テーブル方式)

サイトを制作する時に、チェックボックスが大量にあるとウンザリって人は結構いるとおもう。
自分はフォームが一つ増えただけでこの世の終わりってくらいめんどくさい気持ちになるけど。
さて、そのチェックボックスのデータの格納方法でよく悩む。

チェックボックスが30個のグループが4つとかある場合に、
ck_a1、ck_a2、ck_a3….ck_a30
ck_b1、ck_b2、ck_b3….ck_b30
って感じで項目の数だけカラムを用意するっていう力技も硬派っぽくて魅力的ではあるんだけど、後々色々大変な事になりそうなので・・・
ビット演算を利用する方法と、チェックボックスのグループ毎にテーブルを用意する方法のメモ。

チェックボックスのグループ毎にテーブルを作成する方法

チェックボックスの項目グループ毎にテーブルを作成し、選択された項目のみ、valueをそのまま登録。
更新時は一旦DELETEして、INSERT。

ユーザ毎にチェックボックスの値を管理する必要がある場合は、

ユーザID 項目名 更新日時

って感じでテーブル作ればいいかな。

具体的には
テーブル作成

CREATE TABLE check_table(
userid         VARCHAR(10),
ckval          VARCHAR(50),
ckdatetime  DATETIME
)

更新時
まず、DELETEして

DELETE FROM check_table WHERE userid=?

次にINSERT

INSERT INTO check_table SET  userid=? ckval=? ckdatetime=now()

呼び出す時は

SELECT * FROM check_table WHERE userid=?

無駄の多いやり方に見えるが(実際多いんだけど)、更新する度にDELETEするんで、項目の順番が変わろうと、内容が変わろうと、個数が変わろうと対応しやすくて結構好きかもしれない。
更新日時のカラムをあえて作っているのは、データ項目や、項目が大幅に変更入った場合に、ユーザが更新しない限り前のデータを保持するので、それがまずい場合に日付をキーに削除したり変更したりする用。

てか、こんな投げやりなやり方で良いのかと思うけど、手軽だから使ってる。

最後に、順序が逆なきがするけど・・・

チェックボックスの値を配列でPOSTする方法

チェックボックスを扱う場合に、チェックボックス一つ一つに個別の名前を付けてあげるのは、フォームを記述するのも、それを処理するのも面倒なので配列で受け取る方法。
フォームタグで

<input type="checkbox" name="test[]" value="あ">
<input type="checkbox" name="test[]" value="い">
<input type="checkbox" name="test[]" value="う">

と、する事で

array
0 => string 'あ' (length=3)
1 => string 'い' (length=3)
2 => string 'う' (length=3)

として渡される。

2010年05月04日  タグ:,

Leave a Reply