WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:CGIの最大表示件数とページ移動について

0:[投稿] ねこぱ [2004/03/07 00:06 ][環境:WinXP IE6 LinuxRedHat Apache]

はじめまして。CGI初心者です。今ショッピングカートを加工しているのですが、
表題の件について質問させて下さい。少し長くなりますが・・・

ページ当たりの最大表示件数を$page_maxとした時に、

   open DB, "<db/db$page_id.txt" || die "Could not open the file";
    @templine = <DB>;
    @templine = sort @templine;
    $templine = @templine;
#    foreach (@templine) {
close DB;

&printpage;

sub printpage {
    if($p eq ""){$p = 1 };     #$p(現在のページ)が空の時1を代入
    my $begin = ($p * $page_max)-1; #ページの最初の記事
    my $end   = $begin + $page_max ;#次ページ
    
    if($end > $templine){           #記事が半端な数の時の処理
        $end = $templine;
        }

my ($i,$next);                          #データの切り出し
    for($i = $begin; $i < $end; ++$i){
  my ($page,$goods_id,$name,$price,$com,$picture,$limit,$comment) =
                    split (/:=:/, $templine[$i]);

#中略(HTML表示部分)#

#次のデータがあるときの処理
if($end < $templine) {
    $next = $p + 1;
    print "<span"><a href=\"n_$cgifile?page_id=$page_id&p=$next\">
                    次の$page_max件</a></span>\n";
    }
#前にもデータがあるときの処理
if($begin > $templine) {
    $back = $p - 1;
    print "<span><a href=\"n_$cgifile?page_id=$page_id&p=$back\">
                    前の$page_max件</a></span>\n";

以上のように書いているのですが、次のページを押しても、現在のページ($p)が
常に1と認識され、いつも同じデータが表示されてしまいます。

どこがどう間違っているのかおわかりになる方がおられましたら、
ご教授願えますでしょうか。よろしくお願いいたします。


1:[回答] AC [2004/03/07 09:51 ]

>>0 のスクリプトより前で $p は初期化していないのですか。


2:[回答] ねこぱ [2004/03/07 16:03 ]

ACさま、レスありがとうございます。
表示関連の処理はこれが全部なので、初期化していないことになると思います。
初期化するというのは空の状態であるのとはまた違うんですよね?
お手数ですが、よろしくお願いします。


3:[回答] AC [2004/03/07 16:19 ]

QueryStringを受け取った後、QueryStringを解釈する文が入っていなければ、$pはundefのままです。


4:[完了] ねこぱ [2004/03/07 17:14 ]

即レスありがとうございます。なるほど!確かにそうですよね。
いろいろやってみていたので返信が遅れましたが、>>3のアドバイスをヒントに
    $buffer = $ENV{'QUERY_STRING'};
    @page_ap = split('&',$buffer);
    foreach $page_aps(@page_ap){
          ($nm, $vl) = split('=', $page_aps);
          $vl =~ tr/+/ /;
          $vl =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
          $form_data{$nm} = $vl;
    }
    $p = $vl;
を足して、
my $begin = ($p * $page_max)-$page_max;
に変更したところ、ちゃんとページが切り替わってくれました。
まだ$page_maxや、読み込むデータの量を変えて実験していないので、
もしかしたらこじつけでたまたまうまく行っているだけかもしれませんが、
考え方は少しわかったように思います。
回答ありがとうございました。また何かありましたら宜しくお願い致します。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World