• ベストアンサー

チェックボックスが複数選択できない

アンケートフォームを作成していますが、チェックボックスで複数項目を選択しても最後のひとつしか表示されずに困っています。 配列での処理にすれば良いという事なので自分なりにやってみたのですが、今度は「Array」と表示されてしまい、具体的にどうしたらいいのか分かりません。 ※html側 <input type="checkbox" name="cat[]" value="abc"> <input type="checkbox" name="cat[]" value="def"> ※php側 <FORM action="<? echo $script; ?>" method="POST"> <? echo $err_message; ?> <?php foreach($_POST as $key=>$var) { $key = strtr($key, $string_from, $string_to); if(get_magic_quotes_gpc()) $var = stripslashes($var); $var = htmlspecialchars($var); print("項目:".$key."選択したのは".$var); ?> <INPUT type="hidden" name="<?= $key ?>" value="<?= $var ?>"> <?php print("です。\n"); } ?> となっています。 また、選択内容をメール送信するようになっており、 foreach($_POST as $key=>$var) { $key = strtr($key, $string_from, $string_to); if(get_magic_quotes_gpc()) $var = stripslashes($var); if($var == "eweb_submit") ; else $rebody.="[".$key."] ".$var."\n"; です。 複数項目をまとめて処理しているようで、どうしたらいいのか分かりません。ちなみに、http://www.eweb-design.com/のフリーのメールフォームを使っています。

  • PHP
  • 回答数3
  • ありがとう数11

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

こんばんわ $_POSTをforeachで展開していますが、チェックボックスの変数名は$_POST["cat"]じゃぁ無いですか? print_r($_POST);とすれば原因がつかみやすいと思います。

mimimi38
質問者

補足

すみません、説明不足でした。 アンケートフォームを作成していて、チェックボックスをcatにしていますが、他にも複数項目あります。他の項目は問題ないのですが、チェックボックスにした項目は、複数選択しても一つしか表示されないので困っております。

その他の回答 (2)

  • stanaka
  • ベストアンサー率44% (13/29)
回答No.3

下の間違い var_dump( $a ) → var_dump( is_array( $a ) ); var_dump( $_POST[ 'cat' ] ) → var_dump( is_array( $_POST[ 'cat' ] ) );  すみません.

  • stanaka
  • ベストアンサー率44% (13/29)
回答No.2

taketan_mydns_jpさんの説明をちゃんと読みましたか?  print_r($_POST)すればすぐわかるはずなのですが,あなたが自分でおっしゃったように,チェックボックスの変数名をcatとして,そのcatを配列として扱うようにプログラミングしたわけです.  ということは, $_POST  という変数はもとより配列ですが,その配列のメンバである, $_POST[ 'cat' ]  も配列になるということです.つまり, foreach( $_POST[ 'cat' ] as $catk => $catv ){ }  というふうにループを回せば,その配列の中身を取り出すことができます.  ただし,あなたのプログラミングのままでは,catチェックボックス群に一つもチェックを入れなかった場合は$_POST['cat']は配列どころか値が入りません.そのあたりをよく考えてください.  ちなみにある値が配列かどうかは is_array()という関数で判断できます. $a = array(); var_dump( $a ); 結果: bool(true)  ということは,チェックを入れたときは var_dump( $_POST[ 'cat' ] );  の結果は・・・・・?.

mimimi38
質問者

お礼

知識不足ですみませんでした。 >catチェックボックス群に一つもチェックを入れなかった場合は$_POST['cat']は配列どころか値が入りません.そのあたりをよく考えてください. がいまいち分かっていなかったみたいです。 教えていただいたのをヒントにやってみたところ、希望通りのができました。 ありがとうございました。

関連するQ&A

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

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

    • ベストアンサー
    • PHP
  • メールフォームについて

    ​いつもお世話になってます。 http://php.eweb-design.com/1301_mail.html​ のアンケートフォームのサンプル(sample1)で勉強しています。 確認画面で表示した内容を最後の送信完了画面でも再度表示しているのですが最後の行にeweb_sub{ :eweb_submitと表示されるのですがこの表示を消したいのですが、どのようにすればよいのでしょうか?またこのソースで確認画面以降にも確認した内容を表示することはできるのでしょうか? <?php header("Content-Type:text/html;charset=Shift_JIS"); ?> <?php 省略 <?php htmlFooter(); exit(0); } } if($chmail == 0 || $sendm == 1) { mail($to,$sbj,$body,$header); if($remail == 1) { mail($reto,$resbj,$rebody,$reheader); } } else { htmlHeader(); ?> <FORM action="<? echo $script; ?>" method="POST"> <? echo $err_message; ?> <TABLE width="400" bgcolor="#cccccc" cellspacing="1" cellpadding="3"> <?php foreach($_POST as $key=>$var) { $key = strtr($key, $string_from, $string_to); if(get_magic_quotes_gpc()) $var = stripslashes($var); $var = htmlspecialchars($var); print("<TR bgcolor=#ffffff><TD bgcolor=#eeeeee>".$key."</TD><TD>".$var); ?> <INPUT type="hidden" name="<?= $key ?>" value="<?= $var ?>"> <?php print("</TD></TR>\n"); } ?> </TABLE> <BR> <INPUT type="hidden" name="eweb_set" value="eweb_submit"> <INPUT type="submit" value="送信する"> <INPUT type="button" value="前画面に戻る" onClick="history.back()"> </FORM> <FORM action="<? echo $script; ?>" method="POST"> <? echo $err_message; ?> <TABLE width="400" bgcolor="#cccccc" cellspacing="1" cellpadding="3"> <?php foreach($_POST as $key=>$var) { $key = strtr($key, $string_from, $string_to); if(get_magic_quotes_gpc()) $var = stripslashes($var); $var = htmlspecialchars($var); print("<TR bgcolor=#ffffff><TD bgcolor=#eeeeee>".$key."</TD><TD>".$var); ?> <INPUT type="hidden" name="<?= $key ?>" value="<?= $var ?>"> <?php print("</TD></TR>\n"); } ?> </TABLE> <BR> <INPUT type="hidden" name="eweb_set" value="eweb_submit"> <INPUT type="submit" value="送信する"> <INPUT type="button" value="前画面に戻る" onClick="history.back()"> </FORM> <!--- 終了 ---> <?php htmlFooter(); } if(($jpage == 0 && $sendm == 1) || ($jpage == 0 && ($chmail == 0 && $sendm == 0))) { htmlHeader(); ?> <!--- 送信終了画面のレイアウトの編集 --- 開始 -------------> <font size="16px">送信完了</font><br> ありがとうございました。<BR> 以下の内容で送信は無事に終了しました。<BR><BR> --------------追加項目-------------------------------- <TABLE width="400" bgcolor="#cccccc" cellspacing="1" cellpadding="3"> <?php foreach($_POST as $key=>$var) { $key = strtr($key, $string_from, $string_to); if(get_magic_quotes_gpc()) $var = stripslashes($var); $var = htmlspecialchars($var); print("<TR bgcolor=#ffffff><TD bgcolor=#eeeeee>".$key."</TD><TD>".$var); ?> <?php print("</TD></TR>\n"); } ?> </TABLE> 以下省略

    • 締切済み
    • PHP
  • チェックボックスのうちひとつでもチェックがなければエラー

    チェックボックスが複数個(5~6個)あります。 hajime.html <form action="niban.php" method="post"> <input type="checkbox" value="A" name="CHK1" /> <input type="checkbox" value="B" name="CHK2" /> <input type="checkbox" value="C" name="CHK3" /> <input type="checkbox" value="D" name="CHK4" /> <input type="checkbox" value="E" name="CHK5" /> <input type="checkbox" value="F" name="CHK6" /> </form> ●このA~Fのうち、ひとつでもチェックされていなければ チェックしてください。とエラー表示させたいのですが… ●次のページではこのようにデータを受取していします。 niban.php// フォームの値取得は下記のように行っています。 if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k => $v){ if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $v = addslashes($v); $$k = $v; } } else { exit(); } $ErrFlg = 0;(エラーの時は$ErrFlgを1にします) ●エラー構文のサンプル↓ if ($name == "" ) { echo "<p>名前を入力してください。"; $ErrFlg = 1; } どうぞお力をおかしください

    • 締切済み
    • PHP
  • PHPのフォームの複数選択で。。。

    すいません当方PHPかなりの初心者で。。。。 入力→確認→送信のような流れのフォームを作成しているのですが。。。 メールフォームで複数選択が可能な場合フォームの受け取り側のPHPはどのように記載すればいいのでしょうか? □A □B □C □D □E □F ↑のようなフォームを作りチェックされたものを 【フォーム側】 <input type="checkbox" value="A" name="is[]">A <input type="checkbox" value="B" name="is[]">B <input type="checkbox" value="C" name="is[]">C <input type="checkbox" value="D" name="is[]">D <input type="checkbox" value="E" name="is[]">E <input type="checkbox" value="F" name="is[]">F 【確認画面のPHP】 // フォームの値を取得します。 if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k => $v){ // 「magic_quotes_gpc = On」のときはエスケープ解除 if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $$k = $v; } } else { exit(); } //中略// // 確認画面表示箇所 <? $is_value = $_POST["is"]; foreach($is_value as $v){ echo $v ." <br> "; } ?> //中略// // 送信PHPへの受け渡し場所 <input type="hidden" name="service" value="<?= $is_value ?>"> ↑この部分の記載の仕方がわかりません。。。 確認画面で表示させたものを関数に格納して送信PHPの方に受け渡ししたいのですが。。。 どのようにどのあたりに記載したらいいのでしょうか? わかりにくい質問かもしれません。。。 なにとぞなにかお気づきの点がありましたらご教授ねがえると助かります。。。 よろしくお願いします。

    • 締切済み
    • PHP
  • メールフォームからcsvファイルに書きこむ方法を教えてください

    メールフォームを作成し、項目をcsvファイルへ書き込みたいのですが <?php htmlFooter(); exit(0); } } //--- メールのレイアウトの編集 --- 開始 -------------------> $body="「".$sbj."」からの情報です\n\n"; $body.="-------------------------------------------------\n\n"; foreach($_POST 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"; } $body.="\n-------------------------------------------------\n\n"; $body.="送信日時:".date( "Y/m/d (D) H:i:s", time() )."\n"; //$body.="ホスト名:".getHostByAddr(getenv('REMOTE_ADDR'))."\n\n"; //--- 終了 ---> if($remail == 1) { //--- 差出人への送信確認メールのレイアウトの編集 --- 開始 -> $rebody="ありがとうございました。\n"; $rebody.="以下の内容が送信されました。\n\n"; $rebody.="-------------------------------------------------\n\n"; foreach($_POST as $key=>$var) { $key = strtr($key, $string_from, $string_to); if(get_magic_quotes_gpc()) $var = stripslashes($var); if($var == "eweb_submit") ; else $rebody.="[".$key."] ".$var."\n"; } $rebody.="\n-------------------------------------------------\n\n"; $rebody.="送信日時:".date( "Y/m/d (D) H:i:s", time() )."\n"; $reto = $_POST['email']; $rebody=mb_convert_encoding($rebody,"JIS","SHIFT_JIS"); $resbj="=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($resbj,"JIS","SHIFT_JIS"))."?="; $reheader="From: $to\nReply-To: ".$to."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion(); //--- 終了 ---> } $body=mb_convert_encoding($body,"JIS","SHIFT_JIS"); $sbj="=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($sbj,"JIS","SHIFT_JIS"))."?="; if($from_add == 1) { $from = $_POST['email']; $header="From: $from\nReply-To: ".$_POST['email']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion(); } else { $header="Reply-To: ".$_POST['email']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion(); } if($chmail == 0 || $sendm == 1) { mail($to,$sbj,$body,$header); if($remail == 1) { mail($reto,$resbj,$rebody,$reheader); } } else { htmlHeader(); ?> <!--- 送信確認画面のレイアウトの編集 --- 開始 -------------> 以下の内容で間違いがなければ、「送信する」ボタンを押してください。<BR><BR> <FORM action="<? echo $script; ?>" method="POST"> <? echo $err_message; ?> <TABLE width="400" bgcolor="#cccccc" cellspacing="1" cellpadding="3"> <?php foreach($_POST as $key=>$var) { $key = strtr($key, $string_from, $string_to); if(get_magic_quotes_gpc()) $var = stripslashes($var); $var = htmlspecialchars($var); print("<TR bgcolor=#ffffff><TD bgcolor=#eeeeee>".$key."</TD><TD>".$var); ?> <INPUT type="hidden" name="<?= $key ?>" value="<?= $var ?>"> <?php print("</TD></TR>\n"); } ?> </TABLE> <BR> <INPUT type="hidden" name="eweb_set" value="eweb_submit"> <INPUT type="submit" value="送信する"> <INPUT type="button" value="前画面に戻る" onClick="history.back()"> </FORM> <!--- 終了 --->

    • 締切済み
    • PHP
  • メールフォームについて

    http://php.eweb-design.com/1301_mail.html のアンケートフォームのサンプル(sample1)で勉強していますが、分らないところがあるので教えてください。以下はソースの抜粋です。  未入力項目のチェックにおいて、最初にtextの未入力(名前,年齢,email)をチェックし、次にradioとcheckbox(性別,規約)の未選択をチェックしているようなのですが、この二つのステップがよく理解できません。具体的には■で示した行です。特にif($var == "eweb_submit") ;が何を意味するのか?なお、"eweb_submit"は送信確認画面のinputタグのvalue属性です。  初心者のため、うまく説明できませんがよろしくお願いします。 <?php header("Content-Type:text/html;charset=Shift_JIS"); ?> <?php 省略 // 必須入力項目を設定する(する=1, しない=0) $esse = 1; // 必須入力項目(入力フォームで指定したname) $eles = array('名前','年齢','性別','email','規約'); $sendm = 0; foreach($_POST as $key=>$var) { if($var == "eweb_submit") $sendm = 1; } // 文字の置き換え $string_from = "\"; $string_to = "ー"; // 未入力項目のチェック if($esse == 1) { $flag = 0; $length = count($eles) - 1; foreach($_POST as $key=>$var) { $key = strtr($key, $string_from, $string_to); if($var == "eweb_submit") ;■ else { for($i=0; $i<=$length; $i++) { if($key == $eles[$i] && empty($var)) {■ $errm .= "<FONT color=#ff0000>「".$key."」は必須入力項目です。</FONT><BR>\n"; $flag = 1; } } } } foreach($_POST as $key=>$var) { $key = strtr($key, $string_from, $string_to); for($i=0; $i<=$length; $i++) { if($key == $eles[$i]) {■ $eles[$i] = "eweb_ok";■ } } } for($i=0; $i<=$length; $i++) { if($eles[$i] != "eweb_ok") {■ $errm .= "<FONT color=#ff0000>「".$eles[$i]."」が未選択です。</FONT><BR>\n"; $eles[$i] = "eweb_ok"; $flag = 1; } } if($flag == 1){ htmlHeader(); ?> <!--- 未入力があった時の画面 --- 開始 ---------------------> 入力エラー<BR><BR> <?php echo $errm; ?> <BR><BR> <INPUT type="button" value="前画面に戻る" onClick="history.back()"> <!--- 終了 ---> <?php htmlFooter(); exit(0); } } 省略 $body=mb_convert_encoding($body,"JIS","SHIFT_JIS"); $sbj="=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($sbj,"JIS","SHIFT_JIS"))."?="; if($from_add == 1) { $from = $_POST['email']; $header="From: $from\nReply-To: ".$_POST['email']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion(); } else { $header="Reply-To: ".$_POST['email']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion(); } if($chmail == 0 || $sendm == 1) { mail($to,$sbj,$body,$header); if($remail == 1) { mail($reto,$resbj,$rebody,$reheader); } } else { htmlHeader(); ?> <!--- 送信確認画面のレイアウトの編集 --- 開始 -------------> 以下の内容で間違いがなければ、「送信する」ボタンを押してください。<BR><BR> <FORM action="<? echo $script; ?>" method="POST"> <? echo $err_message; ?> <TABLE width="400" bgcolor="#cccccc" cellspacing="1" cellpadding="3"> <?php foreach($_POST as $key=>$var) { $key = strtr($key, $string_from, $string_to); if(get_magic_quotes_gpc()) $var = stripslashes($var); $var = htmlspecialchars($var); print("<TR bgcolor=#ffffff><TD bgcolor=#eeeeee>".$key."</TD><TD>".$var); ?> <INPUT type="hidden" name="<?= $key ?>" value="<?= $var ?>"> <?php print("</TD></TR>\n"); } ?> </TABLE> <BR> <INPUT type="hidden" name="eweb_set" value="eweb_submit"> <INPUT type="submit" value="送信する"> <INPUT type="button" value="前画面に戻る" onClick="history.back()"> </FORM> 以下省略

    • ベストアンサー
    • PHP
  • チェックボックスで選択したものがINSERTできません。

    <input type="checkbox" name="color[]" value="1" checked>赤 <input type="checkbox" name="color[]" value="2" >青 <input type="checkbox" name="color[]" value="3" >黄 <input type="checkbox" name="color[]" value="4" >緑 をPOSTで送ってPHPで $color_arr=Array(1=>"赤",2=>"青",3=>"黄",4=>"緑"); $color=$_POST["color"]; $str_color=""; foreach ($color as $key => $value){ if($str_color!="") $str_color.=","; $str_color.=$color_arr[$value]; } $html = str_replace('_%color%_', $str_color, $html); として追加内容確認画面で <input type="hidden" name="color" value="_%color%_"> _%color%_ として、チェックしたものを 赤,黄のように表示させて「OK」ボタンを押して PHPでINSERTするんですが、 mysql_query('insert into table1(name,color) values("'.$_POST['name'].'","'.$_POST['color'].'")'); としても空白のままです。nameはちゃんと入ってます。 テーブルは name varchar(50) color char(1) です。

    • ベストアンサー
    • PHP
  • 複数あるチェックボックスの入力チェックするには?

    チェックボックスの入力チェックスクリプトを探しており、下記のようなスクリプトをネット検索で見つけました。 <!-- <script type="text/javascript"> function chNull(msg,obj) { if(!obj) return true; if((obj.type || obj[0].type) == 'checkbox'){ var flag = 0; if(obj.length){ for(var i=0; i<obj.length; i++) { if(obj[i].checked) flag = 1; } } else { if(obj.checked) flag = 1; } if(flag == 0) { alert(msg + 'を選択してください。'); return false; } } return true; } --> </script> <form method="POST" action="■.cgi" onSubmit="return chNull('チェックボックス',a);"> <input type="checkbox" name="a" value="A1" />A1 <input type="checkbox" name="a" value="A2" />A2 </form> 同じnameのチェックボックス群がひとつしかないときはこれで問題ないのですが、 下記のようにnameが複数ある場合にはこのスクリプトのどの部分を変えればよいのでしょうか? <input type="checkbox" name="a" value="A1" />A1 <input type="checkbox" name="a" value="A2" />A2 <input type="checkbox" name="b" value="B1" />B1 <input type="checkbox" name="b" value="B2" />B2 <input type="checkbox" name="c" value="C1" />C1 <input type="checkbox" name="c" value="C2" />C2 できればこのスクリプトをベースとして使用したいと思っています。どなたかお分かりの方がいらっしゃいましたらお教え下さいませ。 よろしくお願い致します。

  • チェックボックスの初期選択と選択保持

    複数のチェックボックスのうちどれかを初期選択させ、ボタン押下後は選択保持をさせたいです。 片方のみならできるのですが、どなたかご教授いただけるとうれしいです。 現在のソースはこんな感じになっていて選択したものの保持はできるのですが、初期選択ができていません。よろしくおねがいします。 <html> <body> <form name="form" method="post"> <?php test1() ?> test1 <?php test2() ?> test2 <?php test3() ?> test3<br><br> <input type="submit" name="button" value="button"> </form> <?php function test1(){ if ($_POST['test1']){ echo "<input type=\"checkbox\" name=\"test1\" checked>"; }else{ echo "<input type=\"checkbox\" name=\"test1\">"; } } function test2(){ if ($_POST['test2']){ echo "<input type=\"checkbox\" name=\"test2\" checked>"; }else{ echo "<input type=\"checkbox\" name=\"test2\">"; } } function test3(){ if ($_POST['test3']){ echo "<input type=\"checkbox\" name=\"test3\" checked>"; }else{ echo "<input type=\"checkbox\" name=\"test3\">"; } } ?> </body> </html>

    • 締切済み
    • PHP
  • チェックボックスで複数選択する方法教えて下さい

    いつもありがとうございます。 00.PHPというファイルにチェックボックスを配置して複数選択し 同じ00.phpにPOSTで情報送り、表示させたいのですが、 下記の記述では「Array」としか表示されません。 検索結果を最終的にはMYSQLにデータ登録をしたいのですが うまくいきません。御指導お願いします。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>無題ドキュメント</title> </head> <body> <? echo $_POST["working_days"] ?> <form action="00.php" method="post">  <label>  <input type="checkbox" name="working_days[1]" value="1"> ド短期1日~OK <input type="checkbox" name="working_days[2]" value="2"> 週2、3日程度  <input type="checkbox" name="working_days[3]" value="3"> 月~金曜日 <input type="checkbox" name="working_days[4]" value="4"> 土日祝日のみ <input type="checkbox" name="working_days[5]" value="5"> 毎日オールフリー</label>      <input type="submit" name="Submit" value="登録"> </form> </body> </html>

    • ベストアンサー
    • PHP