• ベストアンサー

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

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

  • ベストアンサー
回答No.2

#!/usr/bin/perl $buffer = &get_buffer(); %in = &get_value($buffer); $mode = $in{'p'}; if ($mode eq '1') { &page1; } sub page1{ print"1ページ目"; print"<a href=./aaa.cgi?p=2>2ページ目</a>"; } #------------------------- # $buffer取得 #------------------------- sub get_buffer { # フォームデータ取得 if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $tmp, $ENV{'CONTENT_LENGTH'}); } else { $tmp = $ENV{'QUERY_STRING'}; } return($tmp); } #------------------------- # $buffer分解 #------------------------- sub get_value { @pairs = split(/&/,$_[0]); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/\n//g; $form{$name} = $value; } return(%form); }

その他の回答 (1)

  • unipre
  • ベストアンサー率34% (16/47)
回答No.1

引数はとりあえず、代入してからのほうが いいと思います。 $p = $in{'p'}; if($p eq '1'){ &page1; } sub page1{ print"1ページ目"; print"<a href=./aaa.cgi?p=2>2ページ目</a>"; } あと、デコード処理はされてますか?

関連するQ&A

  • 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で得た内容を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ファイルを開くには?

    すみません。初心者です。 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の改造で判らないことが…

    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
  • ページ処理

    毎度お世話になってます 同じような質問を数回させていただいたのですが 自分の技量不足のため上手く行きませんでした なので再度質問の形を変えてお聞きさせていただきます 今以下のようなコーティングでデータベースを 作成しています その際のページ処理が上手くいきません どのように上手くいかないかというと マッチしたサイト全てが検索結果に表示されてしまいます このコーティングをベースに構成したいのですが 何とかなりますでしょうか? $view=2; sub subtwo {open(fp,"log.txt"); @lines = <op>; close(op); $bigin = $in{"page"} * $view; $end = $bigin + $view; if($i !~ /\d+/){$i = 0}; if($open eq "") {foreach $line (@li) {($abc,$def,$ghi,$jkl,) = split(/,/,$line); $chk = 1; foreach $k (@key) {if(index($line,$k,)<0) {$c = 0; last}} if($c>0) {print "<A HREF=\"$abc\">$def</A><br>\n";<br>\n";}}}} ############################################ sub subthree {$bigin = $in{"page"} * $view; $end = $bigin + $view; if($end<$マッチした総数の変数) {$nextpage=$in{"page"}+1; print qq(<FORM method="get" action="kensaku.cgi"> <INPUT TYPE=HIDDEN NAME="page" VALUE="$nextpage"> <INPUT TYPE="SUBMIT" VALUE="next"> </FORM>\n);} if($bigin>0) {$backpage=$in{"page"}-1; print qq(FORM method="get" action="kensaku.cgi"> <INPUT TYPE="HIDDEN" NAME="page" VALUE="$backpage"> <INPUT TYPE="SUBMIT" VALUE="back">\n);} if($page<0) {$page=0} }

  • ページ内リンクに他のページからリンクする方法

    ページ内リンクに他のページからリンクする方法ってありますか? 初歩的な質問ですいません。 タイトルでは分かり辛いので、例を書きます。 ページ1にA・B・C・D・Eと見出しの付いた文章があります。左側に対応したリストを作って、ページ内でリンクを貼っています。 ページ2に、ページ1で作った見出しCに関連する記述があり、そこにリンクを作成して、ページ1の見出しCを表示したいのです。 ページ2から、ページ1の中にあるページ内リンクを指定する事は出来ますでしょうか? ※見出しCだけ抽出されると言う意味では無く、ページ1で見出しCのリンクを押した時と、同じ表示でかまいません。 ページ1の左側リスト <tr> <td><A Href="#page_linkA">りんご</A></td> <td><A Href="#page_linkB">みかん</A></td> <td><A Href="#page_linkC">スイカ</A></td> <td><A Href="#page_linkD">柿</A></td> <td><A Href="#page_linkE">メロン</A></td> </tr> ページ1の本文 <A Name="page_linkA"><p>りんごは大好きです</p> <A Name="page_linkB"><p>みかんはあまり好きではありません</p> <A Name="page_linkC"><p>スイカは塩を振ってたべます</p> <A Name="page_linkD"><p>柿より牡蠣が食べたい</p> <A Name="page_linkE"><p>メロン…高くて食べれません</p> ページ2から<A Name="page_linkC"><p>スイカは塩を振ってたべます</p>を表示するリンクを貼りたいのです。 この説明で解ってもらえますでしょうか?宜しくお願いします。

  • php掲示板でページング機能を装備したいのですが

    下記のプログラムのみでは投稿が0にもかかわらず12345...10次へ » となってしまいます。理想は13件投稿の場合10件表示で、一ページ目は 13件中10件表示 1|2次へ>> としたいです。 PHP初心者です。どこに記述するかなど、できるだけ分かりやすくお願いいたします><申し訳ございません。 <?php function paging($limit, $page, $disp=5){ //$dispはページ番号の表示数 $next = $page+1; $prev = $page-1; $start = ($page-floor($disp/2)> 0) ? ($page-floor($disp/2)) : 1;//始点 $end = ($start> 1) ? ($page+floor($disp/2)) : $disp;//終点 $start = ($limit <$end)? $start-($end-$limit):$start;//始点再計算 if($page != 1 ) { print '<a href="?page='.$prev.'">&laquo; 前へ</a>'; } //最初のページへのリンク if($start>= floor($disp/2)){ print '<a href="?page=1">1</a>'; if($start> floor($disp/2)) print "..."; //ドットの表示 } for($i=$start; $i <= $end ; $i++){//ページリンク表示ループ $class = ($page == $i) ? ' class="current"':"";//現在地を表すCSSクラス if($i <= $limit && $i> 0 )//1以上最大ページ数以下の場合 print '<a href="?page='.$i.'"'.$class.'>'.$i.'</a>';//ページ番号リンク表示 } //最後のページへのリンク if($limit> $end){ if($limit-1> $end ) print "..."; //ドットの表示 print '<a href="?page='.$limit.'">'.$limit.'</a>'; } if($page <$limit){ print '<a href="?page='.$next.'">次へ &raquo;</a>'; } /*確認用 print "<p>current:".$page."<br>"; print "next:".$next."<br>"; print "prev:".$prev."<br>"; print "limit:".$limit."<br>"; print "start:".$start."<br>"; print "end:".$end."</p>";*/ } $limit = 10;//最大ページ数 $page = empty($_GET["page"])? 1:$_GET["page"];//ページ番号 paging($limit, $page); ?> またlogファイルなどの関連ファイル名はどこに記述されているかわからないので、このファイルをindex.phpにしたとして、ほかに必要なファイルがあれば教えていただきたいです。宜しくお願いいたします。 参考URL http://tenderfeel.xsrv.jp/php/639/

    • 締切済み
    • PHP
  • Perlでページ処理がどうしても機能しない!教えて!

    次のページが表示してくれません。 どこが悪いのか、わかりません。教えてください。 スクリプトは以下の通りです。 #formのデータ処理で $in{$key} = $val; # 入力データは%inへ #ページ処理(2) if($val eq '次の$page件'){ $allhits=$in{'allhits'}; $ff=$key; &Search; } #sub Search内で #foreach $line (@messages) {の中で #ページ処理(4) $page_control++; if($ff eq ""){ $ff = 1; } if( $ff > $page_control ){ next; } #ページ処理(5) #最初のページの時、データの最後まで処理する。 if($in{'next_num'} eq ''){ if($end != 1 && $hit == $page ) { $end = 1; $next_num = $page_control; $allhits++ ; } elsif( $hit >= $page) { $allhits++ ; } else{ push(@NEWS , $line); $hit++; $allhits++; } $test5 = $allhits;     #test値 13 -> なし 正常(値の変化をチェック) }elsif( $ff > 4 ){      #この辺の処理がうまくいっていない? $allhits = $in{'allhits'}; $test3 = $allhits;     #test値が入らない?(値の変化をチェック) if ($hit == $page ) { $next_num = $page_control ; $test4 = $next_num;   #test値が入らない?(値の変化をチェック) #last OUTER; } else { push (@NEWS , $line ); $hit++; } } } #foreach文ここまで &footer; #ページ送りのサブルーチン #ページ送りボタンサブルーチン sub footer { print "<table width=700><tr><td align=left>\n"; if ($ff >2) { print "<INPUT type=submit value=\"前の$page件\" onClick=history.back()>\n"; } print "</TD><TD align=right>\n"; if ($next_num){ print "<INPUT type=submit name=\"$next_num\" value=\"次の$page件\">\n"; } print "</td></tr></table>\n"; }

    • ベストアンサー
    • 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内に表示

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

    • ベストアンサー
    • HTML

専門家に質問してみよう