• 締切済み

チェックボックスの複数選択の値を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で区切られていると思っているのですが、間違いでしょうか?

みんなの回答

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.3

#2です。 cgi-lib(ReadParse)を利用しているなら、\0で区切られた文字列として格納されているとう前提も、提示されてる分割、再連結のコードにも間違いはありませんので他の部分に問題があるとしか・・・ ReadParseでフォームデータを取り込んでから、 質問文にある処理にたどり着く間でデータを加工している部分(文字コード変換、エスケープ処理等々)があるのでしょうからそこを調べてみては。

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.2

>チェックボックスの値は\0で区切られていると思っている フォームデータの取り込みにcgi-lib(ReadParse)を使っているならそうなりますね。 そうでなければ、$in{'Q6_ans'}【%in】にフォームデータを読み込むあたりの処理しだいです。

souta_n
質問者

補足

cgi-lib(ReadParse)を使用しています。

回答No.1

>チェックボックスの値は\0で区切られていると思っているのですが、間違いでしょうか? それは、$in{}をどう読み込んでいたかにかかっていると思います。 多分cgiの中に、 read(STDIN, $???, $ENV{'CONTENT_LENGTH'}); と言う所があると思いますが、ここ付近でパラメータを読み込んでいます。 その後ろに、$in{}に読み込んでいる、 $in{'??'}.=$????; みたいな所がありませんか? この前後で\0の文字があるか、あるならどうしてるかにかかります。 上だけだと、ただ'23'になります。 もしもそうなら、ここを、 if($in{'??'} ne ''){$in{'??'}.='\0'} $in{'??'}.=$????; にすれば、\0で区切られます。 p.s. 前後の関係を見ないと、確かな事は言えませんが・・・

souta_n
質問者

補足

本システムではcgi-libを使用しています。 おっしゃっているのはcgi-libの中身のことでしょうか?

関連するQ&A