200X/00/13 昨日の夜にネット友に、「二重投稿対策しなきゃ!」って言われて・・・ 考えてみました(⌒^⌒)bうふっ カキコして、リロードボタン(更新)等などを押すと、カキコがダブって表示されてしまうのを防ぐ ようにプログラムを修正するのですが・・・ ついでに、名前欄とカキコ欄になにも書かないで投稿するのも防ぎ、連続投稿も防ぎ、submitの連続押し も防いでしまう!!優れもの???を考えました(*^^*ゞ 我ながら上出来だなぁ〜なんて(-_☆)キラリ エラーのメッセージも書き込み欄の下に良い感じで表示させる!!超COOL(−−; ($name eq "" or $memo eq "") nameかmemoになにも書かれていない場合はエラーを表示 ($memo eq $memo1) それから管理ファイル(kanrifile)の最新データを開いて、書き込み内容のデータをmemo1って名前を置き換えたものと 今読みこもうとしている書き込み内容データmemoと比較して、一緒だったらエラーを表示 共にエラーのコメントは緑の部分にかわいく表示させる(*^^*ゞ←これがなかなかかわいい場所で、普通エラーのページは 別ページに作ってあって、書き込みの出来るページに戻るっていう動作になりますが、これだと、いきなり画面が変わらずに エラーのコメントを表示するんです(⌒^⌒)bうふっ 《これを表示させるとこんな感じ→ 「dbbbs7.html」》 #!/usr/local/bin/perl require './jcode.pl'; print "Content-type: text/html\n\n";#上に持ってきた if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $naka, $ENV{"CONTENT_LENGTH"}); @nakami = split('&', $naka); foreach(@nakami) { ($hidari, $migi) = split("="); $migi =~ tr/+/ /; $migi =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; #データのデコード部分「改行」が自分で書いてて解らなくなったのでおさらい(*^^*ゞ $migi =~ s/<;/&lt;/g; #<を表示させる $migi =~ s/>;/&gt;/g; #>を表示させる(2つでタグが無効)。 $migi =~ s/\r?\n/<BR>/g; #Winの(\r\n)もUNIXやLinux(\n)の改行も<BR>に置き換。(これが無いと私が考えた2重投稿拒否は無視される) $migi =~ s/&lt;BR&gt;/<BR>/gi; #<BR><br>のタグは有効にします。 (改行の制御部分ですが&が全角は本当は半角です。) $kaku{$hidari} = $migi; } ( $byou, $hun, $ji, $hi, $tuki, $toshi, $you ) = localtime( time ); $hyouji = sprintf( "%04d年%02d月%02d日",$toshi + 1900, $tuki + 1, $hi ); $youbi = sprintf( "(%s)", ( "日", "月", "火", "水", "木", "金", "土")[$you] ); $jikan = sprintf( "%02d時%02d分%02d秒", $ji, $hun, $byou ); $name = $kaku{'name'}; $memo = $kaku{'memo'}; $ip = $ENV{'REMOTE_ADDR'}; $reurl = $ENV{'HTTP_REFERER'}; $host = $ENV{'REMOTE_HOST'}; $bura = $ENV{'HTTP_USER_AGENT'}; $logfile = "./logfile.txt"; $kanrifile = "./kanrifile.txt"; open( NIJYUU, "$kanrifile"); $nijyuu = <NIJYUU>; ( $a, $b, $memo1, $d, $e, $f, $g, $h, $i, $j ) = split( /\t/, $nijyuu ); close( NIJYUU ); if($name eq "" or $memo eq "") { $error="エラーで〜す!nameとmemoは必ず記入してくださいd(^-^)ネ!"; } elsif($memo eq $memo1){ $error="エラーで〜す!2重投稿になっちゃいました(*^^*ゞ。"; } else{ foreach( 1..5) { if( mkdir($lock, 0755 ) ){ last; } else{ sleep( 1 ); } } open(LOGFILE, "+<$logfile"); @logs = <LOGFILE>; $ban = $logs[0] +1; $memo =~ s/\r?\n/<BR>/g; $logdata = $ban."<table><tr><td><b>$name</b>[ $hyouji$youbi$jikan ]</td></tr><td>$memo</td></tr></table><hr>"."\n"; unshift( @logs, $logdata ); seek( LOGFILE, 0, 0 ); print LOGFILE @logs; truncate( LOGFILE, tell( LOGFILE )); close( LOGFILE ); open(KANRIFILE, "+<$kanrifile"); @kanri = <KANRIFILE>; $nan = $kanri[0] +1; $kanridata = $nan."\t".$name."\t".$memo.追加"\t".$hyouji."\t".$youbi."\t".$jikan."\t".$ip."\t".$reurl."\t".$host."\t".$bura."\n"; unshift( @kanri, $kanridata ); seek( KANRIFILE, 0, 0 ); print KANRIFILE @kanri; truncate( KANRIFILE, tell( KANRIFILE )); close( KANRIFILE ); rmdir( $lock ); } } print <<MAMA; <META HTTP-EQUIV="Content-type"CONTENT="text/html"CHARSET="Shift_JIS"> <HTML> <HEAD><TITLE>TESTBBS</TITLE></HEAD> <BODY LINK="#000000" VLINK="#000000"> <FORM METHOD="POST" ACTION=\"****.cgi\">\n name<INPUT NAME="name"><P> message<TEXTAREA NAME="memo" ROWS="4" COLS="60"> </TEXTAREA><P> <INPUT TYPE="submit" VALUE="submit"> <INPUT TYPE="reset" VALUE="reset"> <HR> MAMA print "<font color='red'><li>$error</font><BR>"; print "<hr>"; $logfile = "./logfile.txt"; open(LOGFILE, "+<$logfile"); @logs = <LOGFILE>; print $logs[0]; print $logs[1]; print $logs[2]; print $logs[3]; print $logs[4]; close( LOGFILE ); print "</form>"; print "</html>"; exit; 昨日やっちゃったミスなんですが・・・エディターで書いてる時に「 {」を全角で書いていて 見た目は全く一緒なんだ(−−;これは全角「{」これは半角「{」なんです_(^^;)ゞイヤー このミスを見つけるのにまた夜中まで・・・・(−−; |