Recent Comments

最近?流行のブログというものを
 [11/20] John555様
 [11/20] John73様
 [11/20] John555様
日記:ママのパソコンが壊れた。
 [11/20] WheepeGen様
 [11/20] WheepeGen様
RBIO:HDD・CPUの温度監視をして扇風機を自動でON/OFFする。
 [10/07] げんき
 [10/03] とおりすがり様
PHP:fsockopen()を使ってSMTPでメール送信
 [04/10] げんき
 [04/09] freeman様
 [04/09] freeman様
PHP:アンケートでハイスコアを得たエントリ一覧を表示する
 [03/31] げんき
 [03/30] YSAK様

Profile

 Vine Linux 3.2で自宅サーバ構築・運営するにあたっての覚え書き。トラブルシューティング・思いつきのPHPスクリプト。愛車CB5 VIGORのDIY。やらの紹介。

中の人

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

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

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

チェックボックス
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アドレス変更 >>>

アンケート

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

トラックバック

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

コメントを投稿