2009年11月4日水曜日

メールフォームのチェックボックス(PHP編)

僕はプログラマーではないのですが、プログラム言語には興味があります。
優秀なプログラマーの人達と話す度に、段々面白そうだなと思えてきました。
なので休日にはギターの練習、そしてミントティーを片手に分厚いPHPの本を読んだりするのですが、熱中するとついこぼしそうになります(笑)。

先日、phpでメールフォームを作成したのですが、一つ非常に悩んだところがありました。
俗に言う複数選択チェックボックスという奴です。(下の様な奴です)


(´・ω・`)つ

(・ε・` )

( ゚Д゚)y─┛~~




これを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']);

?>

同じ問題でお困りの方はお試し下さい。