新規記事投稿 フォロー記事投稿 記事のキャンセル
From: 三葉工房の管理者 <nature-create@amy.hi-ho.ne.jp>
Subject: jcode.pl一本で情報を渡してみたい
Date: 1999/01/19 17:38:21

さきほどの三葉工房です。アドバイスありがとうごさいます。

いじとう様のおっしゃられた通り,cgi-libも利用してJ.code.plも利用しての
スクリプトを実行しました。
 cgi-libさえあれば,当然,inputからの情報を渡す事が出来ます。
(inputでは,なく***cgi?***=***と言うジャンプには,ReadParseは,
利用出来ないのですか。その同一スクリプト内においてのジャンプリンクの方法
も教えていただきたいです。)

実は,私がアドバイス願いたいのは,cgi-libを一切使用せず,jcode.plだけで
フォームからの情報を渡す方法です。
 その方法こそが,perlのプロを目指す為の最低限知っておかなければテクニック
だと思うからです。

 method=post情報を渡せない原因らしい原因を精一杯探りましたが,$_と=の間や$name =~ tr/+/ /;
の~とtrの間も半角開けするのかと色々と試して見ましたが,やはり,method=post情報を渡せず
サーバーエラー500にされる原因が全く見つけられず,ダウンロードしたBBSスクリプトも
私のと以下の文が全く同一の条件
if ($ENV{'REQUEST_METHOD'} eq 'GET')
{
@pairs = split(/&/, $ENV{'QUERY_STRING'});
}
elsif ($ENV{'REQUEST_METHOD'} eq 'POST')
{
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
}
else {
&noname;
}

foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode'convert(*value,'sjis');
&jcode'convert(*name,'sjis');
$value =~ s///g;
$value =~ s///g;
$value =~ s/\r/
//g; $value =~ s/\n/
//g; $in{$name} = $value; } if ($in{'submit'} eq '登録') { ✓ &toppage; } else {&toppage;} なのに関わらずその先輩のダウンロードしたスクリプトは,ちゃんと動作しています。 ですが,何故,同じパラメータの設定なのに私のだけ情報をわたせないのでしょうね。 又,スクリプトに多少の訂正がございましたので,又,こないだの問題スクリプトを下部 にコピーいたします。 後,スクリプト関係の書籍のご紹介もお待ちしております。 どうか,改めましてアドバイス宜しくお願いします。 問題スクリプト=golygth.cgi **************** #!/usr/local/bin/perl $|=1; require './jcode.pl'; ($sec,$min,$hour,$day,$mon,$year,$wday)=localtime(time); $mon++; $seirei = ($year+1900); $wareki = ($year-88); $BaseDir = "$ENV{'HOME'}/html/search"; $NEWURL= "http://www.amy.hi-ho.ne.jp/cgi-bin/user/nature-create/golygth.cgi"; $coment = $in{'coment'}; $name = $in{'yourname'}; $mail = $in{'mail'}; $gurl = $in{'gurl'}; $hpagename = $in{'hpagename'}; $newmg = "newmg.dat"; @week = ("日","月","火","水","木","金","土"); $yobi = $week[$wday]; if($man<10){$mon="0$mon";} if($day<10){$day="0$day";} if($hour<10){$hour="0$hour";} if($min<10){$min="0$min";} if($sec<10){$min="0$sec";} $date = "$seirei年(平成$wareki年)$mon月$day日 $yobi曜日$hour時$min分$sec秒"; #最高コメント数制限 $maxcment = "105"; #最低コメント数制限 $remaxcment = "52"; #過剰コメント不足の最大数値 $mostsmall = "28"; #過剰コメント超過の最小数値 $mostbig = "128"; #過剰コメント不足の差不足設定エラー数値下限 $ersnall = ($remaxcment-20); #過剰コメント超過の差不足設定エラー数値上限 $erbig = ($maxcment+20); $dbsmall = ($remaxcment-$ersnall); $dbbig = ($erbig-$maxcment); if($mostsmall>$ersnall){print <<"MOTER"; Content-type: text/html 過剰コメント不足エラー
過剰コメント不足エラー

過剰コメント不足の最低基準値$remaxcmentとの差が$dbsmall以内です。

適切な数値に書き直して下さい!
MOTER exit; } if($mostbig<$erbig){print <<"REMOTER"; Content-type: text/html 過剰コメント超過エラー
過剰コメント超過エラー

過剰コメント超過の最大基準値$maxcmentとの差が$dbbig以内です。

適切な数値に書き直して下さい!
REMOTER exit; } $smallloss = $remaxcment-$mostsmall; $bigloss = $mostbig-$maxcment; $wordcnt = length($in{'coment'}); $wordbit = ($wordcnt/2); $overtop = ($wordbit-$maxcment); $overdown = ($remaxcment-$wordbit); #1を選択で新規記事は,リスト最上段,それ以外は,リスト最下段 $enty ="1"; #一度に掲載する記事数 $maxmsg ="4"; if ($ENV{'REQUEST_METHOD'} eq 'GET') { @pairs = split(/&/, $ENV{'QUERY_STRING'}); } elsif ($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); @pairs = split(/&/, $buffer); } else { &noname; } foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); &jcode'convert(*name,'sjis'); $value =~ s///g; $value =~ s///g; $value =~ s/\r/
//g; $value =~ s/\n/
//g; $in{$name} = $value; } if ($in{'submit'} eq '登録') { ✓ &toppage; } else {&toppage;} if($in{'action'} eq 'repage'){&rever;} sub toppage{ open (SSTBOOK, "$BaseDir/$newmg") ||die "ファイルが開きません!\n, 何処かの構文が間違っています!"; @Data=; close SSTBOOK; $cnturl = @Data; print "Content-type: text/html\n\n"; print "\n"; print "\n"; print "進性能掲示板(V-up.スクリプト)\n"; print "\n"; print "\n"; print "

