Perlで複数のチェックボックスの値を変数に入れて表示する方法

このQ&Aのポイント
  • Perlを使用して、フォームから選択されたチェックボックスの値を変数に保存し、別の画面で表示する方法について教えてください。
  • フォームにはAからFまでのチェックボックスがあり、選択された値を変数$work6に追加して表示したいと考えています。
  • forループを使用して、q6_1からq6_7の値を取得し、最後に「/」を追加して変数$work6に書き込む方法を試しましたが、うまくいきませんでした。どのように修正すればよいでしょうか?
回答を見る
  • ベストアンサー

複数のチェックボックスの値を、ひとつの変数に入れて表示したい。

Perlで質問です。 下記のようなフォームで、A~Fまでのチェックボックスを選んで「test.cgi」にデータを送ります。 <HTML> <BODY> <FORM action="test.cgi"> <input name="q6_1" type="checkbox" value="A">A<br> <input name="q6_2" type="checkbox" value="B">B<br> <input name="q6_3" type="checkbox" value="C">C<br> <input name="q6_4" type="checkbox" value="D">D<br> <input name="q6_5" type="checkbox" value="E">E<br> <input name="q6_6" type="checkbox" value="F">F<br> <input name="q6_7" type="checkbox" value="G">G<br> <INPUT type="submit"> </FORM> </BODY> </HTML> 次の画面で、選ばれた物の確認画面を変数「$work6」を呼び出して表示したいと思っています。 <HTML> <BODY> A / B / C / D / E / F </BODY> </HTML> この処理をperlを使ってやりたいのですが、どうやったらいいのかわかりません。 for を使って「q6_1~7」を呼び出し、それぞれの最後に「 / 」を追加したあとファイルハンドルを使って、変数「$work6」に追加上書きして表示、と言うことをすれば良いのだろうと、下記のソースを書いて見ましたが、うまくいきませんでした。 (たぶん間違いだらけだと思いますが…。) open(IN, ">>$work6"); for ($q6 = 1; $q6 < 7; $q6++){ if ($FORM{'q6_$q6'} ne '') { print IN "$FORM{'q6_$q6'}." / ""; } } close(IN); つたない質問だと思いますが、 よろしくお願いします。

  • Perl
  • 回答数2
  • ありがとう数1

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

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

おっと、もう一箇所 print IN "$FORM{'q6_$q6'}." / ""; ここは文字列部分の表記の仕方がおかしいです。 print IN $FORM{'q6_'.$q6} ." / "; ですね。 #私の回答部分では"/"と書いてしまったので #" / "と置き換えておいてください。

Java-Java
質問者

お礼

ありがとうございます! すごい!すごい!出来ました! チェックボックスが100近くあるフォームを作っていて、途方に暮れていました。 力業で1つ1つ処理しようと思っていましたが、非常に助かります。 教えて頂いた修正点を見ると、私が作ったソースも大幅に外れているわけではなかったんですね…。 改良点もお教え頂いてありがとうございます。 早速使わせて頂きます。 ありがとうございました。 また質問したときにはよろしくお願いします。 では失礼します。

その他の回答 (1)

回答No.1

