• ベストアンサー

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
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • omni2
  • ベストアンサー率53% (33/62)
回答No.2

1の方がおっしゃってるようにサブルーチン名の先頭に数字をつかってるのが原因だと思います。 if($in{'p'} eq '1'){&page1;} sub page1{ print"1ページ目"; print"<a href=./aaa.cgi?p=2>2ページ目</a>"; } てな具合にしてみればどうでしょう? それか、 if($in{'p'} eq '1'){&_1page;} sub _1page{ print"1ページ目"; print"<a href=./aaa.cgi?p=2>2ページ目</a>"; } みたいにするとか?

MakoNako
質問者

お礼

数字は使えないんですね;; 大変勉強になりました また、記述していただいた通りでうまく表示できました ありがとうございました m(_ _)m

その他の回答 (1)

  • xyz37005
  • ベストアンサー率51% (362/706)
回答No.1

サブルーチン名の先頭文字に数字って使えないと思いますが。

関連するQ&A

  • 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で得た内容をHTMlページに代入

    たびたびの質問で恐縮です。 HTMLページにラジオボタンを設置し、 これを選んだらこの答え、これを選んだらこの答え、 と、ページを移動させるようCGIを記述しました。 いくつもの質問に回答した結果、 最終ページにひとことコメントを入れたいです。 たとえば Q2でA、Q5でCを選んだ場合は 最終ページで”よくできました”などです。 それを、CGIで表示するのではなく、 HTMLページに代入して表示させたいです。 私のイメージでは、 if ($q1 eq "A" && $q5 eq "C") $ans eq "よくできました"; などと、CGIなどで変数を設定して それをHTMLに埋め込むようなコードを記述すればいいのではないかとか考えて 色々やってみたのですがうまくいきません。 ほかのサイト等色々見ていると、以下のような感じで代入できそうな気がしています。 <p>!ans!</p> どのようにしたらいいのでしょうか? 参考サイト等ありましたら教えてください!

    • ベストアンサー
    • CGI
  • 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で入力した内容をHTML内に表示

    いつもお世話になっています。 メールフォームで事前に「aaa.cgi」というページで入力した内容を「bbb.html」内に表示したいと思っています。 具体的には「aaa.cgi」の中に「name」というフォームがあり、この値をそのままbbb.html内に「●●さん」として表示したいです。 $in{'name'}などとして引き継げるのはCGI→CGIですよね? HTMLに$in{'name'}と記述しても空欄になってしまうためご質問させて頂きました。 bbb.htmlをcgiで書き直してaaa.cgiの値を受け取った後、Printなどで出力する方法しかないでしょうか? よろしくお願い致します。

    • ベストアンサー
    • HTML
  • 次の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> "); #--------

    • ベストアンサー
    • Perl
  • ひとつのCGIファイルに複数のページの動作を管理

    CGI超初心者です。 HTMLファイルにいくつかラジオボタンを設置し、 これとこれを選んだらこのページを開く、 次のページで、 これとこれを選んだらこのページを開く・・・ というような構成でサイトを作っています。 CGIで条件分岐させていますが 書き方が良く分からないので教えてください。 第一ページ用の条件分岐CGIの下に、第二ページ用の条件分岐CGIを書きましたが うまく動いてくれません。 どちらかを削除するとうまく動きます。 ひとつのCGIファイルに、 複数のページの条件分岐をまとめて書くことは出来ないのでしょうか? ページごとに別々のCGIファイルを作成しなければならないですか? 以下具体例です。 ---第一ページ.html--- <form name="q1" action="test.cgi" method="POST" > ・・・ <input type="submit" value="送信する" /> </form> ---第二ページ.html--- <form name="q2" action="test.cgi" method="POST" > ・・・ <input type="submit" value="送信する" /> </form> ---CGI--- #====================下準備====================== if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $str, $ENV{'CONTENT_LENGTH'}); } else { $str = $ENV{'QUERY_STRING'}; } foreach $i (split('&', $str)) { $i =~ tr/+/ /; $i =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; ($t1, $t2) = split('=', $i); $FORM{"$t1"} = $t2; } #===================変数の設定=================== $q11 = $FORM{'q11'}; $q12 = $FORM{'q12'}; #=================条件分岐_質問1================= if ($q11 eq "q11_a") { print "Location: ./ba1.html\n\n"; } elsif ($q11 eq "q11_c") { print "Location: ./ba2.html\n\n"; } ・ ・ ・ else { print "Location: ./go2.html\n\n"; } #===================変数の設定=================== $q21 = $FORM{'q21'}; $q22 = $FORM{'q22'}; #=================条件分岐_質問2================== if ($q21 eq "q21_a") { print "Location: ./co3.html\n\n"; } elsif ($q22 eq "q22_a") { print "Location: ./ba4.html\n\n"; } ・ ・ ・ else { print "Location: ./go3.html\n\n"; }

    • ベストアンサー
    • CGI
  • CGIでhtmlページを表示する

    連日質問させていただいています。 CGI超初心者です。 htmlファイルにラジオボタンを設置し、 Aを選んだらhttp://www.a.html、 それ以外を選んだらhttp://www.b.html というサイトを開くようなCGIを作成したいです。 以下のようにやってみたのですがうまくいきません。 どのように修正したらいいでしょうか? #============================================ if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $str, $ENV{'CONTENT_LENGTH'}); } else { $str = $ENV{'QUERY_STRING'}; } foreach $i (split('&', $str)) { $i =~ tr/+/ /; $i =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; ($t1, $t2) = split('=', $i); $FORM{"$t1"} = $t2; } $q1 = $FORM{'radio'}; print "Content-Type: text/html; charset=Shift_JIS\n\n"; print "<html>\n"; print "<head></head>\n"; print "<body>\n"; if ($q1 eq "A") { print "Location: http://www.a.html\n\n"; } else { print "Location: http://www.b.html\n\n"; } print "</body>\n"; print "</html>\n"; exit; #============================================ 上記のようにすると、以下のように、ただ文字が表示されてしまいます。 Location: http://www.a.html #============================================ if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $str, $ENV{'CONTENT_LENGTH'}); } else { $str = $ENV{'QUERY_STRING'}; } foreach $i (split('&', $str)) { $i =~ tr/+/ /; $i =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; ($t1, $t2) = split('=', $i); $FORM{"$t1"} = $t2; } $q1 = $FORM{'radio'}; print "charset=Shift_JIS\n\n";←★ print "<html>\n"; print "<head></head>\n"; print "<body>\n"; if ($q1 eq "A") { print "Location: http://www.a.html\n\n"; } else { print "Location: http://www.b.html\n\n"; } print "</body>\n"; print "</html>\n"; exit; #============================================ ★部分が悪いのかなぁと思い、上記のように修正してみたり、 (Content-Type: text/html; を削除してみました) ★部分を全部削除してみると Internal Server Error となってしまいます。 よろしくお願いいたします!

    • ベストアンサー
    • CGI
  • 掲示板の上部に掲示板説明の欄をつくりたい

    こんにちは。今掲示板の設置をしています。            タイトル ---------------------------------------------------------     トップに戻る 新着表示 留意事項 管理 ---------------------------------------------------------           <このあたり> に枠に囲まれた掲示板説明を入れたいと思っています。 おそらく # メニュー部 print "<hr width=\"90%\">\n"; if ($in{'action'} eq "past") { print "[<a href=\"$script\" target=\"_top\">掲示板に戻る</a>]\n"; } else { print "[<a href=\"$homepage\" target=\"_top\">トップに戻る</a>]\n"; } # 新着順表示 if ($in{'list'} ne "new" && $in{'list'} ne "pickup") { print "[<a href=\"$script?list=new\">新着順表\示</a>]\n"; } elsif ($in{'action'} ne "past") { print "[<a href=\"$script?\">通常表\示</a>]\n"; } print "[<a href=\"$script?mode=howto\">留意事項</a>]\n"; print "[<a href=\"$script?mode=admin\">管理用</a>]\n"; print "<hr width=\"90%\"></div>\n"; # タイトル一覧表示 if ($alltitle) { &SubjectList; } # 投稿フォーム if ($in{'list'} ne "pickup") { &form(); } print "<center><br>\n"; if ($in{'list'} eq "new") { &newsort; } elsif ($in{'list'} eq "pickup") { &pickup; } else { このあたりを変えればいいのかなぁと思うのですが、どうしたらいいのかわかりません。どなたか教えていただけないでしょうか?

    • ベストアンサー
    • CGI
  • 振り分けcgiについて

    現在下記のように書かれているcgiでトップページの振り分けをしています。今までは各htmに飛ばしていたのですが、今度モバイルのみcgi へ飛ばしたいのですが、i.htmの部分をmi.cgiと書き換えてもうまく飛びません。どうしたらcgiへ飛ぶようになるのでしょうか? $vjump='.i.htm'; #SoftBank用 $ijump='./i.htm'; #i-MODE用 $ejump = './i.htm'; #EZWEB用 $pcjump = './index.htm'; #PC,その他 $USR = $ENV{'HTTP_USER_AGENT'}; if ($USR =~ /^DoCoMo/) { $lct = $ijump; } elsif ($USR =~ /UP\.Browser/) { $lct = $ejump; } elsif ($USR =~ /^SoftBank/ || $USR =~ /^Vodafone/ || $USR =~ /^J-PHONE/) { $lct = $vjump; } else { $lct = $pcjump; } &go; exit; sub go { print "Content-type: text/html\n\n"; open(IN, $lct); while (<IN>) { print; } close(IN); } exit;

    • 締切済み
    • CGI
  • A.cgiで認証チェックされてから、B.thmlが表示されるようにしたい。

    1/17付CGIについての質問の関連です。 質問はパスワード付forum.cgi(付録フリーCGI)で、forum.cgiを入室後、ID&PW情報をA.cgiに渡したまま、新しいHTMLウィンドウを立上げることでした。 この質問は、こちらの教えてGOOでご教授いただきました。ありがとうございます。 できたCGIでは、A.cgiでID&PWを入力しないでも、B.thmlが表示されてしまいます。 # ID/PW認証 # sub pass_check { local($time,$time2,$inpw,$flag,$id,$pw,$check); # 時間を取得 $time = 略; $timeout = 略; $password = '略'; $pwdfile = '略; #中略 if ($in{'id'} eq "") { &header; print "<table><tr><td>\n"; print "<td><form action=\"$script\" method=\"GET\"onsubmit=\"window.open('B.html,'new')\">\n"; print "<tr><th><UL><LI>すでにパスワード取得済みの方は・・・略 print "<tr><th>ログインID<th><input type=text name=id size=8></tr>\n"; #中略 print "<tr><th colspan=2><input type=submit value=' 認証する '></tr>\n"; #中略 if ($in{'pw'} eq "") { &error("パスワードの入力モレです"); } $flag=0; open(IN,"$pwdfile") || &error("Open Error : $pwdfile"); while (<IN>) { ($id, $pw) = split(/:/); if ($in{'id'} eq $id) { $flag=1; $pw=~s/\n//; last; } } close(IN); if (!$flag) {&error("該当のIDは見当たりません"); } $check = &decrypt("$in{'pw'}", "$pw"); if ($check ne "yes") { &error("パスワードが違います"); } # パスワードを第2暗号化 以下略 } 認証の送信をしたときに、エラー時エラーメッセージに飛ぶ(分岐する?)にはどういう記述にしたら良いでしょうか? 見にくいかもしれませんが、どんなヒントでも結構ですので宜しくお願いします。

    • 締切済み
    • CGI

専門家に質問してみよう