質問 |
||
| 質問者:ttaa100kkaa | 次のcgiファイルを開くには? | |
|---|---|---|
困り度:
|
すみません。初心者です。 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> "); #-------- |
|
質問投稿日時:08/04/15 17:46 質問番号:3951263 |
||
回答良回答20pt |
|
| 回答者:15mm | 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」と記述しています。 コピーするときは半角に直し忘れないでください。 |
|---|---|
| 種類:回答 どんな人:一般人 自信:自信あり |
|
| |
回答日時:08/04/15 22:37 回答番号:No.2 |
|
| この回答への補足 | 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 は とてもよい方法に思えます。お助けいただければ大変ありがたいです。 |
| この回答へのお礼 | Location を 教えていただき 本当にありがとうございました。 |
回答良回答10pt |
|
| 回答者:tamahiro22 | これは 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__ } |
|---|---|
| 種類:回答 どんな人:経験者 自信:自信あり |
|
| |
回答日時:08/04/15 21:59 回答番号:No.1 |
|
| この回答へのお礼 | ご回答、まことにありがとうございました。教えていただいたことをもとに、挑戦してみます。ありがとうございました。 |