とりあえず間違ってる部分は $FORM{'q6_$q6'}     ↑ここの部分です。 $FORM{'q6_'.$q6} にすれば問題はありません。 あと、q6_1~q6_7までありますが、質問の方法だと q6_6までしか出力されないですが、いいのでしょうか? for ($q6 = 1; $q6 <= 7; $q6++){           ↑"="が必要ですね。 さらに、 if ($FORM{'q6_$q6'} ne '') { } で出力しているので、チェックされていない部分は 詰めて出力されますがよかったのですか? A/C/F/ という感じになります。 A/B/C/D/E/F/G とするにはこんなのはどうでしょう? #インデントは全角スペースですのでコピーするときは #注意してください。 $work6=""; for($i=1;$i<=7;$i++){  if( $i != 1 ){   $work6 .= "/";  }  $work6 .= $FORM{"q6_".$i}; } という感じでいいんじゃないでしょうか。

関連するQ&A

  • チェックボックスの表示・非表示 動作

    はじめまして。 初めて掲示板を利用させていただきます。javascriptを勉強しまだ日が浅いのでご存知の方がいらっしゃれば教えてください。 今、チェックボックスを選択し選択した項目がアクティブになるようにしたいのですが、選択項目が重複すると以下のようになってしまいました。 A+AB=AB A+AB+E=ABE 個々までは問題なし。 既に全てのチェックが付いた上体で、ABCE-A=BCE となってしまい、 ABのチェックが入っていても、Aが消えてしまいます。 以下に現在のコードを張ります。 <script type='text/javascript'> <!-- function fchk2(obj, name) { var frm=obj.form; if(obj.checked==true) { /* チェックボックスが選択されている場合は、   テキストボックスを有効化(false)*/ for(var i=1; i<=3; i++){ frm.elements[name+i].disabled=false; } } else { for(var i=1; i<=3; i++){ /* 無効化する前に、入力値をクリア */ if(name=='t'){ /* テキストボックスの場合 */ frm.elements[name+i].value=''; }else{ /* チェックボックスの場合 */ frm.elements[name+i].checked=false; } /* 無効化(true) */ frm.elements[name+i].disabled=true; } } } //--> </script> <form name='form2' action='#'> <input type='checkbox' name='chk1' value='1' onclick='fchk2(this,"t")' checked>A<br> <input type='checkbox' name='chk1' value='1' onclick='fchk2(this,"t");fchk2(this,"b");' checked>AとB<br> <input type='checkbox' name='chk1' value='1' onclick='fchk2(this,"t");fchk2(this,"e");' checked>AとE<br> <input type='checkbox' name='chk2' value='1' onclick='fchk2(this,"c");fchk2(this,"e");' checked>CとE<br> <br> A<input type='text' name='t1' value='テキストA'><br> A<input type='text' name='t2' value='テキストB'><br> A<input type='text' name='t3' value='テキストC'><br> <br> B<input type='text' name='b1' value='テキストA'><br> B<input type='text' name='b2' value='テキストB'><br> B<input type='text' name='b3' value='テキストC'><br> <br> <input type='checkbox' name='c1' value='1'> 選択肢C<br> <input type='checkbox' name='c2' value='1'> 選択肢C<br> <input type='checkbox' name='c3' value='1'> 選択肢C<br> <br> <input type='checkbox' name='e1' value='1'> 選択肢E<br> <input type='checkbox' name='e2' value='1'> 選択肢E<br> <input type='checkbox' name='e3' value='1'> 選択肢E </form> よろしくお願いいたします。

  • チェックボックスのON/OFFに応じて別の複数のチェックボックスも連動ON/OFF

    7番のcheckboxをON→1,2,4,5番にチェックもON 7番のcheckboxをOFF→1,2,4,5番にチェックもOFF という風に動作させる記述をご教示ください。 よろしくお願い致します。 <html> <head> <script type="text/javascript"> </script> </head> <body> <form action="" method="post" name="myform"> 去年<br> 1番<input type="checkbox" name="kyonen[]" value="1">1月<br> 2番<input type="checkbox" name="kyonen[]" value="2">2月<br> 3番<input type="checkbox" name="kyonen[]" value="3">3月<br> 今年<br> 4番<input type="checkbox" name="kotosi[]" value="1">1月<br> 5番<input type="checkbox" name="kotosi[]" value="2">2月<br> 6番<input type="checkbox" name="kotosi[]" value="3">3月<br> 7番<input type="checkbox" name="mychk">去年と今年の1、2月をまとめてチェック<br> </form> </body> </html>

  • チェックに応じて違うチェックボックスをアクティブにしたい

    次のHTMLのように、大分類、小分類のような構成のチェックボックス グループがあります(初期設定は全部チェック無しです) 普段は[a][b][c][d]をdisableとしておき、(1) にチェックが入った 場合に[d]以外([a][b][c])アクティブ(?とにかくチェックを入れる ことができる)ようにするにはどうしたらいいでしょうか。 よろしくお願い致します。 <form id="Form1"> : <INPUT TYPE="CHECKBOX" NAME="food" value="果物">(1) 果物 <INPUT TYPE="CHECKBOX" NAME="food" value="野菜">(2) 野菜 <INPUT TYPE="CHECKBOX" NAME="food" value="肉魚">(3) 肉魚 <br> <INPUT TYPE="CHECKBOX" NAME="fruit" value="りんご">[a] りんご <INPUT TYPE="CHECKBOX" NAME="fruit" value="みかん">[b] みかん <INPUT TYPE="CHECKBOX" NAME="fruit" value="ぶどう">[c] ぶどう <INPUT TYPE="CHECKBOX" NAME="fruit" value="バナナ">[d] バナナ : </form>

  • selectメニューによるチェックボックスの表示・非表示

    リストメニューで選択された項目がアクティブになるようなフォームを作成したいと考えています。 下記コードの上部チェックボックスがselectメニューになっているようなものです。 JavaScriotに関して未熟者ですので、どなたか参考になるご意見/回答を頂けませんでしょうか?宜しくお願いいたします。 <html> <head> <title></title> <script type="text/javascript"> <!-- // 制御用フラグ // 0なら対象グループは無効(disabled)、1以上なら有効 var FLAG = { 'A':0, 'B':0, 'C':0, 'E':0 }; // 初期化 window.onload = function(){ var controlList = document.getElementById('ctr_FLAG').getElementsByTagName('input'); for(var i=0;controlList[i];i++){ if(controlList[i].checked){ var nameList = controlList[i].value.split(/,/); for(var j=0;nameList[j];j++){ FLAG[ nameList[j] ]++; } } } for(var x in FLAG) { fchk2_sub(x); } } // チェックが変更されたら function fchk2(obj) { nameList = obj.value.split(/,/); for(var i=0;nameList[i];i++) { if(obj.checked) { FLAG[nameList[i]]++; } else { FLAG[nameList[i]]--; } fchk2_sub(nameList[i]); } } // disableの変更 function fchk2_sub(groupe_name,dsiabled_value){ var inputList = document.getElementById('gr_'+groupe_name).getElementsByTagName('input'); for(var i=0;inputList[i];i++) { inputList[i].disabled = FLAG[groupe_name]>0?false:true; } } //--> </script> </head> <body> <form name='form2' action='#'> <p id="ctr_FLAG"> <input type='checkbox' name='chk1' value='A' onclick='fchk2(this)' > Aをアクティブに<br> <input type='checkbox' name='chk1' value='A,B' onclick='fchk2(this);' > AとBをアクティブに<br> <input type='checkbox' name='chk1' value='A,B,C' onclick='fchk2(this);'> AとBとCをアクティブに<br> <input type='checkbox' name='chk12' value='A,B,C,E' onclick='fchk2(this);'> AとBとCとDをアクティブに</p> <p>=====================</p> <p id="gr_A"> <input type='checkbox' name='a1' value='1'> 選択肢A<br> <input type='checkbox' name='a2' value='1'> 選択肢A<br> <input type='checkbox' name='a3' value='1'> 選択肢A<br> </p> <p id="gr_B"> <input type='checkbox' name='b1' value='1'> 選択肢B<br> <input type='checkbox' name='b2' value='1'> 選択肢B<br> <input type='checkbox' name='b3' value='1'> 選択肢B<br> </p> <p id="gr_C"> <input type='checkbox' name='c1' value='1'> 選択肢C<br> <input type='checkbox' name='c2' value='1'> 選択肢C<br> <input type='checkbox' name='c3' value='1'> 選択肢C<br> </p> <p id="gr_E"> <input type='checkbox' name='e1' value='1'> 選択肢E<br> <input type='checkbox' name='e2' value='1'> 選択肢E<br> <input type='checkbox' name='e3' value='1'> 選択肢E </p> </form> </body> </html>

  • 複数のチェックボックスの一括チェック/解除などのコントロール

    チェックボックスである、1月~12月の値を検索条件としてPHPに渡します。 その際、次のように動作するjavascriptをご教示下さい。よろしくお願い致します。 (1) 通年をチェックしたら、1月~12月もチェック(解除されたら全て解除) (2) 上半期をチェックしたら、1月~6月もチェック(〃) (3) 下半期をチェックしたら、6月~12月もチェック(〃) (4) 通年、上半、下半は、いずれかがチェックされている間、他はdisabledに。 チェックが外れたら、全てアクティブかつ全チェックが解除される状態に。 以上が妥当と思いますが、(4)にの仕様についてはより洗練いただければ誠に幸いです。 <html> <head> <script language="javascript"> </script> </head> <body> <form method="post" action="search.php" id="form1" name="form1"> <input type="checkbox" name="month[]" value="200501">2005年1月<br> <input type="checkbox" name="month[]" value="200502">2005年2月<br> <input type="checkbox" name="month[]" value="200503">2005年3月<br>          :(gooの文字数制限により略) <input type="checkbox" name="month[]" value="200510">2005年10月<br> <input type="checkbox" name="month[]" value="200511">2005年11月<br> <input type="checkbox" name="month[]" value="200512">2005年12月<br> <input type="checkbox" name="all" value="">通年<br> <input type="checkbox" name="1sthalf" value="">上半期のみ<br> <input type="checkbox" name="2ndhalf" value="">下半期のみ<br> <input type="submit" name="exec" value="検索"> </form> </body> </html>

  • チェックボックスの複数選択の値をCGIで取得する方法

    お世話になります。 表記の通りチェックボックスで複数選択するHTMLを次のように作成しました。 ======== 送信元HTML ========= <FORM action='******.cgi' method='POST'> <INPUT type='checkbox' name='Q6_ans' value='1'> <INPUT type='checkbox' name='Q6_ans' value='2'> <INPUT type='checkbox' name='Q6_ans' value='3'> <INPUT type='checkbox' name='Q6_ans' value='4'> <INPUT type='checkbox' name='Q6_ans' value='5'> <input type=submit value='実  行'> </FORM> これを受取るPerl-CGIのコードをこうしました。 ======== 受信するcgi ========= my @files_2 = split(/\0/,$in{'Q6_ans'}); for($i=0;$i<=4;$i++){ if($files_2[$i] ne ""){$d[6].=$files_2[$i]." , ";} } 例えばチェックボックスで2と3を選ぶと$d[6]の値は「2 , 3 ,」となるつもりだったんですが、意に反し「23 ,」となります。 配列の値を調べると$files_2[0]に「23」が代入されて、$files_2[1]から$files_2[4]は空です。つまり「split(/\0/,$in{'Q6_ans'})」での分割がされていないようなのです。 何が原因で、どこが間違いなのでしょう。チェックボックスの値は\0で区切られていると思っているのですが、間違いでしょうか?

  • チェックボックスにチェックしたファイルだけをダウンロードできるようにしたい

    サーバーにpdfファイルを10個保存しています。 HTMLページでチェックボックスにチェックを入れたpdfだけを ダウンロードできるようにURL入りの返信メールを自動的に送りたい のですが、やり方がわかりません。 どなたか詳しい人がおられましたら、教えていただけますでしょうか。 一応チェックボックスの過去の回答を見たのですが見当たりません。 (全て見れたわけではないですが) チェックボックス表示までは以下のところまでできたのですが。 よろしくお願いします。 <form> <input type="checkbox" name="グループ1" value="項目1">Apdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目2">Bpdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目3">Cpdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目4">Dpdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目5">Epdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目6">Fpdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目7">Gpdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目8">Hpdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目9">Ipdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目10">Jpdf<br><br><br><br> </form>

  • チェックボックスの値について

    こんばんは。 チェックボックスの値の加工で悩んでいます。 【やりたいこと】 チェックボックスのvalueを加工し表示しています。 重複している文言は表示しないようにしたいです。 現在の値を変数に入れておいて、forの中で判定させる?のでしょうか? 参考URL等あれば教えていただけませんでしょうか? よろしくお願いいたします。 【現状valueの値を下記のように表示しています。】 ■日本北海道  ××区  ・ああ町 ■日本北海道  ××区  ・いい町 ■日本北海道  ××区  ・うう町 ■日本北海道  YY区  ・ええ町 ■日本東京都  YY区  ・AA町 ■日本東京都  YY区  ・BB町 ■日本東京都  ZZ区  ・BB町 ■日本東京都  ZZ区  ・BB町 【こんな感じで重複している文言は表示しないようにしたいです。】 ■日本北海道  ××区  ・ああ町  ・いい町  ・うう町 ■日本北海道  YY区  ・ええ町 ■日本東京都  YY区  ・AA町  ・BB町 ■日本東京都  ZZ区  ・BB町 ●if1つ前の値と比較して、重複を消せるかと思ったのですがうまくいきませんでした。 function textcopy(){ var word01; var word02; var word03; var word04; naiyo = ''; for(i=0; i<document.f.a1.length; i++){ if(document.f.a1[i].checked){ source = (document.f.a1[i].value); kekka = source.split("*"); if((kekka[0])==(word01)){ kekka[0]=""; } if((kekka[1])==(word02)){ kekka[1]=""; } if((kekka[2])==(word03)){ kekka[2]=""; } naiyo = naiyo + kekka[0] + kekka[1] +'\n'+' ' + kekka[2] +'\n'+ ' '+ '・'+ kekka[3] + '\n'; word01= kekka[0]; word02= kekka[1]; word03= kekka[2]; word04= kekka[3]; } } document.f.log.value = naiyo ; } 【サンプルソース】 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <title></title> <script type="text/javascript" language="JavaScript"></script> <SCRIPT TYPE="text/javascript"> <!-- function textcopy(){ naiyo = ''; for(i=0; i<document.f.a1.length; i++){ if(document.f.a1[i].checked){ source = (document.f.a1[i].value); kekka = source.split("*"); naiyo = naiyo + kekka[0] + kekka[1] +'\n'+' ' + kekka[2] +'\n'+ ' '+ '・'+ kekka[3] + '\n'; } } document.f.log.value = naiyo ; } --> </SCRIPT> </head> <body> <form name="f"> <input type="checkbox" name="a1" value="■日本*北海道*××区*ああ町">ああ町<br> <input type="checkbox" name="a1" value="■日本*北海道*××区*いい町">いい町<br> <input type="checkbox" name="a1" value="■日本*北海道*××区*うう町">うう町<br> <input type="checkbox" name="a1" value="■日本*北海道*YY区*ええ町">ええ町<br> <input type="checkbox" name="a1" value="■日本*東京都*YY区*AA町">AA町<br> <input type="checkbox" name="a1" value="■日本*東京都*YY区*BB町">BB町<br> <input type="checkbox" name="a1" value="■日本*東京都*ZZ区*BB町">BB町<br> <input type="checkbox" name="a1" value="■日本*東京都*ZZ区*CC町">CC町<br> <input type="button" value="確認" onclick="textcopy()"><br> <textarea name="log" rows="21" cols="84" id="image1"> </textarea> </form> </body> </html>

  • チェックボックスによる検索(複数チェックの場合)

    プログラム超初心者です。色々なサイトを検索し参考にしたのですがどうしても結果が得られないため投稿させていただきました。(似たようなものは多かったのですがわかりませんでした。) チェックボックスにて複数チェックされる可能性があるものをMYSQLより検索をかけ結果を表示したいと思っております。 地域:□北海道、□東北、□関東、□北陸、□中部、 ジャンル:□イタリアン、□アジアン料理、□洋食、□すべて 以上にチェックをいれてもらったものに対し検索結果画面をだす予定です。 検索をかけるhtml画面は以下のように致しました。 <form method="POST" action="search.php"> <input name="area[]" type="checkbox" value="0"/>北海道<br> <input name="area[]" type="checkbox" value="1"/>東北<br> <input name="area[]" type="checkbox" value="2"/>関東<br> <input name="area[]" type="checkbox" value="3"/>北陸<br> <input name="area[]" type="checkbox" value="4"/>中部<br> <input name="genre[]" type="checkbox" value="a"/>イタリアン<br> <input name="genre[]" type="checkbox" value="b"/>アジア料理<br> <input name="genre[]" type="checkbox" value="c"/>洋食<br> <input name="genre[]" type="checkbox" value="g"/>すべて<br> <input type="submit" name="bottun1" value="入 力"> PHPで$変数名a = $_POST["area"];と$変数名b = $_POST["genre"]; とし配列 foreach関数を使うのでは・・・とまで考えたのですがその後どうすればよいかわかりません。こんなにわからない状態でお伺いするのは恥ずかしいのですがお知恵を頂きたく投稿させていただきました。 お忙しいかと思いますがどうか宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • チェックボックスから配列を使って値を受け取る方法

    チェックボックスから配列を使って値を受け取る方法について、 以下の通りに試してみたのですが、上手く行かず、 配列$fCに値が入りません。 どなたか原因を教えていただけないでしょうか。 ------------------------------------------------ hoge.html <form action="hoge.php"> <input type="checkbox" name="fC[]" value="hoge"> hoge <br> <input type="checkbox" name="fC[]" value="foo"> foo <br> <input type="checkbox" name="fC[]" value="bar"> bar <br> <input type="submit" value="OK"> </form> ---------------------------------------------------------- ------------------------------------------------- hoge.php <? for( $i=0; $i<count($fC); $i++ ) { print $i ." ::: " . $fC[$i] . "<br>\n"; } ?> ----------------------------------------------------------

    • ベストアンサー
    • PHP

専門家に質問してみよう