- 締切済み
チェックボックスの複数選択の値を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で区切られていると思っているのですが、間違いでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- steel_gray
- ベストアンサー率66% (1052/1578)
#2です。 cgi-lib(ReadParse)を利用しているなら、\0で区切られた文字列として格納されているとう前提も、提示されてる分割、再連結のコードにも間違いはありませんので他の部分に問題があるとしか・・・ ReadParseでフォームデータを取り込んでから、 質問文にある処理にたどり着く間でデータを加工している部分(文字コード変換、エスケープ処理等々)があるのでしょうからそこを調べてみては。
- steel_gray
- ベストアンサー率66% (1052/1578)
>チェックボックスの値は\0で区切られていると思っている フォームデータの取り込みにcgi-lib(ReadParse)を使っているならそうなりますね。 そうでなければ、$in{'Q6_ans'}【%in】にフォームデータを読み込むあたりの処理しだいです。
- fumufumu_2006
- ベストアンサー率66% (163/245)
>チェックボックスの値は\0で区切られていると思っているのですが、間違いでしょうか? それは、$in{}をどう読み込んでいたかにかかっていると思います。 多分cgiの中に、 read(STDIN, $???, $ENV{'CONTENT_LENGTH'}); と言う所があると思いますが、ここ付近でパラメータを読み込んでいます。 その後ろに、$in{}に読み込んでいる、 $in{'??'}.=$????; みたいな所がありませんか? この前後で\0の文字があるか、あるならどうしてるかにかかります。 上だけだと、ただ'23'になります。 もしもそうなら、ここを、 if($in{'??'} ne ''){$in{'??'}.='\0'} $in{'??'}.=$????; にすれば、\0で区切られます。 p.s. 前後の関係を見ないと、確かな事は言えませんが・・・
補足
本システムではcgi-libを使用しています。 おっしゃっているのはcgi-libの中身のことでしょうか?
補足
cgi-lib(ReadParse)を使用しています。