CGI-BBS > CGI > Perl > クリックすると数字が減るCGIの作り方


カレッヂ
カレッヂ


質問者 masa  投稿日 1/19(金) 17:59:24
初めまして、ちょっと解らないことがありまして質問します。
内容は、ページ内の数字をクリックすると数字が1つ減ると言うCGIを作りたいのですが
どのように作成したら良いか解らないのです。どなたか教えて下さい。

流れ的には、
数字をクリック→違うページに進む→元のページに移動する→数字が減っている(10ならば9に)

です。説明が下手ですみませんが教えて頂けないでしょうか?宜しくお願いします。
回答者 さくら  [削除]  投稿日 2/4(日) 05:02:34
情報の牽引にはいくつかの手法が考えられますが、簡単に実装できる方法として
QUERY_STRINGがあります。
例えば、下記のようなアドレスを作ります。

http://domein.com/cgi-bin/script.cgi?10

これで、script.cgi を呼び出すと、?の後の 10 が環境変数QUERY_STRINGに格納されます。
perl では、ENV{'QUERY_STRING'} でアクセスできます。
プログラム中では、このように使います。

$query = ENV{'QUERY_STRING'}; #$query に10が格納された!
$query--;                      #$query をデクリメントした。(9になった)

そしてHTMLを出力する中で
<A HREF="http://domein.com/cgi-bin/script.cgi?$query">
これで情報を牽引できますね!

この方法の場合userに返すページをcgiによってダイナミックに生成する必要があります。
質問の中に、違うページへ移動して又元のページへ戻ると有りましたが、
この場合も、ダイナミックにページを生成して、情報を牽引していく必要があります。
そうすると、違うページへ行く場合と、数字をデクリメントする場合と両方考えなければいけません。
一般的に良く使われているのはこんな風にします。

http://domein.com/cgi-bin/script.cgi?number=10&action=decrement

このように呼び出します。action の属性を変えてjunp するか decrement するか動作を変えます。
ただこの場合、QUERY_STRING は url エンコードされて来るのでデコードが必要になります。
こんな感じでデコードします。
$query =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

後は、& で split して = で split して ハッシュに格納するのがperl の定石のようになっています。

又、違うページに行くときに Location ヘッダを使って既存の静的ページに行く場合は
uaer を識別する為の ユニークなファイル名を持ったデータファイルを生成する必要があります。
これは user を識別して ファイルを読み書きしたり、
user が離れた場合にそなえて、timeout 用のルーチンを書いて 
ファイルを削除したりしなければなりません。

ここまでやる事も無いと思いますが、一応こんな方法もあります。

こんな感じでお役に立つでしょうか?
貴方がどんなページをイメージしているか分かりませんが、
それほど難しいテクニックは必要無いので、是非、挑戦して下さい。



返信(回答)する


Web裏技