No.3ベストアンサー
- 回答日時:
#! c:/perl/bin/perl
require './jcode.pl';
&decode;
if($in{'mode'} eq "shori") { &shori; }
&html;
sub html {
&header;
print <<"EOM";
<form action="./test.cgi" method="post">
<input type="hidden" name="mode" value="shori">
名前:<input type="text" size="8" name="name"><br>
住所:<input type="text" size="20" name="jusho">
<input type="submit" value="登録">
</form>
EOM
&footer;
exit;
}
# ≪登録処理画面≫
sub shori {
open(IN,"./test.dat");
@touroku=<IN>;
close(IN);
foreach(@touroku) { ($name,$jusho)=split(/<>/);
if($in{'name'} eq "$name") { &error("二重投稿しています");}
}
open(OUT,">./test.dat");
print OUT ("$in{'name'}<>$in{'jusho'}\n");
print OUT @touroku;
close(OUT);
&header;
print "登録が終了しました\n";
&footer;
exit;
}
こんな感じですれば二重投稿の防止が出来ます
(簡単に作ってるので後は改造してください(^^)w
一番先頭のperlの設定
&decord; →デコード部です
&header; →ヘッダー部です
&footer; →フッター部です
&error →エラー部です
open-fileのdie部
これらはsouta_nさんのスクリプトを使ってください
No.4
- 回答日時:
追記
≪登録処理画面≫6行目
if($in{'name'} eq "$name") { &error("二重投稿しています");}
を
if($in{'name'} eq "$name") { &html;}
にすると二重投稿したときには登録処理画面に行かずに即座に登録画面に戻りますのでファイルに重書き込みすることはなくなります
・・・が登録者にとっては登録が出来たのか確認が取れないのであまりお勧めはできません(--;)
他の方法としては
# ≪登録処理画面≫
sub shori {
open(IN,"./test.dat");
@touroku=<IN>;
close(IN);
foreach(@touroku) { ($name,$jusho)=split(/<>/);
if($in{'name'} ne "$name") { push(@touroku0,"$_"); }
}
open(OUT,">./test.dat");
print OUT ("$in{'name'}<>$in{'jusho'}\n");
print OUT @touroku0;
close(OUT);
&header;
print "登録が終了しました\n";
&footer;
exit;
}
とすることができます @touroku0 はなんでもいいです
これだとファイルを見て同じ名前だったら省いてまた新たに書き込むという方法です
No.2
- 回答日時:
登録処理の前に重複チェックを入れてみてはいかがでしょうか?
送信されたデータの内容とファイルを比較して一致するデータがある場合
登録処理が行われないようにすれば、重複は防げると思います。
ボタン連打はjavascriptを使用して一度クリックされたらクリック無効にする処理を入れてあげたらある程度は防げると思います。
No.1
- 回答日時:
100%というのは難しいのですが、99%阻止することはできるかな。
。。JavaScriptを使って、Click済み変数を用意しておいて、onClickでその変数に値を入れるようにする。
CGIから戻ってきたらその変数をクリアする。
のようにすれば良いのではないかと思います。
もしくは、フォーム送信データに時刻データも入れておいて、
データ登録時に「要求された時刻」を登録時の時刻と比較して、
システム的にあり得ない近似した時刻であれば、処理をしない
とか。
この回答への補足
お応えありがとうございます。
> JavaScriptを使って、Click済み変数を用意しておいて、onClickでその変数に値を入れるようにする。
出来ればそのJavaScriptかんたんなコーディング例など教えていただけないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- YouTube いまさら聞けない質問#2 2 2022/09/14 11:02
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- ポイントサービス・マイル ポンタポイントの登録の仕方を教えてください 1 2023/01/19 22:56
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- Visual Basic(VBA) VBA 登録ボタンを省略してエンターキーで作業 4 2022/07/09 22:29
- YouTube ユーチューブでチャンネル登録した人がチャンネル登録から外れてて、チャンネル登録ボタンを押せる状態にな 1 2022/04/23 19:38
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- その他(IT・Webサービス) U-NEXTの解約ができません 2 2022/11/19 18:35
- Windows 10 Google日本語入力について 3 2022/10/20 15:51
- その他(Microsoft Office) Wordを変換してExcelに挿入 2 2022/07/04 23:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
close()で例外が投げられる理由
-
巨大ファイルの行をを逆順に並...
-
ハッシュにファイルハンドル
-
awkスクリプトでダブルクォーテ...
-
VBAで巨大なファイルの途中から...
-
ファイル名を複数個配列で確保...
-
batファイルでrenameができませ...
-
Windowsで複数のファイルを同じ...
-
VBAでCSVファイルの特定行を書...
-
VBAでCSVファイルを途中行まで...
-
AutoNts
-
ファイルを分割する。
-
LISPによる横型探索
-
perlでcsvファイルを読む(ダブ...
-
cgiで表示するhtmlページ内でバ...
-
全角と半角文字が混在している...
-
エクセルVBA コードが同じでも...
-
DOSコマンドで、標準出力を出力...
-
Visual Basicを使って三平方の...
-
readdir()で得られるファイル・...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
close()で例外が投げられる理由
-
改行コードが勝手に
-
perlを用いた特定文字列間の抽...
-
Perl で syntax error
-
ハッシュにファイルハンドル
-
where can I buy snowbord in t...
-
open中のファイルをrename
-
GD.pmで作成した画像を保存する...
-
perlで複数のファイルの処理に...
-
while(<ハンドラ>) {} で行数を...
-
パスワード自動生成スクリプト...
-
die関数のエラー出力先について
-
Perlでファイル出力時にデッド...
-
perlのflock関数でロックをかけ...
-
PICでFatFsでオープンした内容...
-
クリックを何回もされて、重複...
-
cgiの投票回数制限設定について...
-
ファイルから読み込んだ文字を
-
テキストファイルの本文中に行...
-
データの並べ替え
おすすめ情報