- 締切済み
チェックボックス 連結
恐れ入ります。 <input type=checkbox name=col1 value="1"> <input type=checkbox name=col1 value="2"> <input type=checkbox name=col1 value="3"> <input type=checkbox name=col1 value="4"> <input type=checkbox name=col1 value="5"> を、 1;2;3;4;5 と連結して同一フィールドへ送信し、 読み込み時に 分割して読み込みたいのですが、どのようにしたら良いでしょうか。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- ralf124c
- ベストアンサー率52% (232/446)
とりあえず参考htmlとJS --------------------------------------------------- <html> <head> <meta http-equiv="Content-Language" content="ja"> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title>ページ 1</title> </head> <script type="text/javascript"> <!-- function fCONCAT(){ var sDt = ''; with(document.f){ // フォーム内オブジェクト名省略のためwithで指定 // 全checkboxを順に確認してチェックされた値のみを判別しながら;で連結してゆく for(var i=0; i<col1.length; i++) if(col1[i].checked) sDt += col1[i].value + ';'; // 蓄積したデータを隠しフォームcolに戻す col.value = sDt; } // 確認 alert('連結確認\n'+sDt); // POST送信するや否や if(confirm('送信しますか?')) return true; else return false; } // --> </script> <body> <form method="POST" action="test01.cgi" name="f"> <p><input type="checkbox" name="col1" value="1">1</p> <p><input type="checkbox" name="col1" value="2">2</p> <p><input type="checkbox" name="col1" value="3">3</p> <p><input type="checkbox" name="col1" value="4">4</p> <p><input type="checkbox" name="col1" value="5">5</p> <p><input type="hidden" name="col" value=""></p> <p><input type="submit" value="送信してみる" name="BT" onclick="return fCONCAT();"></p> </form> </body> </html> --------------------------------------------------- それと参考CGI --------------------------------------------------- #!/usr/bin/perl my %hIN; ## POSTデータを受信してハッシュ%hINに入れる read(STDIN, $paramPost, $ENV{'CONTENT_LENGTH'}); my @tmpData=split(/&/,$paramPost); foreach(@tmpData){ my ($sK,$sV)=split(/=/,$_); ## 今回の場合キーやデータに全角文字は含まれないので不要ですが・・・下記4行 $sK =~ tr/+/ /; $sK =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ego; $sV =~ tr/+/ /; $sV =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ego; if(exists($hIN{$sK})){ ## 同じキー名があったら上書きせずに格納前に前のデータとの間にタブを入れて連結:col1がチェック分入るはず $hIN{$sK} .= "\t".$sV; }else{ $hIN{$sK}=$sV; } } ## ここからほぼ表示処理 print "Content-type: text/plain\n"; print "X-Content-Type-Options: nosniff\n\n"; ## 最近のIEアホ仕様対策 print "まずは加工前の受信データ\n"; print $paramPost."\n"; print "\nそして整理後の全受信データ一覧\n"; foreach $k (keys %hIN){ print $k." ---> ".$hIN{$k}."\n"; } print "\nそしてcolデータはどーなってるの\n"; print $hIN{'col'}."\n"; ## 分割処理:ただの配列に my @aDT = split(/;/,$hIN{'col'}); print "\ncolを分離した配列内データ一覧\n"; foreach(0..$#aDT){ print $_." ---> ".$aDT[$_]."\n"; } exit; --------------------------------------------------- > 現在あるデータベースを生かさなければならなく、 > そのデータが;仕切りで格納されています。 でも実情は良くわからないが質問との主旨からかけ離れていると思う データベースから取得したデータの加工方法が問題であって、チェックボックス云々の話とは・・・・ お仕事のならそのDBシステムを構築した会社に相談したほうが早いと思います。
- ralf124c
- ベストアンサー率52% (232/446)
途中の過程に意味があるのかどうか知りませんがフォームからCGIでデータを渡すという観点から以下の方法があります 1.JavaScriptで一回「;」区切りでまとめて隠しフォームに入れてPOSTで送信したものをCGIで受信して配列などへばらす 2.そのままPOSTしてCGI側でまとめたりばらしたりする 3.名前を変えてPOSTして素直に受け取る 質問の通りだと「1」でしょうけど「まとめてばらす」なんていう意味の無い不要な処理が増えませんか? 例えば、とばし先でバラすんならいちいちデータを一個にまとめなくてもバラで飛ばせば・・・ POSTでもGETでも、1・2・4にチェックして飛ばしたなら、受信したものは「col1=1&col1=2&col1=4」になってんるんだから「&」と「=」でばらしてやればよいかと POSTとかGETの受信データは外部ツールやモジュールに頼らず基本的なところから自分で作ってみれば理解が早いはず。 まずはGETメソッドで試されると吉でしょう。
お礼
ありがとうございます。大変参考になりました。
補足
ありがとうございます。 現在あるデータベースを生かさなければならなく、 そのデータが;仕切りで格納されています。 Javascript の知識が無く、どのようにしたら良いかがわかりません。 よろしかったらご教授ください。
お礼
ありがとうございます。大変参考になりました。