チェックボックス 横並びに保存
htmlファイルから、
<form action="./ppp.cgi" method="POST">
<table border="1">
<tr>
<td>
好きな色(複数選択可):</td>
<td>
<input type="checkbox" name="color" value="white">白
<input type="checkbox" name="color" value="red">赤
<input type="checkbox" name="color" value="green">緑
<input type="checkbox" name="color" value="pink">桃色
<input type="checkbox" name="color" value="yellow">黄色
<input type="checkbox" name="color" value="purple">紫
<input type="checkbox" name="color" value="orange">橙色
<input type="checkbox" name="color" value="blue">青
<input type="checkbox" name="color" value="black">黒</td></tr>
</table><br>
<input type="submit" value=" 送信 ">
<input type="reset" value=" クリア ">
でデータを送信して、
-------------------------------------
#!/usr/bin/perl
require './jcode.pl';
$file = "houkoku.txt";
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else { $buffer = $ENV{'QUERY_STRING'}; }
open( WRITE, "+< $file" );
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode'convert(*value,'sjis');
# タグ処理
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/\t//g;
$value =~ s/\r\n/\n/g;
$value =~ s/\r/\n/g;
$value =~ s/^\s+//;
$value =~ s/\s+$//;
$FORM{$name} .= (defined $FORM{$name}) ? "," . $value : $value;
@value = $value;
print WRITE"@value\n";
}
foreach ( keys %FORM ) {
if( $FORM{$_} eq '' ) { $FORM{$_} = '入力がありません'; }
}
if ( $FORM{'color'} eq '' ) { $FORM{'color'} = '入力がありません'; }
print "Content-Type: text/html\n\n";
print <<END_HTML;
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body>
<center>
<table border="1">
<td>
あなたの好きな色</td>
<td>
$FORM{'color'}</td></tr>
</table>
</center>
</body>
</html>
END_HTML
exit;
----------------------------------
でデータを受け取って、houkoku.txtに書き込みをしたいのですが、
一応書き込みはされていますが、縦にデータが並んでいます。
横にカンマ仕切りで、white,yellow,redと保存するにはどうしたらよいでしょうか。
よろしくお願いします。
お礼
ありがとうございます。 意図する動作が出来ました。 foreach命令を知りませんでした。 foreachのようにデータではなく、データ数を返すような命令文はありますか? 表示結果[4](全部選択した場合) 教えていただければ有難いです。 本当にありがとうございました。