• 締切済み

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

複数のチェックボックスのうちどれかを初期選択させ、ボタン押下後は選択保持をさせたいです。 片方のみならできるのですが、どなたかご教授いただけるとうれしいです。 現在のソースはこんな感じになっていて選択したものの保持はできるのですが、初期選択ができていません。よろしくおねがいします。 <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
  • 回答数3
  • ありがとう数1

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

リファラをみて自分以外の指定のときは指定値を設定すること もしくはセッションで調整すること。 そうでない場合は、値が一つも設定されていないデータをおくると 初期値が表示されます。

cubekun
質問者

お礼

yambejpさん、回答ありがとうございます。 初心者のためセッションなどの知識がありませんが調べてみようと思います。

  • D_mode
  • ベストアンサー率26% (4/15)
回答No.2

たとえば、test1だけ初期状態でチェックしておきたいなら function test1() {   if (array_key_exists('test1', $_POST)){     if ($_POST['test1']){       echo "<input type=\"checkbox\" name=\"test1\" checked>";     }else{       echo "<input type=\"checkbox\" name=\"test1\">";     }   }else{     echo "<input type=\"checkbox\" name=\"test1\" checked>";   } } ※インデントに全角を使ってますのでこのままコピペはしないでください このようにすると 「POSTの中にtest1がない時(=初期状態)」と 「POSTの中にtest1があり、チェックされている時」と 「POSTの中にtest1があり、チェックされてない時」を区別できると思います。 こういうことでよろしいのでしょうか。

cubekun
質問者

補足

D_modeさん、回答ありがとうございます。 やりたいことはあっています。ですが、教えて頂いたソースで試してみたところ最初のif文でelseに入ってしまい、チェックされてもされなくても全てデフォルトのチェックになってしまいうまくいきませんでした。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>複数のチェックボックスのうちどれかを初期選択 意味がわからないのですが、これはユーザーが選択しなくても 初期値がついているということですか? そのロジックはどういうものですか? 説明が必要だと思います。

cubekun
質問者

補足

説明不足ですみません。 画面起動時に複数あるチェックボックスのうち指定したチェックボックスにだけデフォルトチェックを入れたいということです。 その後、チェックボックスの選択をしなおしたものを保持させておきたいのです。

