PHPでフォームのチェックボックスの値を配列で受け取る

フォームのcheckboxで複数選択された状態を、PHP側でどうやって受け取るのか知らなくて調べたら、配列っぽい名前を付ければ良いらしい。

PHPで書くと

HTML側でnameのところで末尾に [] を付けて配列っぽく書けば、

<input type="checkbox" name="foo[]" value="hoge" />hoge<br />
<input type="checkbox" name="foo[]" value="fuga" />fuga<br />
<input type="checkbox" name="foo[]" value="piyo" />piyo<br />

PHP側で配列で受け取れた。

<?php
$foo = $_post['foo'];
var_dump($foo);
array(3) {
  [0]=>
  string(4) "hoge"
  [1]=>
  string(4) "fuga"
  [2]=>
  string(4) "piyo"
}

あやうく知らずに無駄なコードを書いちゃうところだった。for文とか回して。

崖っぷちWEBデザイナーブログ | PHP checkboxの受け渡し

Ruby(Sinatra)で書くと

フレームワークを使わずに、素のRubyでWebアプリを書いたことがないからわからない。最近ハマってるSinatraで調べてみたらこんな感じ?言語とフレームワークの対比だとちょっとズルイけど。あれ、Sinatraでもやっぱり配列っぽい名前を付けるんだ。もしかして、Webアプリ全般の常識だったり…?

require 'rubygems'
require 'sinatra'
require 'slim'
get '/' do
  slim :index
end
post '/' do
  params[:foo]
end
__END__
@@ index
! doctype html
html
  body
    form action='/' method='post'
      input type='checkbox' name='foo[]' value='hoge'
      input type='checkbox' name='foo[]' value='fuga'
      input type='checkbox' name='foo[]' value='piyo'
      input type='submit'

調べてみると、Railsでも同じ書き方をするみたい。

rails check_boxで複数選択 - プログラマ 福重 伸太朗 ~基本へ帰ろう~

でも、Pythonは違うみたい。デフォルトで配列っぽいのに入れてくれるみたい。

フォームのデータを取得する at wonder on server side

必ずしもこういう命名にすれば配列で受け取れる、というわけでは無いみたい。


はじめてのSinatra - どっかのBlogの前置きのような