• ベストアンサー

次のcgiファイルを開くには?

tamahiro22の回答

回答No.1

これは 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__ }

ttaa100kkaa
質問者

お礼

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

関連するQ&A

  • 次のcgiファイルを開くには? もう一度

    http://oshiete1.goo.ne.jp/qa3951263.html で質問している者です。 間違って、[回答への補足] に書いてしまいました。 もう一度質問させてください。すみません。 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) が 下の方にもう一度出てくるからでしょうか? ###### はじめ ##################### #!/usr/bin/perl -T use strict; use warnings; use CGI qw(-debug :standard); print "Location:1266.cgi\n\n"; ###### おわり ##################### としたら、001.cgi を開くと 002.cgi へ飛ぶことができました。 どこに print "Location:1266.cgi\n\n"; を書けばよいのでしょうか? よろしく、お願いいたします。

    • ベストアンサー
    • Perl
  • テキストファイルを読んで次のcgiファイルを動かすには?

    お願いします。初心者です。 0001.cgi で 正解 Einstein を Send すると  file.txt に -1 と書き込むようにしました。 さらに  0002.cgi へのリンクが出て、これをクリックすると 0002.cgi が動くようにしました。  そして、 file.txt に -1 が ない場合に 0002.cgi が動き始めないようにしようとしています。 0001.cgi の問題に正解しないと、0002.cgi へ行けない ようにしようとしています。どうしたらよいのでしょうか? どうか、お教えください。 よろしく、お願いいたします。 0001.cgi は、こんなふうになっています。 ↓ ---------------------------------------- print header; # -------------------------------------- print start_html('0001'); #ここに問題を入れました 答は Einstein です。 print startform( -method => 'POST', -action => '0001.cgi' ); print blockquote( textarea( -name => 'die Antwort', -rows => '3', -columns => '40' ) ); print br; print submit(-value => 'Send'); print reset; print endform; # -------------------------------------- if (param('die Antwort') eq 'Einstein'){ print h2('Einstein'); print h2('<a href="0002.cgi">next page</a>'); open(FILE, '>>file.txt') or die "$!"; print FILE ("-1"); close(FILE) } else{ print h3('false'); } # -------------------------------------- print end_html; # --------------------------------------

    • ベストアンサー
    • CGI
  • ランダムに1行読込み フォーム文字との同異を 判定するには?

    txt ファイル から ランダムに 1行読み込んで それが フォームの入力文字と同じかを 判定し、 同じならば、次のファイルへ飛ぶ には、 どうしたらよいのでしょうか? お教えください。 ------------------------------------------------------ mondai.txt に 問題を 1行に 1題ずつ kotae.txt に 解答を 1行に ひとつずつ 書きました。 mondai.txt の 1行目の 解答が kotae.txt の 1行目 (2行目-10行目、同じ)としました。 001.cgi で 正解すれば 002.cgi を開く 不正解なら もう一度 001.cgi を実行。 問題は ランダムに 表示する。 まず、mondai.txt と kotae.txt を それぞれ 10行にして やってみました。 ------------------------------------------------------ すると、問題は ランダムに表示されました。 しかし、 ##################################################### if (param('answer') eq ("$ans")){ print "Location:$num2.cgi\n\n"; ・・・ { ##################################################### が、うまくいきません。 ↓こうしてあります。どうしたら、よいでしょうか? ↓解答したことを file.txt に記録しよう、ともしています。 ↓ ################ はじめ ############################## #!/usr/bin/perl -T use strict; use warnings; use CGI qw(-debug :standard); my ($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year += 1900; $mon = sprintf("%02d", $mon + 1); $day = sprintf("%02d", $day); $hour = sprintf("%02d", $hour); $min = sprintf("%02d", $min); $sec = sprintf("%02d", $sec); my $num = ('1267'); my $num2 = $num + 1; my $value = param('answer'); open(FILE, "../../mondai.txt"); my @data2 = <FILE>; close(FILE); open(FILE, "../../kotae.txt"); my @data3 = <FILE>; close(FILE); my $i = int(rand(10)); my $ans = $data3[$i]; if (param('answer') eq ("$ans")){ print "Location:$num2.cgi\n\n"; open(FILE, '<+file.txt') or die "$!"; my @DATA = <FILE>; close(FILE); open(FILE, '>file.txt') or die "$!"; print FILE ("$num,$ans,$year年$mon月$day日 $hour時$min分$sec秒\n"); print FILE (@DATA); close(FILE); } else { print header(-charset => 'Shift_JIS'); print start_html("$num.cgi"); print ('<font face="century">'); print $data2[$i]; #####---問題表示 print br; print startform( -method => 'POST', -action => "$num.cgi" ); print blockquote( textfield( -name => 'answer', -size => '70', -id => "next", -accesskey => '[' ) ); print <<END; <script type="text/javascript" language="JavaScript"> document.getElementById('next').focus(); </script> END print submit(-value => 'Send ( ↑Alt+[ )'); print endform; } ################ おわり ############################## よろしく、お願いいたします。

    • ベストアンサー
    • Perl
  • Use of uninitialized value ---

    初心者です。フォームに文字を入力してもらい、↓ print blockquote( textfield( -name => 'die Antwort', 省略----条件にあえば、 my $value = param('die Antwort');#として if (($value eq $ans || $value eq $ans2) and ($c eq $num)){ 「正解」と表示することにしました。すると、うまくいくのですが、 if (($value eq $ans || $value eq $ans2) and ($c eq $num)){ について「Use of uninitialized value ----」とApacheのerror logに書かれてしまいます。このためerror logがすぐに巨大なファイルになってしまいます。これを避ける方法をお教えください。よろしく、お願いいたします。

    • ベストアンサー
    • Perl
  • CGI.pmで'&'が'&amp;'に置き換わってしまう!

    文字「&」を出力したいのにCGI.pmが自動的に「&amp;」に変換してしまいます。 具体的には、 <a href="abc" accesskey="&">abc</a> のような文字列を出力させるために、 print($q->a({-href => 'abc', -accesskey => '&'}, 'abc')) というコードを実行したのですが、 出力される文字列は、 <a accesskey="&amp;" href="abc">abc</a> のように「&」が自動的に「&amp;」に置き換わってしまいます。 これの解決策として、オブジェクトを使用せずに、直接CGI.pmのメソッドを呼び出すと、なぜか変換されません。 すなわち、上のコードの「$q」の部分を「CGI」として、 print(CGI->a({-href => 'abc', -accesskey => '&'}, 'abc')) とします。 これは何か意味があるのでしょうか。それともただのバグ? 直接CGI.pmのメソッドを呼び出さなくても解決する方法はありますか。 accesskeyに関するご意見は、先日質問したこちらのスレへ頂けるとうれしいです。 http://oshiete1.goo.ne.jp/qa5707867.html

    • ベストアンサー
    • Perl
  • CGIの改造で判らないことが…

    tail_reviewと言うCGIの改造について聞きたいのですが、 ページ上部に記載される部分がこのコマンドフォームになると思うのですが、 HP|批評 type1|批評 type2|批評修正|タイトルリスト|ランキング|使用説明|管理用 と、この部分はどこのページでも適応されてるみたいです。 そこで質問なのですが、 ここの部分を改造して画面左側にメニューを常に表示するようにしたいのですが可能でしょうか? もし可能であれば、そのようにすればいいのかを教えて下さい^^: 無理であれば無理と教えて頂けたら嬉しい限りです(汗) # ---------------------------------------------------------- # コマンドフォーム # ---------------------------------------------------------- sub command{ print qq(<font size="2">\n); print qq(<a href="$hp_address">$hp_name</a>|); print qq(<a href="$cgi_name?mode=entrance">批評 type1</a>|); print qq(<a href="$cgi_name?mode=entrance&type=1">批評 type2</a>|); print qq(<a href="$cgi_name?mode=revision">批評修正</a>|); print qq(<a href="$cgi_name?mode=all_title">タイトルリスト</a>|); print qq(<a href="$cgi_name?mode=rank_review">ランキング</a>|); print qq(<a href="$cgi_name?mode=explain">使用説明</a>|); if( $add_key eq 'yes' ){ print qq(<a href="$cgi_name?mode=add_review">タイトル追加</a>|); } print qq(<a href="$cgi_name?mode=manager">管理用</a>); print qq(<font>); # 批評修正 最新記事一覧 }# end command 説明下手で本当にスイマセン。。。

    • ベストアンサー
    • CGI
  • CGIでのページ指定~その(2)

    以前教えていただいた下記の記述なのですが 新規のCGIで実行するとうまく表示されません; $inの関連記述をしていないからでしょうか? まったくの新規のCGIで実行できる記述方法を 教えてください よろしくお願いします m(_ _)m **************************** if($in{'p'} eq '1'){&page1;} sub page1{ print"1ページ目"; print"<a href=./aaa.cgi?p=2>2ページ目</a>"; } ****************************

    • ベストアンサー
    • CGI
  • CGIでのページ指定

    間単に同一CGI内で、ページ毎に異なったhtmlを表示したいのですが、 例えば、 aaa.cgi?p=1で、print "1ページ目"; aaa.cgi?p=2で、print "2ページ目"; みたいな振り分け表示なのですが、 下記記述でうまく表示されません 記述を教えていただけますでしょうか? よろしくお願いします m(_ _)m if($in{'p'} eq '1'){&1page;} sub 1page{ print"1ページ目"; print"<a href=./aaa.cgi?p=2>2ページ目</a>"; }

    • ベストアンサー
    • CGI
  • CGI によるファイルのアップロード

    こんにちは。Perl初心者です。 ファイルのアップロードのプログラムを作ったのですが(と言っても書籍の丸写しですが..)サーバー上でエラーになってしまいます。どこが間違っているか教えて下さい。 環境:@niftyのホームページ(CGIは許可されています。), PC: Windows XP ソース: #!/usr/local/bin/perl use CGI qw(:standard); $file1 = param('file1'); open OUT, "> $file1"; while(<$file1>){   print OUT $_; } close OUT; $file2 = param('file2'); open OUT, "> $file2"; while(<$file2>){   print OUT $_; } close OUT; print <<"EOL"; Content-type: text/html <html> <body> Files have been uploaded.<br> $file1<br> $file2<br> </body> </html> EOL exit;

    • 締切済み
    • CGI
  • CGIのカスタマイズについて

    ネットレスキューさんの簡易データベースについて search.cgiの表示部分でテーブルを一つずつ生成させようと思ったのですがエラーが出ます。 どこが悪いのでしょうか? ----------ここから------- foreach $data (@NEW) { ($d,$DATE,$PREF,$NAME,$EMAIL,$HURL,$AGE,$HANDLE,$REM) = split(/\,/,$data); print "<table width="450" border="0" cellspacing="0" cellpadding="0" class="p12_16">\n"; print "<tr>\n"; print "<td colspan="2" bgcolor="#CC0033" height="14"><font color="#FFFFFF">● $NAME</font></td>\n"; print "</tr>\n"; print "<tr>\n"; print "<td width="70">地域</td>\n"; print "<td width="380">$PREF</td>\n"; print "</tr>\n"; print "<tr>\n"; print "<td height="14">Eメール</td>\n"; print "<td><a href=\"mailto:$EMAIL\">$EMAIL</a></td>\n"; print "</tr>\n"; ---中略---- print "<td height="14">内容</td>\n"; print "<td>$REM</td>\n"; print "</tr>\n"; print "</table>\n"; if ($next_num ne '') { while (($key,$val) = each %FORM2) { if ($key ne 'FF') { $buf = "$buf&$key=$val"; } } print "<h3>↓<a href=\"search.cgi?$buf&FF=$next_num\">次の$page件</a></h3>\n"; } } print "</body></html>\n\n"; exit; --------------ここまで----- splitの扱い方が良く分っていません。 御存知の方御指導下さいませ。

    • ベストアンサー
    • CGI