1. 4cres

    No comment

    4cres
Changes in body
Source | HTML | Preview
@@ -1,128 +1,130 @@
#はじめに
これは駄文である。
こんな記事を見るのに時間を使うなら mpyw 氏の「
[$_GET, $_POSTなどを受け取る際の処理](http://qiita.com/mpyw/items/2f9955db1c02eeef43ea)」を見た方が有意義ですよ。
Qiita徘徊者、もしくは、この説明はダメだっぺとご指摘くださる神様のみどうぞ。
#チェックボックスの値はどのように取得するの?
チェックボックスの値は、配列でくるよ。
このようなチェックボックスがあると仮定。
```
<h2>好きな食べものは?</h2>
<form method="post" action="">
<input type="checkbox" name="food[]" value="寿司"> 寿司 
<input type="checkbox" name="food[]" value="天ぷら"> 天ぷら 
<input type="checkbox" name="food[]" value="芸者"> 芸者 
</form>
```
`$_POST['food']`にチェックボックスの値が配列として格納されているから、変数に代入すればいいだけ。
```
<?php
$food = $_POST['food'];
```
既に配列になっているので、for文とか使う必要ないよ。
試しに`$food`を`var_dump($food)`してみると下記のように配列になってるよ。
```
array(3) {
[0]=>
string(6) "寿司"
[1]=>
string(9) "天ぷら"
[2]=>
string(6) "芸者"
}
```
ここではわかりやすくするために、`$_POST['food']`の値をそのまま`$food`という変数にぶち込んでますが、これは絶対ダメ。
私の駄文を見に来る方は、超初心者だと思う(なぜなら私が超初心者だから)ので、あえて説明する。
[MDN](https://developer.mozilla.org/ja/docs/Web/Guide/HTML/Forms/Sending_and_retrieving_form_data)の最後の方に書いてある通り、ユーザーから送られてくるデータは信用してはいけません。
下記の引用にある通り、必ずデータはチェックすること。
> サーバに来るすべてのデータを確認およびサニタイズ(※1)しなければなりません。<ins>いつでもです。例外はありません。</ins>
例外はない。絶対だ。
繰り返す。例外はない。絶対だ。
え?「JQueryで入力チェックしてます(キリッ 」だって・・・
クライアント側で入力チェックしても意味はない。(利便性が向上するという点では意味ある)
必ずサーバー側(PHP)で確認しろ。絶対だ。
※1 サニタイズという用語について神様からコメント頂いたので、そちらも見てね。
#じゃあどうやって確認するの?
チェックの仕方は、最初に紹介した mpyw 氏の「
[$_GET, $_POSTなどを受け取る際の処理](http://qiita.com/mpyw/items/2f9955db1c02eeef43ea)」を見てもらうのが一番。
なぜなら、私は超初心者だから。
言い訳も済んだので、確認の仕方を説明しようと思う。
説明に誤りがあれば、ご指摘お願いします((_ _ (´ω` )ペコ
データを確認するのに`isset`と`is_array`を使おう。
`isset`では未定義またはNULLではないことを確認。
`is_array`では配列かどうか確認。
組み合わせるとこんな感じ。
```
<?php
if (isset($_POST['food']) && is_array($_POST['food'])) {
$food = $_POST['food'];
}
```
未定義またはNULLではなく、配列だった場合に`$food`に`$_POST['food']`を代入してるよ。
これでチェックボックスの値が受け取れたよ。
ただ、配列って`=>`こんな記号使うし難しいんですよ。(おい!覚えろよ)
難しい配列やめて文字列にしよう。
#どうやって文字列にするの?
`implode`を使えばOK。
```
<?php
if (isset($_POST['food']) && is_array($_POST['food'])) {
$food = implode("、", $_POST["food"]);
}
```
これで `、` で区切った文字列になるよ。
`寿司、天ぷら、芸者`のような文字列だよ。
おしまい。
あっ!この記事では確認のところしか説明してないよ。
-> サーバに来るすべてのデータを確認および<ins>サニタイズ</ins>しなければなりません。いつでもです。例外はありません。
+> サーバに来るすべてのデータを確認および<ins>サニタイズ(※1)</ins>しなければなりません。いつでもです。例外はありません。
サニタイズもしましょうね。
サニタイズってなんぞやって方は、調べてね。
おしまい。
+
+※1 サニタイズという用語について神様からコメント頂いたので、そちらも見てね。