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;
昨日やっちゃったミスなんですが・・・エディターで書いてる時に「 」を全角で書いていて 見た目は全く一緒なんだ(−−;これは全角「」これは半角「{」なんです_(^^;)ゞイヤー
このミスを見つけるのにまた夜中まで・・・・(−−;