Perl BBS 掲示板 改行処理
改行処理について教えてください。
今まで書き込み処理で
unshift @DATA, "$tm,$FORM{'name'},$FORM{'title'},$FORM{'text'}\n";
としていたのですが、これを
use CGI;
my $form = new CGI;
my $NAME = $form->param('name');
my $TITLE = $form->param('title');
my $TEXT = $form->param('text');
unshift(@DATA,"$tm,$NAME,$TITLE,$TEXT\n");
に変更しました。
すると
sub loadFormdata
が聞かなくなり、
改行処理他が対応しなくなってしまいました、
この場合、 loadFormdataの部分のどこを変えればよいでしょうか?
|------書き込み処理------|
sub printdata{
use CGI;
my $form = new CGI;
&loadFormdata();
open(FILE, "<$FILE");
eval{ flock(FILE, 1) };
@DATA = <FILE>;
close FILE;
my $tm = time;
my $NAME = $form->param('name');
my $TITLE = $form->param('title');
my $TEXT = $form->param('text');
unshift(@DATA,"$tm,$NAME,$TITLE,$TEXT\n");
while(@DATA > $MAX) {
pop @DATA;
}
open(FILE, ">$FILE") or die("error :$!");
eval{ flock(FILE, 2) };
print FILE @DATA;
close FILE;
}
|------改行処理他------|
sub loadFormdata
{
my ($query, $pair);
if($ENV{'REQUEST_METHOD'} eq 'POST') {
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
}
else {
$query = $ENV{'QUERY_STRING'};
}
foreach $pair (split(/&/, $query)) {
my $key = ("$NAME,$TITLE,$TEXT");
my ($key, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
$value =~ s/&/&/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/\x0D\x0A\s*/<br>/g;
$value =~ s/\s+/ /;
$FORM{$key} = $value;
}
}
お礼
ありがとうございました。できました! こんなに簡単できるとは。 本当に助かりました。 しかも早い回答ありがとうございました。 追記:後でこのログをみた人向け 実際には以下のように書きました。 DBのインサートに使うには'a','b'と ' が必要だったので追加しました my @field_name = split(/,/,$db_field); #最後の2フィールドは置き換えるため不要、よって削除 pop(@field_name); pop(@field_name); # ,'を各要素につける。 my $db_value = join '\',\'' => @FORM{@field_name}, $date, $time; #最初と最後に'を付加して完成 $db_value = '\'' . $db_value . '\'';