Profile

名前:げんき
職業:ねじ屋さん
趣味:機械いじり
  買ったものや試したことを日記混じりで書きつづっております。

中の人

なかのひと
Graph 207.10.29
Year:  Month:  Day

<<< PHP:base64_encode()で遊ぶ <<<  ||  >>> named:L.ROOT-SERVERS.NETのIPv4アドレス変更 >>>

PHP:checkboxから送られたデータを配列に格納する

2007年10月29日

チェックボックス
HTMLの入力フォームに、チェックボックスというのがある。
ラジオボタンと違って、複数選択できる奴。

チェックボックスはこれ。
ラジオボタンはこれ。

困りごと
複数選択出来るわけだから、チェックされたものを配列に格納したい。
ところが、nameをすべて同じにして送信すると、$_POSTや$_GET配列からはチェックされた中で一番下にあるものだけしか取得出来ない。

つまり、

<input type="checkbox" name="chk" value="1">1
<input type="checkbox" name="chk" value="2">2
こーゆーのから送信したデータをPHPで取得した場合の$_POST['chk']や$_GET['chk']の中身は、
1と2がチェックされてる場合も、2だけがチェックされてる場合も2になる。

解決方法
これを解決するにはname属性の値のケツに[]を書いてやればいい。

<input type="checkbox" name="chk[]" value="1">1
<input type="checkbox" name="chk[]" value="2">2

こうすることで、$_POST['chk']や$_GET['chk']は配列になり、配列の要素はチェックされたデータのvalue属性の値になる。

検証
以下のようなサンプルスクリプトを書いた。

<?php
echo "<pre>";
var_dump($_POST['check']);
echo "</pre>";

echo <<< EOF
<form action="{$_SERVER['PHP_SELF']}" method="post">
<input type="checkbox" name="check[]" value="1">1<br>
<input type="checkbox" name="check[]" value="2">2<br>
<input type="checkbox" name="check[]" value="3">3<br>
<input type="checkbox" name="check[]" value="4">4<br>
<input type="checkbox" name="check[]" value="5">5<br>
<input type="submit">
</form>
EOF;
?>


これを実行する
期待通りの動作。

<<< PHP:base64_encode()で遊ぶ <<<  ||  >>> named:L.ROOT-SERVERS.NETのIPv4アドレス変更 >>>

アンケート

このページの内容はいかがでしたか?
片手間にポチっと送信してやってください。
役に立った 103
おもしろかった 4
ふつー 5
つまらなかった 4
欲しい情報と違った 14
Score:174

トラックバック

このエントリーのトラックバックURL:
http://www.genkikko.net/mt/mt-tb.cgi/59

コメント (2)

匿名:

XSS危ないですよー

--------------------
echo "

";
foreach ($_POST as $key => $val) {
$_POST[$key] = htmlspecialchars($val, ENT_QUOTES);
}
var_dump($_POST['check']);
echo "
";
--------------------

とすべき。

匿名:

XSS危ないですよー

コメントを投稿