優秀なプログラマーの人達と話す度に、段々面白そうだなと思えてきました。
なので休日にはギターの練習、そしてミントティーを片手に分厚いPHPの本を読んだりするのですが、熱中するとついこぼしそうになります(笑)。
先日、phpでメールフォームを作成したのですが、一つ非常に悩んだところがありました。
俗に言う複数選択チェックボックスという奴です。(下の様な奴です)
これをHTMLで書くと下記の様になります。
<input name="hoge" type="checkbox" value="1" />(´・ω・`)つ
<input name="hoge" type="checkbox" value="2" />(・ε・` )
<input name="hoge" type="checkbox" value="3" />( ゚Д゚)y─┛~~
phpで受ける時は下記の様な感じです。
<?php
//変数hogeにチェックボックスの値(value)を代入します。
$hoge = $_POST['hoge'];
?>
しかし、この状態ではHTML部分でinputタグのname部分が3つとも「hoge」であるため、最後のチェックボックスの値しか取得できません。
ここで少し悩み、様々なサイトを見て配列を使えば良いという事が解りました。
nameの「hoge」の後に[]を付けるだけです。 これで配列として送信されます。
<input name="hoge[]" type="checkbox" value="1" />(´・ω・`)つ <input name="hoge[]" type="checkbox" value="2" />(・ε・` ) <input name="hoge[]" type="checkbox" value="3" />( ゚Д゚)y─┛~~
phpでの受け方に変化はありません。
これで複数チェックの値を表示する事に成功しました。
<?php //変数hogeにチェックボックスの値(value)を代入します。 $hoge = $_POST['hoge']; //配列を取り出し表示します。 foreach($hoge as $fuga){ print("$fuga".""); ?>
あとはメールで送るだけですが、そのまま送ってみたら、受信メールには「Array」としか表示されません。
どうやら配列のまま送ることはできない様です。
配列から一つ一つ値を取り出し、変数に入れていけば良いと思ったのですが、選択肢が多いときに困るし、冗長なコードになるし、ものすごい手間もかかります。
そんな時に下記URLのページを見て、自分の鉄頭の固さに愕然としました。
http://nyx.pu1.net/function/strings/implode.html
implode関数といって配列を文字列として連結する関数なのですが、無事解決できました。
<?php //配列を文字列に結合して変数に入れる $hoge = implode("&", $_POST['hoge']); ?>
同じ問題でお困りの方はお試し下さい。