WEB相談室

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

タイトル:引数をcgi〜htmlへ渡すには?

Seagull [MAIL] [WriteDate : Mon May 21 00:50:01 2001]

引数をcgiからhtmlへ渡すにはどうすればいいですか?
$who    = $ENV{'QUERY_STRING'};
で変数whoにいれたのですがhtml内で変数を引き渡す方法がわかりません。どうすればよいかご教授お願いいたします。(cgi初心者です)


Nobu3 [URL] [WriteDate : Mon May 21 01:06:40 2001]

JavaScriptにでも渡すの?

print <<EOM;
<script type="text/javascript">
jwho = "$who";
document.write(jwho);
</script>
EOM

$whoがその引数なんだから、そのまま出力すればいいと思う。


Seagull [MAIL] [WriteDate : Mon May 21 01:36:24 2001]

早速の回答ありがとうございます。
やってみましたがうまくいきませんでした。(私の質問の仕方がへたでした。)下記に書きますので再びよろしくお願いします。
a.cgiで上記の$whoにいれてからprint "Lcation: url(b.html)"で飛ばした先のところに渡したいのですが。


Nobu3 [URL] [WriteDate : Mon May 21 01:46:06 2001]

print "Location: b.html#$who\n\n";
でいいんでは?

スクリプトからは「location.hash」で取得できるはず。


MY [WriteDate : Mon May 21 07:56:01 2001]

 とりあえず、何がやりたいのかがわからないので適当に予想します。
「b.htmlのソースの中に$whoを埋め込みたい。」と想定して。

print "Location: url(b.html)ではなくて、

print "Content-type:text/html\n";
print "<!DOCTYPE (任意のDOCTYPE)\n";
print "<html lang=\"ja\">\n";
print "<head><title>$who</title></head>\n";
print "(以下、b.htmlに書きたい内容)\n";

 として、b.htmlに書きたい内容自体をa.cgiで出力する。
(とりあえず、$whoをtitleに入れました。ヘッダを省きすぎなのはご容赦)

 こういうことですかねぇ?

 というか、Formのgetで送っているのなら、デコードとかもいる
ような気もするし、まさかSeagullさんが、CGIで既存のb.htmlの
ソースを動的に書き換えるってことを望んでいるとは思えないし・・。
 もう少し状況を説明していただけないと、なんともかんとも。
(どこから$whoを送って、どう処理して、何を表示させたいのかとか)

>Nobu3さん。
 差し出がましくて申し訳ないですけど、Javascriptで処理する部分なら
「スクリプト」ではなくて、その旨を書いてあげたほうが若干親切かと。(SeagullさんがJavascriptに不案内との想定の下で。)
 それに、CGIも「(CGI)スクリプト」と呼んだりしますし。


Seagull [MAIL] [WriteDate : Mon May 21 10:51:52 2001]

たびたびすみません。
a.cgi
$who    = $ENV{'QUERY_STRING'};
print "Location: http://url/b.html?$who\n\n";
ブラウザから直接入力
url/a.cgi?id=xxxxとして
b.htmlを呼び出します。
b.html
で他のデータを入力して
c.cgiで処理をしたいのです。
つまりa.cgiで入力したID番号を
b.htmlで保持して
c.cgiで書き込みしたいのです。
説明が下手ですみません。
ご承知のとうりJavascriptはまだやってません。
これでもう一度お願いできますか?


ひよこ [MAIL] [URL] [WriteDate : Mon May 21 13:27:15 2001]

> つまりa.cgiで入力したID番号を
> b.htmlで保持して
> c.cgiで書き込みしたいのです。

b.htmlがformからの送信でcgiへ渡すのであれば
b.htmlでパラメーターを取得して、hiddenでc.cgiへ渡してやればいいと思います。

<SCRIPT type="text/javascript" language="JavaScript">
<!--
function get_ID(){
var id;
var idStr = "id=";
   Ref = self.location.search;
   id = Ref.substring(Ref.indexOf(idStr,0)+idStr.length,Ref.length);
   document.myForm.id.value = id;
}
// -->
</SCRIPT>
<BODY)
<form name="myForm" action="c.cgi" method="post" onSubmit="get_ID()">
<input type="hidden" name="id" value="">
以下略


