さきほどの三葉工房です。アドバイスありがとうごさいます。
いじとう様のおっしゃられた通り,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 "進性能掲示板(V-up.スクリプト)\n";
print "\n";
print " \n";
print " \n";
print "\n";
print "\n";
print "(注意!)此の試験実行掲示板のコメント文字数は,$remaxcment文字以上$maxcment文字以内の範囲に制限されていますので,その範囲内の文字数で御記入願います。
現在時刻:$date\n";
print " \n";
print " \n";
print "\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 "此れ迄の書き込み:$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__