WEB相談室

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

タイトル:複数のページ間のデータ受け渡し

0:[投稿] atusi [2002/08/26 07:01 ][環境:WIN+IE UNIX系+Perl]

こんにちわ。

複数のページからはそれぞれ異なった情報がユーザから
入力され、最後のページで確認画面を出したいです。

複数のページ間でのデータ受け渡しにおいて、

<input type="hidden">タグでデータを受け渡そうと
思っているのですが、

この際にいちいち
・form からの入力をハッシュに入れて、
・それらハッシュの値を引数として次のフォームページに渡し、
・それを@_として受け取って
・また次に渡す

という作業をなんとか簡略化、
もしくは機械的な作業で済ませたいと思っております。

何かいい方法がありましたらご教授願います。


1:[回答] popo [2002/08/26 09:07 ]

>機械的な作業で済ませたいと思っております。
ループしてhidden化する。というやり方でいいのでしょうか?
それとも、ただ、クッキーによってhidden等をなくす。とか?

>この際にいちいち
>・form からの入力をハッシュに入れて、
>・それらハッシュの値を引数として次のフォームページに渡し、
>・それを@_として受け取って
>・また次に渡す

上記の文を関数にしておけば、使いまわし出来るのでは?


2:[完了] atusi [2002/08/27 22:56 ]

なるほど。

関数化してしまえばいいんですね。

当然ですが、混同していました。

ちなみに、
ループでhidden化しようと思います。

どうもありがとうございました。


3:[質問] atusi [2002/09/01 22:21 ]

以前質問させて戴いて、
わかったつもりでいたのですが、実際に動かしてみると
どうもうまくいかないので、申し訳ございませんが改めて質問させて戴きます。
自分で読み返してみて、説明不足の感もありましたので
以前より若干具体的に説明させていただきます。

-----------------------------------
HTMLのフォームページが3ページあり、
(F1,F2,F3とします)

それぞれのフォームについて、入力情報の確認画面があります。
(C1,C2,C3とします)

それらは全て、一つのCGIより出力されています。

つまり
F1→C1→F2→C2→F3→C3
という流れがあるわけですが、

F1 を入力後、確認画面を出して確認、    (C1 とします。)
その際にデータを<input type="hidden">
の形で次のページ(F2)に渡したいのです。

で、フォームデータを $form{$key} = $value; の形で普段使っていたものを
<input type="hidden"> でも使おうと思い、下(サブルーチンごと貼り付けさせて戴きます)のように書いたのですが
どうもエラーが返ってしまいます。

疑問点を二つにまとめました。

1. 文字コード変換の位置はここでよろしいでしょうか?
2. CGI よりinput type="hidden" というHTMLタグも出力されるので
  下のように書いているのですが、この部分に誤りがあるようなのです。

            $pair =~ s/(.*?)=(.*?)/print "<input type=\"hidden\" name=\"$1\" value=\"$2\">;/; # 最短マッチさせる


ご教授よろしくお願いいたします。

# 以下、サブルーチン全体です

sub loadFormData
{
    my ($query, $pair);
    
    if($ENV{'REQUEST_METHOD'} eq 'POST') {
        read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
    }
    else {
        $query = $ENV{'QUERY_STRING'};
    }

    # 文字コードを変換
    jcode::sjis($query);

    # 要素の分解
    foreach $pair (split(/&/, $query)) {

        # input type="hidden"として次のページに受け渡す
        if($pair) {
            $pair =~ s/(.*?)=(.*?)/print "<input type=\"hidden\" name=\"$1\" value=\"$2\">;/; # 最短マッチさせる
        }

        my ($key, $value) = split (/=/, $pair);
        
        $value =~ tr/+/ / ;
        $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
        
        $value =~ s/&/&amp;/g;        
        $value =~ s/</&lt;/g;        
        $value =~ s/>/&gt;/g;        
        $value =~ s/"/&quot;/g;     
        $value =~ s/\x0D\x0A/ /g;    
        $value =~ s/\t/ /g;            
        
        $form{$key} = $value;
    }      
}


4:[回答] やじうま1号 [2002/09/02 14:29 ]

>コンバートルーチンの位置

これだとどういう動作になるかはわかりませんが、次のようにすればうまくいくかと思います。

$value、$keyにコンバートをかけることです。 一般的なフォームを利用した配布のCGIはそのようにされています。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World