Seagull [MAIL] [WriteDate : Tue May 22 09:42:20 2001]

Nobu3さん、ひよこさんありがとうございます。
javaはまだなのでなかなかできません。(昨日やってみましたが)
そこで相談ですがCookieに渡せばできますか?
再々度よろしくお願いします。


ちゃいぱ [WriteDate : Tue May 22 11:02:49 2001]

>そこで相談ですがCookieに渡せばできますか?
出来ると思いますが...。
しかし、b.htmlが、からむ以上、JavaScriptは避けて通りませんよ!
しかも、今度は、JavaScriptでクッキーをI/Oします。

流れとしては、Nobu3さん、ひよこさんのアドバイスでいけると思うんですが...。


たこすけ [WriteDate : Tue May 22 12:06:21 2001]

> しかし、b.htmlが、からむ以上、JavaScriptは避けて通りませんよ!
a.cgiでクッキーをセットしてc.cgiで取得するのであれば
b.htmlが有っても無くても関係無いと思うのですが…?


ちゃいぱ [WriteDate : Tue May 22 12:33:21 2001]

>b.htmlが有っても無くても関係無いと思うのですが…?
全くもって、そうですね!
ちょっと、b.htmlにまどわされました...。
私のは、無視してください!



Seagull [MAIL] [WriteDate : Tue May 22 13:41:46 2001]

ちゃいぱさん、たこすけさんありがとうございました。
やってみます。


綾小路 [MAIL] [URL] [WriteDate : Wed May 23 04:14:50 2001]

SSIは使えないんでしょうか??^^;
SSIを使えば、あんまり苦労しないような気がするのですけれど。
外してたら済みません


Seagull [MAIL] [WriteDate : Wed May 23 09:10:17 2001]

綾小路さんありがとうございます。
SSIもつかえるはずですが。
おしえていただけませんか?


綾小路 [MAIL] [URL] [WriteDate : Thu May 24 00:11:58 2001]

a.cgiの$whoの値をHTMLに反映させるって事で良いんでしょうか?
取りあえず、画像を表示と言う事で

a.cgi

print "Content-type: text/html\n\n";
print "<IMG SRC=$who>";

として、b.htmlに
<!--#exec cmd="a.cgi"-->

を埋め込めば大丈夫なはずですが??^^;


たこすけ [WriteDate : Thu May 24 14:09:05 2001]

> を埋め込めば大丈夫なはずですが??^^;
QUERY_STRING は何処でどうやって参照されるでしょうか?


Seagull [MAIL] [WriteDate : Thu May 24 23:06:22 2001]

綾小路さんありがとうございます。
例えば会員がどの商品を申し込んだか?
それをデータベース化して集計する。という作業をしたくて
CGIに向かっているうちにIDはどうやって保持していくのだろう?
会員はあちこち商品のhtmlを見にいくと思われますので・・・
そんなわけです。
よろしくお願いいたします。


綾小路 [MAIL] [URL] [WriteDate : Fri May 25 02:48:14 2001]

たこすけさん>
>> を埋め込めば大丈夫なはずですが??^^;
>QUERY_STRING は何処でどうやって参照されるでしょうか?

a.cgiに、オプションを渡す形で呼び出すとかで、判定する方法も有るのではないでしょうか?

Seagullさん>
どうも、商利用を前提に考えられておられる様ですので、あくまでヒントと言う事で、フローを書きます。

1−会員向けページを呼び出す
2−会員向けページよりIDを入力して、a.cgiへ渡す。
3−a.cgiで受け取った情報を、ひとまずファイル化。
4−b.htmlにてa.cgiにSSIとしてオプションコマンドを付けて呼び出し。
5−a.cgiがオプションを受け取ったら、b.htmlの呼び出し箇所へ<INPUT>タグなどでIDを代入して書き出し。
6−選択商品の情報をa.cgiへオプションコマンドを付けてクエリ。
7−クエリされてきたデータを、ファイルへ書き込み。
8−*6〜を繰り返し。
9−選択終了したら、メールなり、データベースファイルなりへ、申し込み内容を書き出し。

