アプリ版:「スタンプのみでお礼する」機能のリリースについて

すみません。初心者です。
001.cgi というファイルで フォーム に 正解を入力して Enterキー を 押したら
次の 002.cgi を 開く(実行する)ようにするには どうしたらよいでしょうか?
今は↓このようにして 「次のファイルへ」をクリックしてもらっています。
Enterキーを押すだけで 次の002.cgi (=$num2.cgi)へ行きたいのです。よろしく、お願いいたします。
#--------
if (param('answer') eq $ans){
print ('正解');
print ("<a href=$num2.cgi accesskey=]>次のcgiファイルへ (Alt+])</a> ");
#--------

A 回答 (2件)

CGIで書き出すヘッダ情報で「Location:」を使うといいと思います。



具体的には、

print "Content-type:text/html\n\n";
(これからHTMLファイルを出力し始めます、という意味)

のようになっている所を削除してから、


###ここから###
if (param('answer') eq $ans){#答えがあっていれば
print "Location: http://(CGIファイルまでのパスは略)/002.cgi\n\n";#http://~~に飛ばす

}else{#不正解なら
print "Content-type:text/html\n\n";#もう一度同じフォーム画面を表示
print "HTMLでフォームを出力";
}
###ここまで###


としてみてください。
(以下のイメージで動作予定)

001.cgiのフォームに回答入力
 ↓    ↑(不正解なら)
001.cgiに回答を渡し、判定
 ↓(正解なら)
002.cgiにジャンプ


なお、回答中の文章では「http」を自動リンク回避のため「http」と記述しています。
コピーするときは半角に直し忘れないでください。

この回答への補足

Location を 教えていただき、ありがとうございました。
しかし、私の 001.cgi は 以下のように始まっております。
########
print header(-charset => 'Shift_JIS');
print start_html("001.cgi");
########
このprint header(-charset => 'Shift_JIS');を消して
########
if (param('answer') eq $ans){
print ('Location:002.cgi\n\n');
}
else{
print header(-charset => 'Shift_JIS');
##省略
print endform;
{
としたのですが、だめでした。

ファイルの上の方に
if (param('answer') eq $ans)
が、あります。そして、下の方で print endform;
の後にまた
if (param('answer') eq $ans)
があります。これが影響しているのでしょうか?

以下のようにしたら、001.cgi を開くと 002.cgi が登場します。

### はじめ ###
#!/usr/bin/perl -T
use strict;
use warnings;
use CGI qw(-debug :standard);
print "Location:002.cgi\n\n";
### おわり ###

Location は とてもよい方法に思えます。お助けいただければ大変ありがたいです。

補足日時:2008/04/18 12:15
    • good
    • 0
この回答へのお礼

Location を 教えていただき 本当にありがとうございました。

お礼日時:2008/04/18 12:32

これは Perl や CGI についての質問ではなく、


HTML についての質問となるので、適した場所で尋ねられる方が回答を得られると思います。

accesskey を指定すれば、ALTキーを押してアクセスできます。
tabindex を指定すれば、TABキーでの移動順序を決められます。
基本的にはこのような仕組みしか HTML には備えられていないので、
いきなり ENTER を押してクリックさせることは出来ません。

今回のような場合は、予めリンク項目にフォーカスを当てる必要があるので、
HTML に JavaScript を記述して対処します。


if (param('answer') eq $ans) {
print <<"__HTML__";
<p>正解</p>
<p><a href="$num2.cgi" id="next" accesskey="]">次のcgiファイルへ</a></p>
<script type="text/javascript" language="JavaScript">
document.getElementById('next').focus();
</script>
__HTML__
}
    • good
    • 0
この回答へのお礼

ご回答、まことにありがとうございました。教えていただいたことをもとに、挑戦してみます。ありがとうございました。

お礼日時:2008/04/17 08:00

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