プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。
表記の通りチェックボックスで複数選択する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で区切られていると思っているのですが、間違いでしょうか?

A 回答 (3件)

#2です。


cgi-lib(ReadParse)を利用しているなら、\0で区切られた文字列として格納されているとう前提も、提示されてる分割、再連結のコードにも間違いはありませんので他の部分に問題があるとしか・・・

ReadParseでフォームデータを取り込んでから、
質問文にある処理にたどり着く間でデータを加工している部分(文字コード変換、エスケープ処理等々)があるのでしょうからそこを調べてみては。
    • good
    • 0

>チェックボックスの値は\0で区切られていると思っている


フォームデータの取り込みにcgi-lib(ReadParse)を使っているならそうなりますね。
そうでなければ、$in{'Q6_ans'}【%in】にフォームデータを読み込むあたりの処理しだいです。

この回答への補足

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

補足日時:2007/09/23 10:48
    • good
    • 0

>チェックボックスの値は\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の中身のことでしょうか?

補足日時:2007/09/23 10:46
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!