PHPフォーム画面のチェックボックス値の引継ぎがうまくいかない

このQ&Aのポイント
  • PHPでフォーム画面を作成しています。そのフォームには配列でチェックボックスがありますが、戻る画面に戻ると値が引き継げていません。
  • hiddenで値を引き継ぎ、hiddenの値とDBでselectした値を比較してchecked属性を追加していますが、うまく動作しません。
  • ソースコードを確認しましたが、foreachループでチェックボックスを表示している部分に問題がある可能性があります。
回答を見る
  • ベストアンサー

PHPでフォーム画面を作成しています。

PHPでフォーム画面を作成しています。 そのフォームには配列でチェックボックスがあるのですがそのチェックされて確認画面で表示まではできているのですが、戻る画面に戻るとうまく値が引き継げてない状態です。 引継ぎはhiddenで戻るページまではきている状態です。 あとは、hiddenの値とDBでselectしてのを比較してあればcheckedをつけるだけだと思っているんですが そこでうまくいっていない状態です。 下記がソースです。 ■DBからループで表示するチェックボックスを配列に $businessSQL = "SELECT * FROM business_tbl WHERE dell_flag = 0"; $businessQuery = mysql_query($businessSQL); $businessArray = array(); while($row = mysql_fetch_assoc($businessQuery)) { $businessArray[] = $row; } ■hiddenで値を引き継ぎ ※下記の例は2個チェックされhiddenで戻ってきた状態 チェックボックス名(配列):com_business Array ( [0] => 1 [1] => 2 ) ■hiddenとDBからselectしたbussines_idを比較 <?php foreach($businessArray as $val) { ?> <?php foreach($inputArray['com_business'] as $val1) { ?> <?php if($val1 == $val['bussiness_id']) { ?> <input type="checkbox" name="com_business[]" value="<?php print($val['business_id']); ?>" checked><?php print($val['business']); ?>&nbsp;<br> <?php } else { ?> <input type="checkbox" name="com_business[]" value="<?php print($val['business_id']); ?>"><?php print($val['business']); ?>&nbsp;<br> <?php } ?> <?php } ?> <?php } ?> 宜しくお願い致します。

  • PHP
  • 回答数1
  • ありがとう数1

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

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

<?php foreach($businessArray as $val){ $checked = ""; foreach($inputArray['com_business'] as $val1){ if($val1 == $val['bussiness_id']) $checked = " checked"; } ?> <input type="checkbox" name="com_business[]" value="<?php print($val['business_id'])?>"<?php print $checked?>> <?php } ?> こんな感じじゃないですかね。

take--
質問者

お礼

ご連絡が遅れてしまい申し訳ございませんでした。 早速試したところできました!!! かなりはまっていたので本当に助かりました。 本当にありがとうございました。

