1つだけ過去を変えられるとしたら?

はじめまして、最近perlを勉強するために、買った本を参考に掲示板を作成しています。

2つほど質問したいことがあります。


***質問***
1:作成した掲示板で、記事を投稿し、その直後に掲示板をリロードすると、先ほど投稿した記事が再びデータファイルに書き込まれてしまいます。
これを防ぐ方法はあるでしょうか。

2:さまざまなスクリプト内でよく見かける『ENV』や『STDIN』は一般的にどのようなときに使うネーミング(?)なのでしょうか??

********


質問が分かりにくかったら申し訳ありません。
ソースが必要でしたらアップします。
どうぞよろしくお願いします。

A 回答 (1件)

1.GETでは無くPOSTを使うとある程度防げます。


 リロードボタンを付けるのも手です。
 HTTPヘッダのlocationで、URLを一度クリアしてしまう方法もあります。(http://www.studyinghttp.net/rfc_ja/2616/rfc2616_ …

2.お約束みたいなものです。cgiを処理するのに必要な情報が入っています。
$ENVにはcgiがプログラムに受け渡す環境変数の値が入っています。
たとえば、FORMがGETで送られたのかPOSTで送られたのかを判別するには環境変数のREQUEST_METHODを参照します。

FORMでPOSTを使った場合はSTDIN(標準入力)として、データが受け渡されます(データの長さは環境変数のCONTENT_LENGTHを見れば解ります。GETを使った場合は、環境変数のQUERY_STRINGの中に格納されます。
また、アクセスしてきたブラウザの種類などを知るのにも使われます。なおcgiの出力はSTDOUT(標準出力)として出力します。通常のprint文の使い方で出力できるので、細かいことを意識しないで済みます。

例:
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
$buffer = $ENV{'QUERY_STRING'};
}

参考URL:http://hoohoo.ncsa.uiuc.edu/cgi/env.html
    • good
    • 0
この回答へのお礼

ありがとうございます。
質問1はスクリプト外で対処をするという理解でいいのでしょうか。
メソッドはPOSTなのでリロードボタンを作ったり、http://www.studyinghttp.net/rfc_ja/2616/rfc2616_ …を参考してみたいと思います。

質問2のご回答ありがとうございます。むずかしくてちょっと目が点になってしまいました。環境変数を使ったスクリプトを作ったことがないのですが、一応理解できました。
ありがとうございました。

お礼日時:2004/02/05 02:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!