プロが教える店舗&オフィスのセキュリティ対策術

phpでの複数選択チェックボックスのデータ取得に関して質問です。

制作中のWEBサイトにお問い合わせページを作っています。
その項目のひとつに、件名を選択させるチェックボックスを4つ配置しているのですが、
複数選択した際に、一番最後の値しか取得できないという現象が起こっています。

お問い合わせページ⇒確認ページ⇒メールで送信
という動きなのですが、確認ページでは問題なく複数の値を取得して表示できています。
問題はメールで送信する部分なのですが、なぜかここでは一番最後の値しか取得・表示できていません。

以下にソースを載せます。

---------------------------------------------------------

★HTML側

<p>
<label><input type="checkbox" size="40" name="件名[]" value="資料請求">資料請求 </label>
<label><input type="checkbox" size="40" name="件名[]" value="入試に関するご質問">入試に関するご質問 </label>
<label><input type="checkbox" size="40" name="件名[]" value="本校へのご意見">本校へのご意見 </label>
<label><input type="checkbox" size="40" name="件名[]" value="その他ご質問・ご相談">その他ご質問・ご相談</label>
</p>


★php側(メール配信)

$body="「".$sbj."」からの発信です\n\n";
$body.="-------------------------------------------------\n\n";
foreach($_POST as $key=>$var) {
if(is_array($_POST[$key])==true) {
foreach($_POST[$key] as $key=>$var) {
$key = strtr($key, $string_from, $string_to);
if(get_magic_quotes_gpc()) $var = stripslashes($var);
if($var == "eweb_submit") ;
else $body.="[".$key."] ".$var."\n";
}
} else {
$key = strtr($key, $string_from, $string_to);
if(get_magic_quotes_gpc()) $var = stripslashes($var);
if($var == "eweb_submit") ;
else $body.="[".$key."] ".$var."\n";
}
}

-------------------------------------------------------

ネットから取得したフリーのメールフォームをアレンジしてソースを記述しています。

php初心者なので、説明がわかりづらい部分や、載せるソースが足りないかもしれませんので、
ご指摘ください。よろしくお願いします。

A 回答 (3件)

確認フォームの出力の際に$koumokuに代入されるのは"件名[]"ではなく"件名"になっていると思います。


そのため出力されたinput-hiddenのnameはどれも"件名"になっているのではないでしょうか?
確認フォームとして出力されたpageのソースを覗いてみてください。
配列としてPOSTされるにはお問い合わせページのHTMLのように[]が必要になります。

print("<INPUT type='hidden' name=".$koumoku." value=".$var.">");

print("<INPUT type='hidden' name=".$koumoku."[] value=".$var.">");
のように修正したら(elseの下の方は不要)うまく動いてくれませんかね~?
    • good
    • 0
この回答へのお礼

返信ありがとうございます!
ご指摘通り修正したら、きちんと値が取得できるようになりました!

なるほど、確認フォームのほうで値を渡す際に配列になっていなかったのが
原因だったんですね。

ご丁寧に教えてくれてありがとうございます。
他の返信下さった方々もありがとうございました。

お礼日時:2010/05/27 17:48

「お問い合わせページ⇒確認ページ⇒メールで送信」っていうのはそれぞれ別のPHPファイルに飛ぶんですかね?


なんとなくhiddenで値を渡してるフォームに見えるので、
確認ページを出力している部分のソースがあればわかるかもしれません。

フリーのメールフォームの改変ならその配布元を明記するのが一番手っ取り早いですが(笑

この回答への補足

返信ありがとうございます!

メールフォームは「イーウェブ」というところからダウンロードしました。

確認ページとメール送信の部分は同じphpファイルにあって、
お問い合わせページのHTMLからとびます。

確認ページを出力している部分のソースを下記に載せます。
確かに、hiddenという部分があります。ここで値の受け渡しをしているのでしょうか?

--------------------------------------------------

<?php
foreach($_POST as $key=>$var) {
$koumoku =$key ; //取得した項目名を変数に代入しておく
if(is_array($_POST[$key])==true) {
foreach($_POST[$key] as $key=>$var) {
$key = strtr($key, $string_from, $string_to);
if (get_magic_quotes_gpc()) $var = stripslashes($var);
$var = htmlspecialchars($var);
$key = htmlspecialchars($key);
print("<tr bgcolor=#ffffff><td bgcolor=#eeeeee width='150' style='padding:5px;'>".$koumoku."</td><td style='padding:5px;'>".$var);
print("<INPUT type='hidden' name=".$koumoku." value=".$var.">");
print("</td></tr>\n");
}
} else {
$key = strtr($key, $string_from, $string_to);
if (get_magic_quotes_gpc()) $var = stripslashes($var);
$var = htmlspecialchars($var);
$key = htmlspecialchars($key);
print("<tr bgcolor=#ffffff><td bgcolor=#eeeeee width='150' style='padding:5px;'>".$key."</td><td style='padding:5px;'>".$var);
print("<INPUT type='hidden' name=".$koumoku." value=".$var.">");
print("</td></tr>\n");
}
}
?>

補足日時:2010/05/27 15:12
    • good
    • 0
この回答へのお礼

返信ありがとうございました。
皆様のおかげで解決致しました。
今後も何かあった際はよろしくお願いします。

お礼日時:2010/05/27 17:51

突っ込みたい所がいくつかありますがそれは置いておいて…



お問い合わせページ(1)⇒確認ページ(2)⇒メールで送信(3)

(1)の内容を(2)で取得出来ているが、(2)の内容を(3)で取得出来てないとは
ちゃんと渡せてないのではないでしょうか?

この回答への補足

素早いお返事、ありがとうございます!

本当に初心者のため、申し訳ないのですが、値を渡すという処理がよくわかりません。。。

確認ページでも

foreach($_POST as $key=>$var) {
if(is_array($_POST[$key])==true) {

というような記述をしていて、自分の中では$_POSTによって、HTMLのデータを取得している
(値を渡している?)というつもりなんですが、何か値を渡すための処理があるのでしょうか?

すみませんが、よろしくお願いします。

補足日時:2010/05/27 10:36
    • good
    • 0
この回答へのお礼

返信ありがとうございました。
皆様のおかげで解決致しました。
今後も何かあった際はよろしくお願いします。

お礼日時:2010/05/27 17:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!