関連するQ&A

  • phpでのメールフォームの作成について

    HTMLで <form action="mail.php" method="post"> <input name="aaa" type="checkbox" id="aaa" value="AAA" checked> <input name="bbb" type="checkbox" id="bbb" value="BBB" checked> <input name="ccc" type="checkbox" id="ccc" value="CCC" checked> </form> として、次に進むボタンを押すとmail.phpに飛び mail.phpでは、チェックされたものだけを表示したいのですが、どうすればよいでしょうか? もし、AAAとBBBが選ばれたら あなたが選んだのは AAA、BBBです。 と表示したいです。そのあとにメールフォームを続けるつもりです。 ご教授よろしくお願いします。

    • 締切済み
    • PHP
  • PHPにフォームについて質問です。

    つい最近ここで教えていただいたフォームのプログラムなのですが、どのように組み合わせるのかわからない状態でうまく反映できません。自分で出来ると思ったのですが出来ませんでした。 前回途中で質問終わらせてしまったことは後悔していますが今回もどうかご教授いただきたいです。 下記のように入力しましたが検索したあとに名前はフォームに表示されている状態なのですが、チェックボックスのチェックは検索した後に消えてしまいます。 チェックを検索したあとにも残るようにするにはどのように入力すれば良いでしょうか? どうかよろしくお願い致します。 <?php $value=array(); //想定するデータを初期化しておく $value['name']=""; if(isset($_REQUEST['name'])){ $value['name']=htmlspecialchars($_REQUEST['name'],ENT_QUOTES,'UTF-8'); } $checked=array(); //想定するデータを初期化しておく $checked['team_id']=array(1=>"",2=>"",3=>"",4=>"",5=>""); if(isset($_REQUEST['team_id']) and is_array($_REQUEST['team_id'])){ foreach($_REQUEST['team_id'] as $val){ $checked['team_id'][$val]=" checked"; } } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>リーグデータ</title> <link rel="stylesheet" type="text/css" href="../common/style.css"/> </head> <body id="list"> <div id="main"> <form name="search_form" action="xxxxxxxx.php" method="post"> <input type="hidden" name="cmd" value="search" /> <table> <tr> <th class="th_top">選手名</th> <td class="td_top"> <input type="text" name="name" size="30" value="<?php echo "{$value['name']}" ?>"> </td> </tr> <tr> <th>チーム名</th> <td> <input type="checkbox" name="team_id[]" value="1"{$checked['team_id'][1]}/>名古屋 <input type="checkbox" name="team_id[]" value="2"{$checked['team_id'][2]}/>徳島 <input type="checkbox" name="team_id[]" value="3"{$checked['team_id'][3]}/>千葉 <input type="checkbox" name="team_id[]" value="4"{$checked['team_id'][4]}/>浦和 <input type="checkbox" name="team_id[]" value="5"{$checked['team_id'][5]}/>磐田 <br /> </td> </tr> <tr> <th class="th_middle"> ポジション </th>

    • ベストアンサー
    • PHP
  • PHP更新フォーム チェックボックス

    入力フォームにて、チェックボックスがあり、チェック送信すると"済"という文字をDBに格納します。 <input type='checkbox' name='check' value='済'> DBに済が格納されていたら、更新フォームのチェックボックスに、チェックが入ってる状態に したのですが、どのようにしたら良いでしょうか? <input type="text" name="checkbox" value="<?php print( $row->checkbox); ?>"> のようにしてもうまくいきません。 ご教授おねがいします。

    • 締切済み
    • PHP
  • PHPバージョン4.3.10で動作しない

    はじめのページでチェックボックスにチェックしてもらい、 次のページでそのチェックしたものを表示したいです。 しかし、下記のコードではPHPバージョン4.3.10ではうまく動作しませんでした。 PHPバージョン4.3.10で動作させるには、どうすればよいか教えていただけませんか? <form action="mail.php" method="post"> <input name="member[]" type="checkbox" value="AAA" checked>AAA <input name="member[]" type="checkbox" value="BBB" checked>BBB <input name="member[]" type="checkbox" value="CCC" checked>CCC <input type="submit" value="send"> </form> mail.php <?PHP if(is_array($member)){ $txt ="あなたの選んだのは"; foreach ($member as $key=>$val){ if ($key==0){ $txt .=$val; }else{ $txt .="、".$val; } } $txt.="です"; }else{ $txt="あなたは誰も選んでません"; } print $txt; ?>

    • ベストアンサー
    • PHP
  • cgiのフォーム確認画面で教えてくださいー

    cgiのフォームの確認画面でこまってます。 ラジオボタンの確認はいかで問題なくできています。 END for($xa = 1; $xa < @list_d; $xa++){print '<input name="kai" value="'.$xa.'" type="radio"'; if($form{'kai'} == $xa){print ' checked'; $ch++;} print '>'.$list_d[$xa].'&nbsp;';} print<<END; ・・・同じ要領で、チェックボックスも表示させたいのですが いかですと、うまく表示できません。 END for($xa = 1; $xa < @list_e; $xa++){print '<input name="q2" value="'.$xa.'" type="checkbox"'; if($form{'q2'} == $xa){print ' checked'; $ch++;} print '>'.$list_e[$xa].'&nbsp;';} print<<END; …チェックボックスの場合は何か違う指示が必要なのでしょうか。 どなたかお分かりの方教えていただけますか。 どうぞよろしくおねがいいたします。

    • 締切済み
    • CGI
  • 【PHP】配列の値が上書きされる

    PHP初心者です。 PHPとMYSQLとHTMLでweb画面を作成しています。 ループで、SQLを複数回回し、その結果を配列に格納しようとしているのですが、 配列には毎回最後の一つの結果しか格納されません。 いろいろ調べて、試してみたのですが、どうしても分かりません。 申し訳ありませんが、お分かりの方がいたら、ご教示願えませんでしょうか。 以下にソースを記載します。 ******************************************************** <?php $checkbox = $_REQUEST["chk"]; $pdo = new PDO("mysql:host=localhost; dbname=TESTDB; charset=utf8", "hoge", "hoge", array( PDO::ATTR_EMULATE_PREPARES => false ) ); $results=array(); for($i=0; $i<sizeof($checkbox); $i++){ $sql = "select * from Item where 1 = 1 "; $sql = $sql . " and id=${checkbox[$i]} "; $statement = $pdo->prepare( $sql ); var_dump($sql);   ←★デバッグ用 $statement->execute(); $results = $statement->fetchAll(); } ?> <?php print count(sizeof($checkbox));   ←★デバッグ用 print("<pre>");   ←★デバッグ用 print_r($results);   ←★デバッグ用 print("</pre>");   ←★デバッグ用 ?> ******************************************************** $checkbox = $_REQUEST["chk"]; の部分ですが、前のページでチェックボックスに3箇所チェックを入れて、その情報を格納しています。 var_dump($sql)の結果、 string(41) "select * from Item where 1 = 1 and id=8 " string(41) "select * from Item where 1 = 1 and id=9 " string(42) "select * from Item where 1 = 1 and id=10 " と、ちゃんと3つ認識しています。 しかし、 print("<pre>"); print_r($results); print("</pre>"); の結果が、 Array ( [0] => Array ( [id] => 10 [0] => 10 [item_name] =>商品1 [1] => 商品1 [price] => 10000 [2] => 10000 [rfu1] => [3] => [rfu2] => [4] => [rfu3] => [5] => [memo] => comment [6] => comment ) ) と、最後の1つしか格納されていないのです……。

    • ベストアンサー
    • PHP
  • PHPのメールフォームでチェックボックス

    PHPでメールフォームを作っているのですが、チェックボックスの値がメールで送信されません。 ソースは・・・(チェックボックスの部分だけ) *フォームページ <form method="post" action="form1.php" name="infoform" id="infoform" onsubmit="return checkForm();"> <INPUT type="checkbox" name="k_menu[]" id="k_menu[]" value="メニュー1" />メニュー1&nbsp;<INPUT type="checkbox" name="k_menu[]" id="k_menu[]" value="メニュー2" />メニュー12&nbsp;<INPUT type="checkbox" name="k_menu[]" id="k_menu[]" value="メニュー3" />メニュー3 <input type="reset" name="no" id="no" value="リセット" /><input type="submit" name="send" id="send" value="確認" /> </form> *確認ページ <?php $p_k_menu = $_REQUEST['k_menu']; ?> <table> <th>興味のあるメニューは?</th> <td> <?php for($i=0; $i<sizeof($p_k_menu); $i++){ print "${p_k_menu[$i]}<br />"; } ?></td> </tr> </table> <form method="post" action="form2.php" name="h_form" id="h_form"> <input type="hidden" name="k_menu" id="k_menu" value="<?php print htmlspecialchars($k_menu); ?>" /> *メール送信ページ <?php $p_k_menu = $_POST['k_menu']; mb_language("Ja"); mb_internal_encoding("EUC-JP"); $mailbody = "興味のあるメニューは?:".$k_menu; $address = "メールアドレス"; $subject = "件名"; if(mb_send_mail($address,$subject,$mailbody,"from:メールアドレス")){ print "応募を受け付けました。"."<br />"."ありがとうございました。"; }else{ print "応募を確認できませんでした。"."<br />"."申し訳ございませんが、もう一度ご送信下さい。"."<br />"."<form><input type='button' name='bk' id='bk' value='戻る' onclick='history.go(-2)'></form>"; } ?> ソースは以上です。 何処が悪いんでしょうか??

  • PHPでチェックボックスの結果を離れた配列に入れる

    PHPにて、複数あるチェックボックスの操作結果(オン/オフ)を変数に格納する方法を探しています。 予定として プログラム実行 → ボタンが1つと、チェックボックスが複数表示される → チェックボックス操作 → ボタンを押す → 複数のオン/オフ状況が配列に格納される といったものを作りたいと考えています。 現在はそのためのテストとして、ボタンを押した際のオン/オフの状況が画面に順に表示されるものを作っていますが、変数がUndefined Indexであると言われ、表示することができません。 現在のプログラムは下の通りです。 実際のプログラム上では、(1),(2),(3)はそれぞれソース内のかなり離れた場所にあります。 各チェックボックス(各<form>~</form>)毎にボタンを用意していないのが原因であるとは思うのですが、ボタンは特定の箇所に1つだけ用意したいと考えています。 またチェックボックス表示部とボタン表示部は(ソース的に)離れているため、 ボタン表示部で<form>を開いて、開いたまま進み、チェックボックス表示部が終わってやっと閉じる、という方法は難しいと思います。 どうすればチェックボックスの結果を離れた箇所にある配列に入れることができるのでしょうか。 宜しくお願いします。 [regist.php] <?php //(1) 更新ボタンを押すとチェックボックスのon/off結果が表示される if(isset($_POST['cmd_Print'])){ $check = $_POST["cb"]; for($i=0; $i<count($check); $i++){ print "${check[$i]}<br>"; } } //(2) 更新ボタンの表示 print("<form method=\"post\" action=\"regist.php\">"); print("<input type=\"submit\" name=\"cmd_Print\" value=\"結果表示\">"); print("</form>"); //(3) チェックボックス(on,off)を交互に表示 for($i=0; $i<5; $i++){ //チェックボックスをオンの状態で表示 print("<form method=\"POST\" action=\"./regist.php\">"); print sprintf('<input type="hidden" name="cb[]" value="off">'); print sprintf('<input type="checkbox" name="cb[]" value="on" checked="checked">'); print("</form>"); //↑チェックボックス操作後、オフの状態なら$cb[]に"off"を、オンの状態なら$cb[]に"on"を入れる //チェックボックスをオフの状態で表示 print("<form method=\"POST\" action=\"./regist.php\">"); print sprintf('<input type="hidden" name="cb[]" value="off">'); print sprintf('<input type="checkbox" name="cb[]" value="on">'); print("</form>"); //↑チェックボックス操作後、オフの状態なら$cb[]に"off"を、オンの状態なら$cb[]に"on"を入れる } ?>

    • 締切済み
    • PHP
  • チェックボックスについて

    お世話になっております。 フォーム上にあるチェックボックスの数だけDBへフィールドを用意し、チェックされたものをvalueに記載のある内容をDBへ登録しようと考えております。 そこで、他の入力フォームに入力の不備があった場合は、同じ画面に戻り、入力を催促する設定を描いているのですが、チェックをしたチェックボックスがクリアにならない様にするには、どのようにしたら宜しいのでしょうか?色々と調べて居るのですが、どれもチャックした内容を表示する場合だったりで、初心者の私として的を得たものが見つかりません。ご教授いただければと思い投函させて頂きました。 宜しくお願い致します。 <input type="checkbox" name="renraku_mail" value="メールを希望" checked> &nbsp;メール &nbsp;&nbsp;&nbsp; <input type="checkbox" name="renraku_tel" value="電話を希望"> &nbsp;電話 &nbsp;&nbsp;&nbsp; <input type="checkbox" name="renraku_fax" value="FAXを希望"> &nbsp;FAX

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

    以下のようなプログラムにおいて、一度submit(解析する)ボタンを押すとvalue属性で指定しているデータが格納されず、"on"という文字列が格納されてしまいます。なぜでしょうか? /* print "<form method=\"post\" action=\"".$_SERVER[PHP_SELF]."\" name=\"content\">"; __while ($row = $res->fetchRow(DB_FETCHMODE_ASSOC)){ ____print "<input type=\"checkbox\" name=\"noun[]\" value=\"DBに格納済みのデータ(1)"\">".左のデータ(1)."<br>"; __} print "<input type=\"submit\" value=\"解析する\">"; print "</form>"; */ 具体的な問題は以下になります。 1.2つのチェックボックスをチェックし、「解析する」ボタンを押したあとのnoun[]配列の中身は、Array([0]=> on [1]=> on)です。 2.次に同じチェックボックスにチェックをいれ、再度「解析する」ボタンを押して配列の中身を確かめてみると、Array([0]=> データ [1]=> データ) という感じで、2度目で実際のデータが格納される状態です。どうしたら、1度目の動作でチェックしたデータを配列に格納できるのでしょうか? どなたかアドバイスをお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう