プログラム質問箱への投稿
記事番号00586へのフォローを投稿します。
お名前(ペンネイムで結構ですが必要です)
(
ブラウザに個人情報を覚えさせない)
電子メイルアドレス(必要です)
題名(必要です)
Home Page がある方はリンク希望先の URL を記載して下さい
会議室に載せたい内容を以下へお書き下さい (
HTMLを解釈せずにそのまま表示)
1月19日に、三葉工房の管理者さんは書きました。 >さきほどの三葉工房です。アドバイスありがとうごさいます。 > >いじとう様のおっしゃられた通り,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/<!--(.|\n)*-->//g; >$value =~ s/<html(.|\n)*//ig; >$value =~ s/<script(.|\n)*//ig; >$value =~ s/<table(.|\n)*//ig; >$value =~ s/<form(.|\n)*//ig; >$value =~ s/<html(.|\n)*//ig; >$value =~ s/<xmp(.|\n)*//ig; >$value =~ s/\r\n/<br>//g; >$value =~ s/\r/<br>//g; >$value =~ s/\n/<br>//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 > ><html><head><title>過剰コメント不足エラー</title></head> ><body bgcolor=\"#ccffff\"> ><center><font color=\"#550000\" size=6><b>過剰コメント不足エラー</b></font></center><p><font color=\"#000055\" size=5><b>過剰コメント不足の最低基準値$remaxcmentとの差が$dbsmall以内です。</b></font><p><center><font color=\"#663300\" size=5><b>適切な数値に書き直して下さい!</b></font></center></body></html> >MOTER >exit; >} >if($mostbig<$erbig){print <<"REMOTER"; >Content-type: text/html > ><html><head><title>過剰コメント超過エラー</title></head> ><body bgcolor=\"#ffff99\"> ><center><font color=\"#550000\" size=6><b>過剰コメント超過エラー</b></font></center><p><font color=\"#000055\" size=5><b>過剰コメント超過の最大基準値$maxcmentとの差が$dbbig以内です。</b></font><p><center><font color=\"#663300\" size=5><b>適切な数値に書き直して下さい!</b></font></center></body></html> >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/<!--(.|\n)*-->//g; >$value =~ s/<html(.|\n)*//ig; >$value =~ s/<script(.|\n)*//ig; >$value =~ s/<table(.|\n)*//ig; >$value =~ s/<form(.|\n)*//ig; >$value =~ s/<html(.|\n)*//ig; >$value =~ s/<xmp(.|\n)*//ig; >$value =~ s/\r\n/<br>//g; >$value =~ s/\r/<br>//g; >$value =~ s/\n/<br>//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=<SSTBOOK>; >close SSTBOOK; >$cnturl = @Data; > >print "Content-type: text/html\n\n"; > >print "<html>\n"; >print "<head>\n"; >print "<title>進性能掲示板(V-up.スクリプト)</title>\n"; >print "</head>\n"; >print "<body bgcolor=\"orange\">\n"; >print "<p>\n"; >print "<table bgcolor=\"black\" border=5>\n"; >print "<tr>\n"; >print "<th>\n"; >print "<font color=\"orange\"size=5>\n"; >print "<b>進性能掲示板(V-up.スクリプト)</b>\n"; >print "</font>\n"; >print "</th>\n"; >print "</tr>\n"; >print "<tr>\n"; >print "<td>\n"; >print "<font color=\"yellow\"size=4>(注意!)此の試験実行掲示板のコメント文字数は,$remaxcment文字以上$maxcment文字以内の範囲に制限されていますので,その範囲内の文字数で御記入願います。<br> >現在時刻:$date</font>\n"; >print "</td>\n"; >print "</tr>\n"; >print "<tr>\n"; >print "<th>\n"; >print "<center>\n"; >print "<a href=\"/nature-create/search/index.html\">\n"; >print "<font color=\"yellow\"size=4>MISTUBA SEARCHPAGE</font>\n"; >print "</a>\n"; >print "</center>\n"; >print "</th>\n"; >print "</tr>\n"; >print "<tr>\n"; >print "<th>\n"; >print "<center>\n"; >print "<a href=\"/cgi-bin/user/nature-create/golygth.cgi?action=repage\">\n"; >print "<font color=\"yellow\"size=4>変更.削除</font>\n"; >print "</a>\n"; >print "</center>\n"; >print "</th>\n"; >print "</tr>\n"; >print "</table>\n"; >print "</center>\n"; >print "<p>\n"; >print "<form method=POST action=\"golygth.cgi\" >\n"; >print "<p>\n"; >print "<table bgcolor=\"#ffcc99\" border=5>\n"; >print "<tr>\n"; >print "<th>\n"; >print "<font color=\"navy\"size=4>\n"; >print "<b>登録者名</b>\n"; >print "</font>\n"; >print "</th>\n"; >print "</tr>\n"; >print "</table>\n"; >print "<p>\n"; >print "<input name=\"yourname\" size=45>\n"; >print "<p>\n"; >print "<table bgcolor=\"#ffcc99\" border=5>\n"; >print "<tr>\n"; >print "<th>\n"; >print "<font color=\"navy\"size=4>\n"; >print "<b>Eメールアドレス</b>\n"; >print "</font>\n"; >print "</th>\n"; >print "</tr>\n"; >print "</table>\n"; >print "<p>\n"; >print "<input name=\"mail\" size=45>\n"; >print "<p>\n"; >print "<table bgcolor=\"#ffcc99\" border=5>\n"; >print "<tr>\n"; >print "<th>\n"; >print "<font color=\"navy\"size=4>\n"; >print "<b>登録者のホームページ名</b>\n"; >print "</font>\n"; >print "</th>\n"; >print "</tr>\n"; >print "</table>\n"; >print "<p>\n"; >print "<input name=\"hpagename\" size=60>\n"; >print "<p>\n"; >print "<table bgcolor=\"#ffcc99\" border=5>\n"; >print "<tr>\n"; >print "<th>\n"; >print "<font color=\"navy\"size=4>\n"; >print "<b>ホームページのURL</b>\n"; >print "</font>\n"; >print "</th>\n"; >print "</tr>\n"; >print "</table>\n"; >print "<p>\n"; >print "<input name=\"gurl\" value=\"http://\" value=size=60>\n"; >print "<p>\n"; >print "<table bgcolor=\"#ffcc99\" border=5>\n"; >print "<tr>\n"; >print "<th>\n"; >print "<font color=\"navy\"size=4>\n"; >print "<b>コメント</b>\n"; >print "</font>\n"; >print "</th>\n"; >print "</tr>\n"; >print "</table>\n"; >print "<p>\n"; >print "<textarea name=\"coment\" rows=4 cols=60 wrap=\"soft\"></textarea>\n"; >print "<p>\n"; >print "<center>\n"; >print "<input type=submit name=\"submit\" value=\"登録\">\n"; >print "<p>\n"; >print "<input type=reset value=\"リセット\">\n"; >print "</center>\n"; >print "</form>\n"; >print "<hr size=5>\n"; >print "<center>\n"; >print "<font color=\"#330066\" size=5>\n"; >print "<b>此れ迄の書き込み:$cnturl件が登録されています。</b>\n"; >print "</font>\n"; >print "</center>\n"; >print "<hr size=5>\n"; >if($enty eq "0"){@Data=reverse(@Data);} >foreach $match(@Data){ >@catchin=split(/&&/, $match); >print "<a href=\"mailto:$catchin[0]\">\n"; >print "<font color=\"#006600\" size=4>$catchin[1]</font>\n"; >print "</a>\n"; >print "<font color=\"#000066\" size=3>:$catchin[2]</font>\n"; >print "<br>\n"; >print "<a href=\"$catchin[3]\" target=\"new\">\n"; >print "<font color=\"#990066\" size=3>$catchin[4]</font>\n"; >print "</a>\n"; >print "<br>\n"; >print "<font color=\"#330000\" size=3>$catchin[5]</font>"; >print "<hr size=5>\n"; >} >print "</body>\n"; >print "</html>\n"; >} > >sub rever{ >print <<"MARCAR"; >Content-type: text/html > ><html><head><title>変更.削除ROOM</title></head> ><body bgcolor=\"#00ff00\"> ><center><font color=\"#550000\" size=6><b>変更.削除ROOM</b></font></center><p> ><font color=\"#000055\" size=5><b>今は,テスト中です。暫くお待ち願います!</b></font><p><center><a href=\"golygth.cgi\"><font color=\"#663300\" size=5><b>掲示板へ戻る</b></font></a></center></body></html> >MARCAR >exit;} > >sub check{ >if ($in{'yourname'} eq "") {&noname;} >sub noname{print <<"NONAME"; >Content-type: text/html > ><html><head><title>名前が記入されていません!</title></head> ><body bgcolor=\"#ccff99\"> ><center><font color=\"#550000\" size=6><b>名前が記入されていません!</b></font><p><font color=\"#000055\" size=5><b>名前をフォームに記入為無ければ登録出来ません。</b></font><p><table bgcolor=\"#000000\" border=5><tr><th><a href=\"golygth.cgi\"><font color=\"#ccccff\" size=5>掲示板へ戻る</font></a></th></tr><tr><th><font color=\"#00ff00\" size=5>$date</th></tr></table></center></body></html> >NONAME > exit; >} > >if($wordbit>$mostbig){print <<"MOROVER"; >Content-type: text/html > ><html><head><title>かなりコメント数が$overtop個もオーバーしました!</title></head> ><body bgcolor=\"\#cc0000\"> ><font color=\"\#ffff66\" size=5><b>彼方の記入されたコメント数は $wordbit個で,当フォームは,基準値の$remaxcment~$maxcment個よりコメント数が$bigloss個以上も多い場合に時に当ページが出力されてしまいます。</b> ></font><p> ><font color=\"\#ccffcc\" size=5>そのコメント数は基準の$remaxcment~$maxcment個に$overtop個ものかなりのオーバーです。 </font> ></body></html> >MOROVER >exit;} >if($wordbit>$maxcment){ print <<"OVER"; >Content-type: text/html > ><html><head><title>コメント数が$overtop個越えています!</title></head> ><body bgcolor=\"\#003399\"> ><font color=\"\#ffff66\" size=5><b>彼方の記入されたコメント数は $wordbit個です。</b> ></font><p> ><font color=\"\#ccffcc\" size=5>そのコメント数は基準の$remaxcment~$maxcment個より$overtop個オーバーしています。</font> ></body></html> >OVER >exit;} > >if($wordbit>0){if($wordbit<$mostsmall){print <<"MORDOWN"; >Content-type: text/html > ><html><head><title>かなりコメント数が$overdown個も足りません!</title></head> ><body bgcolor=\"\#110000\"> ><font color=\"\#ffff66\" size=5><b>彼方の記入されたコメント数は $wordbit個で,当フォームは,基準値の$remaxcment~$maxcment個よりコメント数が$smallloss個以上も少ない時に当ページが出力されてしまいます。</b> ></font><p> ><font color=\"\#ccffcc\" size=5>そのコメント数は基準の$remaxcment~$maxcment個に$overdown個ものかなりの不足です。 </font> ></body></html> >MORDOWN >exit;} > >if($wordbit<$remaxcment){print <<"DOWN"; >Content-type: text/html > ><html><head><title>コメント数が$overdown個足りません!</title></head> ><body bgcolor=\"\#660000\"> ><font color=\"\#ffff66\" size=5><b>彼方の記入されたコメント数は $wordbit個です。</b> ></font><p> ><font color=\"\#ccffcc\" size=5>そのコメント数は基準の$remaxcment~$maxcment個に$overdown個不足しています。 </font> ></body></html> >DOWN >exit;} >} > >elsif ($in{'coment'} eq ""){print <<"NOCMT"; >Content-type: text/html > ><html><head><title>コメントが記入されていません!</title></head> ><body bgcolor=\"#ffffcc\"> ><center><font color=\"#550000\" size=6><b>コメントが記入されていません!</b></font><p><font color=\"#000055\" size=5><b>コメントをフォームに記入為無ければ登録出来ません。</b></font><p><table bgcolor=\"#000000\" border=5><tr><th><a href=\"golygth.cgi\"><font color=\"#ccccff\" size=5>掲示板へ戻る</font></a></th></tr><tr><th><font color=\"#00ff00\" size=5>$date</th></tr></table></center></body></html> >NOCMT > exit;} >$coment =~ s/\r\n/<br>/g; >$coment =~ s/\r/<br>/g; >$coment =~ s/\n/<br>/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 = <NEW>; >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 > ><html><head><title>$in{'yourname'}さん:書き込みを御受け致しました。</title><meta http-equiv="refresh" content="5; url=$NEWURL "></head> ><body bgcolor=\"\#cc66ff\"> ><font color=\"\#660000\" size=5><b>$in{'yourname'}さん,彼方の記入なされたコメント数は,$wordbit個でコメント数規定に合致しました。</b></font><br><font color=\"\#ffff66\" size=5><b>それに伴い書き込みを御受け致しました。どうもありがとうございました。</b> ></font><p> ><font color=\"\#ccffcc\" size=5>御帰りのページは<a href=\"$NEWURL \">こちら</a>でございます。</font> ></body></html> >REPLAY >exit;} >} >__END__ >
ホームペーヂに戻る
nir@mvg.biglobe.ne.jp
Last Update: 2 December 1999