二重投稿を禁止するには?
[上に]
[前に]
[次に]
質問者
[E-Mail]
1999/12/22(水) 17:34:09
こんにちわ。
このたび、掲示板を設置しました。
とほほさんのBBSをベースにしたものです。
しかし、二重投稿が出来てしまうので、防止できないかと、
考えています。
よろしくお願い致します。
ではー
ラウォッチ
1999/12/22(水) 20:09:59
ログファイルの最新データと今入力したデータを比較すれば、
瞬時における二重投稿は防げるとおもいますが、
とほほさんは以下のように言っています。
「Netscapeサーバーで動かなかったので一時見送り」
とほほさんの回答を待ちましょう!
質問者
1999/12/24(金) 17:35:56
すばやいレスありがとうございます。
> ログファイルの最新データと今入力したデータを比較すれば、
> 瞬時における二重投稿は防げるとおもいますが、
> とほほさんは以下のように言っています。
> 「Netscapeサーバーで動かなかったので一時見送り」
> とほほさんの回答を待ちましょう!
../199903/99030026.htm
↑のことですよね。
Netscapeサーバーっていうのがあるんですね。(メモメモ)
そうですか。では、とほほさんの回答を待ちます。
ちなみに、サーバーはアパッチです。
ではー
質問者
1999/12/26(日) 18:06:45
こんにちわ。
色々と待っているのですがだんだん、したの方に来て、過去ログへ入ってしまいそうなので(^^;
特にプロバイダーは「Netscapeサーバー」ではないので、簡単なものでも良いので教えてくださらないでしょうか?
よろしくお願い致します。
ではー
ラウォッチ
1999/12/27(月) 19:59:49
遅くなりました。(年末でいろいろあって)
簡単ですが、以下の感じでどうでしょう。
#
# Read variables
#
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'});
@a = split(/&/, $query_string);
foreach $x (@a) {
($name, $value) = split(/=/, $x);
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
if ($jflag) {
&jcode'convert(*value, "euc");
}
if ($allow_html) {
$value =~ s/<!--/<!--/g;
$value =~ s/-->/-->/g;
} else {
$value =~ s/&/&/g;
$value =~ s/"/"/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
}
if ($jflag) {
&jcode'convert(*value, $ccode);
}
$FORM{$name} = $value;
}
#----------------------------------------------追加
$nam = $FORM{"FROM"}; # 名前
$msg = $FORM{"MESSAGE"}; # メッセージ
open(IN, "wwwboard.dat");
$line1 = <IN>; # ログファイル1行目
$line2 = <IN>; # ログファイル2行目(名前)
$line3 = <IN>; # ログファイル3行目(メッセージ一行目)
close(IN);
$rc_nam = index $line2, $nam;
$rc_msg = index $line3, $msg;
if($rc_nam != -1 && $rc_msg != -1){
print "Content-type: text/html\n";
print "\n";
print "<HTML>\n";
print "<BODY>\n";
print "<H2>二重投稿で〜す!</H2>\n";
print "<BODY>\n";
print "<HTML>\n";
exit;
}
#----------------------------------------------ここまで
}
要は、名前とメッセージの一行目が一緒だったら、二重投稿と判断します!
(正確にはログデータと文字列一致のとき)
ラウォッチ
1999/12/27(月) 20:09:49
閉じタグのつもりが / ついてなかった!
ロジック自体は動くはずです。(動作確認済み)
質問者
1999/12/28(火) 07:24:46
お忙しいなか、レスありがとうございます。
どうも、動きません。
ログ自体の形式が違うので、$line*をかえれば良いのかな、
と考えていたのですが、どんどん二重投稿できてしまいます(^^;
念の為一応以下にログを書いてみました。
何度もすみません・・・m(_ _)m
ではー
----------------ログ-----------------
<table>
<TBODY>
<TR>
<TD>title</TD>
<TD><a href="mailto:mail@">name</A></TD>
<TD>99年12月28日火曜日:7時14分3秒</TD>
<!--127.0.0.1-->
<!--localhost--></TR>
<TR>
<TD width="318" height="129" colspan="3">
<BLOCKQUOTE>
mass
</BLOCKQUOTE>
<a href="http://">http://</A>
</TD>
</TR>
</TBODY>
</TABLE>
<BR><P><hr size=3><BR></P><table>
<TBODY>
<TR>
<TD>title</TD>
<TD><a href="mailto:mail@">name</A></TD>
<TD>99年12月28日火曜日:7時13分58秒</TD>
<!--127.0.0.1-->
<!--localhost--></TR>
<TR>
<TD width="318" height="129" colspan="3">
<BLOCKQUOTE>
mass
</BLOCKQUOTE>
<a href="http://">http://</A>
</TD>
</TR>
</TBODY>
</TABLE>
<BR><P><hr size=3><BR></P><table>
<TBODY>
<TR>
<TD>title</TD>
<TD><a href="mailto:mail@">name</A></TD>
<TD>99年12月28日火曜日:7時13分50秒</TD>
<!--127.0.0.1-->
<!--localhost--></TR>
<TR>
<TD width="318" height="129" colspan="3">
<BLOCKQUOTE>
mass
</BLOCKQUOTE>
<a href="http://">http://</A>
</TD>
</TR>
</TBODY>
</TABLE>
--------------------3件投稿して見ました。-------------------
ラウォッチ
1999/12/28(火) 22:59:44
オリジナルをかなりカスタマイズしているみたいですね。
とにかく、最新データ(ログファイル)と今入力したデータを比較すれば、いいわけで。
デバック文をビシバシ入れて確認しながらデバックしてください!
しなのむし
1999/12/29(水) 01:23:38
最新投稿のメッセージ部分だけをファイルに記録して
次の投稿内容と比較する方法です。
適当なとこに挟んでみてください。
(前にとほほさんのBBSを改造した時にこれで動いた)
#-----------------------------------------------
# もし$FORM{'MESSAGE'}が空でないなら
# check.datの内容を$challに入れる
if($FORM{'MESSAGE'} ne "")
{
open(CHECK, 'check.dat');
@check = <CHECK>;
close(CHECK);
$chall = join('',@check);
# $challの内容と$FORM{'MESSAGE'}が同じなら
# $FORM{'MESSAGE'}を空にする。(これで単なるリロードになる)
# その他の場合はcheck.datに$FORM{'MESSAGE'}を記録する。
if($FORM{'MESSAGE'} eq $chall)
{$FORM{'MESSAGE'} = "";}
else
{
open(CHECK, '>check.dat');
print CHECK $FORM{'MESSAGE'};
close(CHECK);
}
}
#-----------------------------------------------
質問者
[E-Mail]
[HomePage]
1999/12/30(木) 23:52:53
[[解決]]
どうもありがとうございました。
結果は、しなのむしさんのものを改造して、ラウォッチさんの二重投稿で〜す。というメッセージが出るものを
付けて見ました。
どうもありがとうございました。
ではー
質問者
2000/03/04(土) 04:51:46
check.datを掲示板のログに指定したら駄目ですか?
掲示板のログを指定していると1個しか掲示されません(^^;
open (IN, ">> check.dat");
open (IN, ">> $log");
等とすると
print OUT "\n<BLOCKQUOTE>\n$FORM{'mess'}\n</BLOCKQUOTE>\n";
とやっているので掲示板のソースが膨大になってしまうのですが(^^;
あ
2000/03/05(日) 00:35:55
げ
[上に]
[前に]
[次に]