こんな感じで処理を為さったら如何でしょうか?


たこすけ [WriteDate : Fri May 25 12:33:00 2001]

> a.cgiに、オプションを渡す形で呼び出すとかで、判定する方法も有るのではないでしょうか?
なるほど。

しかし、a.cgi 側でCGIで呼び出されたかSSIで呼び出されかの
分岐処理が必要ですし、SSIの場合はオプション毎の分岐処理
が必要になりまよね?
また
> 3−a.cgiで受け取った情報を、ひとまずファイル化。
> 7−クエリされてきたデータを、ファイルへ書き込み。
ファイルの入出力がある場合は排他処理も必要ですし
更に
> 5−a.cgiがオプションを受け取ったら、b.htmlの呼び出し箇所へ<INPUT>タグなどでIDを代入して書き出し。
IDに &,<,>," 等が含まれる場合にも処理が必要です。

なので
> SSIを使えば、あんまり苦労しないような気がするのですけれど。
私は苦労するような気がします。


ところで
> print "Content-type: text/html\n\n";
exec cmd の場合、必要でしたっけ?


綾小路 [MAIL] [URL] [WriteDate : Sat May 26 01:37:36 2001]

> しかし、a.cgi 側でCGIで呼び出されたかSSIで呼び出されかの
> 分岐処理が必要ですし、SSIの場合はオプション毎の分岐処理
> が必要になりまよね?

> ファイルの入出力がある場合は排他処理も必要ですし

確かにそうですね(^^ゞ
> SSIを使えば簡単なような気がします

というのは、勉強不足で申し訳有りませんでしたm(_ _)m

> exec cmd の場合、必要でしたっけ?

コレもσ(^^)の勉強不足でした、要らないようですね(^^;;;

σ(^^)の勉強不足さでは、今のところ、ここいらで、限界のようです。
後はたこすけさんが代案を出される事を期待しておりますm(_ _)m


たこすけ [WriteDate : Sat May 26 20:31:23 2001]

> 後はたこすけさんが代案を出される事を期待しておりますm(_ _)m
私では知識不足なので、他の方に期待しましょう。

ちなみに自分でやるとしたら Cookie を使うか
認証手段によっては REMOTE_USER を参照。
とかすると思います。


しなのむし [WriteDate : Sat May 26 23:24:39 2001]

b.html を b.cgi にしてはだめなのですか?

b.cgi は、a.cgi で入力されたID番号を取得して変数に入れ
<input type="hidden" name="id" value="ID番号の入った変数">
という記述を b.html の内容に加えて生成するといった
単純なものになるかと思いますが。

# 場合にもよるでしょうが、a も b も c も1つのスクリプトで
# 処理することも出来るのでは?


たこすけ [WriteDate : Mon May 28 18:57:46 2001]

しなのむしさんの補足・・・になるのかな?

> <input type="hidden" name="id" value="ID番号の入った変数">
上でも多少述べましたが、HIDDEN などに埋め込む場合は
いくつか注意が必要です。

一つは 「ID番号の入った変数」値がURLエンコードされている場合。
これは次回データを受け取る CGI 側で ID番号に該当する箇所のみに対して
%25 を % とするか、デコード後、再度デコードする必要があります。

もう一つは「ID番号の入った変数」値が既にデコードされている場合。
& を &amp; に置きかえる等の処理が必要です。

但し「ID番号の入った変数」の値が単語構成文字のみの場合は
この限りではありません。
# 世の中には _ を %5f で送る、謎な UA もありますが…


Seagull [MAIL] [WriteDate : Thu May 31 02:00:13 2001]

Nobu3さん、MYさん、ひよこさん、ちゃいぱさん、綾小路さん、
たこすけさん、しなのむしさん、みなさまありがとうございました。
いろいろとやってみましたがCOOKIEへIDを渡すことで私の場合
解決しました。ご親切大変ありがとうございました。
まだまだ勉強しなければと思っています。
これからもよろしくお願いいたします。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]
ChaichanPAPA's World