\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "進性能掲示板(V-up.スクリプト)\n"; print "\n"; print "
\n"; print "(注意!)此の試験実行掲示板のコメント文字数は,$remaxcment文字以上$maxcment文字以内の範囲に制限されていますので,その範囲内の文字数で御記入願います。
現在時刻:$date
\n"; print "
\n"; print "
\n"; print "\n"; print "MISTUBA SEARCHPAGE\n"; print "\n"; print "
\n"; print "
\n"; print "
\n"; print "\n"; print "変更.削除\n"; print "\n"; print "
\n"; print "
\n"; print "\n"; print "

\n"; print "

\n"; print "

\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "登録者名\n"; print "\n"; print "
\n"; print "

\n"; print "\n"; print "

\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "Eメールアドレス\n"; print "\n"; print "
\n"; print "

\n"; print "\n"; print "

\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "登録者のホームページ名\n"; print "\n"; print "
\n"; print "

\n"; print "\n"; print "

\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "ホームページのURL\n"; print "\n"; print "
\n"; print "

\n"; print "\n"; print "

\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "\n"; print "コメント\n"; print "\n"; print "
\n"; print "

\n"; print "\n"; print "

\n"; print "

\n"; print "\n"; print "

\n"; print "\n"; print "

\n"; print "
\n"; print "
\n"; print "
\n"; print "\n"; print "此れ迄の書き込み:$cnturl件が登録されています。\n"; print "\n"; print "
\n"; print "
\n"; if($enty eq "0"){@Data=reverse(@Data);} foreach $match(@Data){ @catchin=split(/&&/, $match); print "\n"; print "$catchin[1]\n"; print "\n"; print ":$catchin[2]\n"; print "
\n"; print "\n"; print "$catchin[4]\n"; print "\n"; print "
\n"; print "$catchin[5]"; print "
\n"; } print "\n"; print "\n"; } sub rever{ print <<"MARCAR"; Content-type: text/html 変更.削除ROOM
変更.削除ROOM

今は,テスト中です。暫くお待ち願います!

掲示板へ戻る
MARCAR exit;} sub check{ if ($in{'yourname'} eq "") {&noname;} sub noname{print <<"NONAME"; Content-type: text/html 名前が記入されていません!
名前が記入されていません!

名前をフォームに記入為無ければ登録出来ません。

掲示板へ戻る
$date

NONAME exit; } if($wordbit>$mostbig){print <<"MOROVER"; Content-type: text/html かなりコメント数が$overtop個もオーバーしました! 彼方の記入されたコメント数は $wordbit個で,当フォームは,基準値の$remaxcment~$maxcment個よりコメント数が$bigloss個以上も多い場合に時に当ページが出力されてしまいます。

そのコメント数は基準の$remaxcment~$maxcment個に$overtop個ものかなりのオーバーです。 MOROVER exit;} if($wordbit>$maxcment){ print <<"OVER"; Content-type: text/html コメント数が$overtop個越えています! 彼方の記入されたコメント数は $wordbit個です。

そのコメント数は基準の$remaxcment~$maxcment個より$overtop個オーバーしています。 OVER exit;} if($wordbit>0){if($wordbit<$mostsmall){print <<"MORDOWN"; Content-type: text/html かなりコメント数が$overdown個も足りません! 彼方の記入されたコメント数は $wordbit個で,当フォームは,基準値の$remaxcment~$maxcment個よりコメント数が$smallloss個以上も少ない時に当ページが出力されてしまいます。

そのコメント数は基準の$remaxcment~$maxcment個に$overdown個ものかなりの不足です。 MORDOWN exit;} if($wordbit<$remaxcment){print <<"DOWN"; Content-type: text/html コメント数が$overdown個足りません! 彼方の記入されたコメント数は $wordbit個です。

そのコメント数は基準の$remaxcment~$maxcment個に$overdown個不足しています。 DOWN exit;} } elsif ($in{'coment'} eq ""){print <<"NOCMT"; Content-type: text/html コメントが記入されていません!

コメントが記入されていません!

コメントをフォームに記入為無ければ登録出来ません。

掲示板へ戻る
$date

NOCMT exit;} $coment =~ s/\r\n/
/g; $coment =~ s/\r/
/g; $coment =~ s/\n/
/g; &resit; sub resit{ if(-e "$BaseDir/$newmg"){ open (SSTBOOK, ">>$BaseDir/$newmg") || die "ファイルが開きません!\n, 何処かの構文が間違っています!"; print SSTBOOK "$mail&&$name&&$date&&$gurl&&$hpagename&&$coment\n"; close SSTBOOK;} #掲載メッセージの処理 if(-e "$BaseDir/$newmg"){open (NEW, "$BaseDir/$newmg") || die "ファイルが開きません!\n, 何処かの構文が間違っています!"; @lines = ; close NEW;} unshift(@lines,"$mail&&$name&&$date&&$gurl&&$hpagename&&$coment\n"); splice(@lines,$maxmsg); open (NEW, ">$BaseDir/$newmg") || die "ファイルが開きません!\n, 何処かの構文が間違っています!"; flock(NEW,6); foreach(@lines){ print NEW;} close NEW; print <<"REPLAY"; Content-type: text/html $in{'yourname'}さん:書き込みを御受け致しました。 $in{'yourname'}さん,彼方の記入なされたコメント数は,$wordbit個でコメント数規定に合致しました。
それに伴い書き込みを御受け致しました。どうもありがとうございました。

御帰りのページはこちらでございます。 REPLAY exit;} } __END__