関連するQ&A

  • チェックボックスの全選択/解除について

    お尋ねします。 チェックボックスの全選択/解除について 1画面にチェックボックスのグループが複数(store、item)あります。 下記のソースだと【store】の全選択を押下すると【store】【item】両方とも 全選択状態になります。 【store】の全選択/全解除は【store】のみ 【item】の全選択/全解除は【item】のみにしたいのですが どのようにするとよろしいのでしょうか? よろしくお願いします。 <SCRIPT TYPE="text/javascript"> <!-- function allcheck(targetForm,flag){  for(n=0;n<=targetForm.length-1;n++){   if(targetForm.elements[n].type == "checkbox"){    targetForm.elements[n].checked = flag;   }  } } --> </SCRIPT> <table width="70%" align = "center" cellspacing="0"> <form action="confirm.php" method="post" target="_blank"> <tr> <td align="center"> <input type="checkbox" name="store[]" value="1" />A店<br/> <input type="checkbox" name="store[]" value="2" />B店<br/> <input type="checkbox" name="store[]" value="3" />C店<br/> <input type="checkbox" name="store[]" value="4" />D店<br/> <input type="checkbox" name="store[]" value="5" />E店<br/> <input type="button" value="全選択" onClick="allcheck(this.form,true)"/><br> <input type="button" value="全解除" onClick="allcheck(this.form,false)"/> </td> <td align="center"> <input type="checkbox" name="item[]" value="1" />項目1<br/> <input type="checkbox" name="item[]" value="2" />項目2<br/> <input type="checkbox" name="item[]" value="3" />項目3<br/> <input type="checkbox" name="item[]" value="4" />項目4<br/> <input type="checkbox" name="item[]" value="5" />項目5<br/> <input type="button" value="全選択" onClick="allcheck(this.form,true)"/><br> <input type="button" value="全解除" onClick="allcheck(this.form,false)"/> </td> </tr> <tr align="center"> <td colspan="4"> <input type="submit" name="con" value="確認"> </td> </tr> </form> </table>

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

    submit時に一つでもチェックがなければアラートを表示 チェックがあれば進む・・・としたいです。 <form action=next.html name=form1> <input type=checkbox name=checkbox1 value=1> <input type=checkbox name=checkbox2 value=2> <input type=checkbox name=checkbox3 value=3> <input type=checkbox name=checkbox4 value=4> <input type=checkbox name=checkbox5 value=5> ~以下50まで続きます <input type=submit value=submit> </form> function countChecked(form1) { var total = 0; var max = 50; for (var index = 0; index < form1.checkbox.length; index++) { total += form1.checkbox[index].checked ? 1 : 0; } if(countChecked(document.form1)) > 0) { return true; } else { alert("no"); return false; } return(total); } 過去に似たような質問を参考に作ってみましたがダメでした。 チェックボックスの名前の付け方が悪いのでしょうか。

  • 送信後のチェックボックスの表示

    最初の画面でAにチェックされているとします。 そのあとに、AとBをチェックしたあとにSubmitで送信します。 送信したあとに、AとBにチェックした最初の画面を表示させたいときは、 どんな風にすればよいのでしょうか。 今は・・・ If Request.Form="" <input type="checkbox" name="test" value="A" checked>A <input type="checkbox" name="test" value="B">B <input type="checkbox" name="test" value="C">C Else Select Request.Form("test") Case "A" <input type="checkbox" name="test" value="A" checked>A <input type="checkbox" name="test" value="B">B <input type="checkbox" name="test" value="C">C Case "B" <input type="checkbox" name="test" value="A">A <input type="checkbox" name="test" value="B" checked>B <input type="checkbox" name="test" value="C">C Case "C" <input type="checkbox" name="test" value="A">A <input type="checkbox" name="test" value="B">B <input type="checkbox" name="test" value="C" checked>C   ・・・ End Select End If というように、全ての場合のときに"checke"をつけて表示させています。 もっと、効率のよい書き方はないものでしょうか?

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

    チェックボックスが複数個(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
  • チェックボックス等の扱い。

    http://oguchan.s4.xrea.com/language/php/ のサイトにて、 <FORM> <INPUT TYPE="TEXT" NAME="hoge" VALUE="1"> <INPUT TYPE="SUBMIT"> </FORM> は、phpスクリプト内で$hogeで参照でき、しかしそれは危険であるから、 register_globals を無効にしてこれをできなくする。とあります。 PHP4~もそういうように設定されていると聞きました。 しかし、チェックボックスで同じname、で異なるvalueをもつ複数のデータを扱うときに、 <input type="checkbox" name="delno[]" value="no1"> <input type="checkbox" name="delno[]" value="no2"> としたときに、 echo $_POST['delno'][0]; echo $_POST['delno'][1]; と参照できてしまうのですが、これはいいのですか?

    • ベストアンサー
    • PHP
  • PHP チェックボックスのhidden値受け渡し

    こんばんは。いつもお世話になっております。 初歩的な質問かと思いますが、hiddenでのデータの受渡で、配列でのチェックボックスが上手くわたせずに悩んでおります。 if($_POST['send']){ **メール送信の処理します** $from_addres="xxxxxx@xxxxxxx.jp"; $to_addres=$mailadd; $make_subject="メール送信"; $message="-入力内容- アドレス:{$mailadd} なぜ:{$why}"; mailsend($to_addres,$from_addres,$make_subject,$message);//はぶいてますがfunction()書いています }elseif($_POST['submit']){ **内容確認** foreach ($_POST['why'] as $key => $why){ if($why==0){$why0="0です";} if($why==1){$why1="1です";} if($why==2){$why2="2です";} } **入力内容表示** <form method="post" action="<?=$_SERVER['../SCRIPT_NAME']?>"> <input type="hidden" name="why[]" value="<?php echo $_POST['why'];?>"> <input type="submit" name="return" value="修正"> </form> <form method="post" action="<?=$_SERVER['../SCRIPT_NAME']?>"> <input type="hidden" name="why[]" value="<?php echo $_POST['why'];?>"> <input type="submit" name="send" value="送信"> </form> }else{ <form method="post" action="<?=$_SERVER['../SCRIPT_NAME']?>"> <input name="why[]" type="checkbox" value="0"<?if($why==0){ print " checked";}?>>0 <input name="why[]" type="checkbox" value="1"<?if($why==1){ print " checked";}?>>1 <input name="why[]" type="checkbox" value="2"<?if($why==2){ print " checked";}?>>2 <input type="submit" name="submit" value="確認画面へ"> </form> } 同一ページにてif分で分岐して処理しています。 確認画面での値受け取りはできています。 その後の、送信・修正へのhiddenへの値受け渡しが上手くいきません。 結果、どう動作して欲しいかといいますと、 ・returnで戻った時に、値を保持してチェックしてあったチェックボックスに"checked"をつけたい ・sendへの値の受け渡し ・メールをとばすので、その本文への値の入れ方 foreach ($_POST['why'] as $key => $why){ if($why==0){$why0="0です";} if($why==1){$why1="1です";} if($why==2){$why2="2です";} } をメールをとばすところでも記述して$why0 $why1 $why2をprintすれば良いのでしょうか? ググってみたり、色々検索してみたのですが、調べ方がよくないので見つからず、質問をさせていただきました。 よろしくお願いします。

    • 締切済み
    • PHP
  • チェックボックスのデータの受け取り方について

    以下のようなチェックボックスを作ったとき、 test.phpではどうやって受け取ればよいのでしょうか? nameがそれぞれ違う場合は分かるのですが... 教えてください。 <form method="POST" action="test.php"> <input type="checkbox" name="color" value="red">赤</input> <input type="checkbox" name="color" value="blue">青</input> <input type="checkbox" name="color" value="white">白</input> <input type="checkbox" name="color" value="black">黒</input> <input type="submit" value="送信" > </form>

    • ベストアンサー
    • PHP
  • チェックボックスのjavascriptについて

    javascript初心者です! お力をお借りしたいと思い質問いたしました。 宜しくお願い致します。 ●やりたい事 ・チェックボックスがチェックされてない時に「商品を選択して下さい」のアラートを表示させ、1つでもチェックされていた場合は「送信」できる設定を行いたいです。 「name= 」 部分を同じ名前にすると可能ですが、異なる名前にすると動作いたしません。 どうかご教授お願い致します。 ■javascript部分 <script language="JavaScript" type="text/javascript"> function CheckForm(theform) { var FormOK = false; if (!theform.category1[0].checked && !theform.category2[1].checked && !theform.category3[2].checked && !theform.category4[3].checked && !theform.category5[4].checked) { alert("商品を選択してください。"); }else{ FormOK = true; } return FormOK; } function FieldControl(element, message) { alert(message); } </script> ■HTML部分 <form name="theform" onsubmit="return CheckForm(this);" action="" method="post"> <input value="category1" name="category1" type="checkbox">category1<br> <input value="category2" name="category2" type="checkbox">category2<br> <input value="category3" name="category3" type="checkbox">category3<br> <input value="category4" name="category4" type="checkbox">category4<br> <input value="category5" name="category5" type="checkbox">category5<br><br> <br> <br> <input value="送信" name="submit" type="submit"></form> 宜しくお願い致します。

  • 複数あるチェックボックスの入力チェックするには?

    チェックボックスの入力チェックスクリプトを探しており、下記のようなスクリプトをネット検索で見つけました。 <!-- <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 できればこのスクリプトをベースとして使用したいと思っています。どなたかお分かりの方がいらっしゃいましたらお教え下さいませ。 よろしくお願い致します。

  • チェックボックスのチェック済みを保持

    PHPを使ってフォームのチェックボックスの初期値にチェック済みでページを表示させ、そのチェックを外してサブミットし、同ページにリロードした際、セッションを使ってチェックを外した状態を保持しようとしているのですがうまくいきません。 チェックを外した状態でリロードしてもチェックがついた状態で表示されてしまいます、チェックを外した状態を保持表示させるにはどのように記述すればよいのでしょうか ご教授宜しくお願いします。 【PHP】 session_start(); $event = $_POST[ 'event' ]; $_SESSION[ 'event' ] = $event; if(!empty($event)){ $event_on = 'checked';} 【フォーム】 <form action="./" method="post" name="chbox"> <input type="checkbox" name="event" id="event" value="event" $event_on >イベント <button class="btn" onClick="boxCheck()" >表示</button> </form> 環境 php5.3 html5 javascriptのlocalStrage等を使ったほうが実装が現実的なら、検討いたします。

    • 締切済み
    • PHP

専門家に質問してみよう