No.5ベストアンサー
- 回答日時:
$FORM{'hidden'}は出来るかもしれませんが止めましょう。
フォームのタグ名は用途がSUBJECTのようですのでそれに習って$FORM{'ksubject'}とでもすべきです。
また出力用のHTMLから、CGIそのものがShift-JISで書かれているようですが、フォーム受信データの処理で正規表現を利用しているため、正常に機能しない恐れが多分に有ります。環境にもよりますが、できれば元のフォームから含めてEUCで処理をするのが無難です。
ヒアドキュメント処理の部分で$T1の使いどころが変です。
メール用にJISに変換済みなので思いっきり化けるでしょう。
ヒアドキュメント処理の部分で$T1のところを、
使う使わないは別として元のフォームの内容をすべて渡すとして
------------------------------------------------
<form type="POST" name="f2" action="CGI-B.cgi">
<input type="hidden" name="kname" value="$FORM{'kname'}">
<input type="hidden" name="kmail" value="$FORM{'kmail'}">
<input type="hidden" name="ksubject" value="$FORM{'ksubject'}">
<input type="hidden" name="T1" value="$FORM{'T1'}">
<input type="hidden" name="T2" value="$FORM{'T2'}">
</form>
<a href="javascript:document.f2.submit()">$FORM{'T1'}</a>
------------------------------------------------
こんな感じで書けば良いのではないでしょうか。
いらないパラメータは削るとよいでしょう。
この回答への補足
ヒアドキュメントの部分は以下でよいでしょうか
<form>
<input type="text" name="T2" value="$FORM{'T2'}">
</form>
再度質問ですが、CGI-B.cgiにボタンが2つあって1つ(例えば”OK”)を押すとCGI-A.cgiにおいてT1の文字全体を別の文字に変化させるにはどうするのでしょうか
ご返事ありがとうございました。それで問題はCGI-B.cgiについてですが。CGI-B.cgiはCGI-A.cgiとヒアドキュメント以外はすべて同じとしてヒアドキュメントの部分をどのようにすればよいでしょうか。以下は中途半端な感じがしますが。inputとして出力したいのですが
<form>
<SCRIPT language="JavaScript">
<!--
document.write(javascript:window.opener.document.f2.T2.value);
// -->
</SCRIPT>
</form>
No.6
- 回答日時:
この質問の本質がHTML側に重きを置いたCGIに多少関連する程度のことなので良いのですが
> ヒアドキュメントの部分は以下でよいでしょうか
> <form>
> <input type="text" name="T2" value="$FORM{'T2'}">
> </form>
>再度質問ですが、CGI-B.cgiにボタンが2つあって1つ(例えば”OK”)を押すとCGI-A.cgiにおいてT1の文字全体を別の文字に変化させるにはどうするのでしょうか
こちらは明らかにHTML(DHTML)およびJavaScriptに関するまったく異なる質問です。
ずるずるとこちらでやってゆくより、別のカテゴリで質問するべきでしょう。
そうしないと同じような悩みや疑問を持っている方へのケーススタディ履歴や対応処置データベースとしての機能をはたさなくなります。
それと、できるだけトライアンドエラーで試行錯誤した状況というのをもう少し質問に反映した方が良いと思います。
ご健闘を祈ります。
No.4
- 回答日時:
> 詳細に書くと
> フォーム→確認(javascript)→送信(CGI) というパターンです。確認ページはjavascriptで作りました。フォームにおいて、
> 例えば、2つの項目があって1つの項目の内容だけをCGI-Aで受け取ります。もう1つの項目の内容を別のCGI-Bに送ります。
> CGI-Aを表示してから某リンク先をクリックするとCGI-Bが表示されるようにしたいのです。お分かりになりましたか。
上記の処理手順には矛盾点があります。
CGI-Aが表示された後、「某リンク」がクリックされなかった場合、CGI-Bは表示されない状態にあるわけですが、
・項目を事前に送信する意味はあるのでしょうか?
・またそれに対する「結果」は必要ないのでしょうか?(場合によっては処理が内部で終了して結果が表示以外の方法で残された後に破棄されるプログラムもありますが、その場合はCGI-Aからのクリックで表示されるのがCGI-Bである必要性は無くまったく別のCGI-Cでもかまわないわけですよね。もっといえばCGI-Bそのものの存在意義も無くCGI-Aの内部にその処理を組み込む発想の方が普通先に来ますが・・・)
仮にCGI-Aの結果表示中はCGI-Bは待機しているということをイメージしているのならサーバ処理としては最悪の結果を招くでしょう。
CGI-Aがエンドユーザに開きまくられながらも「某リンク」がクリックされない状態が続いたらサーバはCGI-Bの待機処理であっという間にリソースがいっぱいになって処理が立ち行かなくなるでしょう。
仕組み上CGI-AとCGI-Bは別プロセスで発生し、さらにCGI-Aからのリンクで発生するCGI-Bは元のCGI-Bではなく新しいCGI-B'としてプロセスが生成処理されますのでCGI-B'は処理されて終了にこぎつけたとしても、元のCGI-Bは永遠に待機処理のままゾンビプロセスになってしまいます。
要するにこのシナリオには
「最初に呼ばれるCGI-A」
「事前に呼ばれるCGI-B」
「CGI-Aのリンクから呼ばれるCGI-B'」
と3種のCGIが登場するわけですが
・CGI-BがCGI-B'になるまでにCGI-Bはいったいどこでなにをしなければならないのかという点(「CGI-B = CGI-B'」というロジックが破綻しています→別イベントで発生する処理なので関連性を持たせられない)
・表示がCGI-B'のみで処理されるならばCGI-BはCGI-B'と同じものである必要性はまったく無いのでは
・CGI-B'が表示を行わずに処理のみで終了するならCGI-AとCGI-Bを分ける必要性がまったく無いのでは
事前にCGI-Bに関わる処理を行いたいケースは有り得ると思いますが、CGI-B'と関連付けなければいけない具体的な事例などいただけないと平行線のままだと思います。
現状の処理
FORM →+→ CGI-A +→押有 CGI-B
| DATA-A |
| +→押無 ???
+→ CGI-B → ???
DATA-B
普通の処理
FORM →+→ CGI-A +→押有 CGI-B
DATA-A DATA-B
+
DATA-B
> blank, targetはどういう意味ですか
> document.f1.target = '_blank';
> document.f1.target = '_target';
HTML内で<form>でフォーム名「f1」に所属するフォームのターゲットをJavaScriptで指定しているだけです。
HTMLの基本ですので、<form>タグのパラメータ「target=」を参照してください。
あげあし取るようで申し訳ありませんが
> document.f1.target = '_target';
ではなく
document.f1.target = '_self';
です。
'_blank'は無名の窓で'_self'は自身の窓を指します。
この回答への補足
丁寧に教えていただき感謝しております。
確かに、「CGI-Bの待機処理であっという間にリソースがいっぱいになって」の通りだと思います。
FORM →+→ CGI-A +→押有 CGI-B
DATA-A DATA-B
+
DATA-B
この方が正しいと思います。この場合、CGI
の書き方ですが、
-----------------------------------
#! /usr/bin/perl
require "jcode.pl";
require "mimew.pl";
$SENDMAIL = '/usr/sbin/sendmail'; # sendmailのパス
$MAILTO = 'ジャストビュー<*********@ybb.ne.jp>'; # メールの宛先
# フォームデータの取得
if($ENV{'REQUEST_METHOD'} eq 'POST') {
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
}
else {
$query = $ENV{'QUERY_STRING'};
}
# フォームデータの復元
foreach $pair (split(/&/, $query)) {
($key, $value) = split(/=/, $pair);
# 文字のデコード
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
$FORM{$key} = $value;
}
# MIMEエンコード
$mail_to = mimeencode($MAILTO);
$mail_from = mimeencode($FORM{'kname'});
$mail_subject = mimeencode($FORM{'hidden'});
# 文字コードの変換
$T1 = jcode::jis($FORM{'T1'});
$T2 = jcode::jis($FORM{'T2'});
# メールヘッダーの生成
$header = <<END;
To: $mail_to
From: $mail_from<$FORM{'kmail'}>
Subject: $mail_subject
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
END
# メールの送信
open(MAIL, "| $SENDMAIL -i -t -f $FORM{'kmail'}")
or die("エラー:sendmailへのパイプが開けません");
print MAIL $header, "\n", $T1, $T2;
# サーバー出力
print <<END;
Content-type: text/html; charset=Shift_JIS
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head><title>めーるふぉーむ</title></head>
<body><br><br><br><br><br>
<p>$T1<p>
<p><center>ありがとうございました。<br> 後ほどメールを差し上げますのでお待ちください。</center>
<br><br><br>
<form><center><INPUT TYPE="BUTTON" VALUE="閉じる" onClick="window.close()"> </center></form>
</body>
</html>
END
-------
この中で「T1」「T2」とあるのは以前の回答の中にありましたnameです。<html>の中の書き方が分からないのですが、T1の中の一部の文字をクリックしたら、T2が表示されることが必要です。よろしくお願いいたします。
いちぶ修正します。
>T1の中の一部の文字をクリックしたら、T2が表示されることが
とありますが、
>T1の文字全体をクリックしたら、T2が表示されることが
が正解です。よろしく
No.3
- 回答日時:
あ、今考えていてなんとなくわかりました。
普通のフォーム処理CGIの動作だったんですね。
フォーム→確認(CGI-A)→送信(CGI-B) といったパターンでしょうか?
動作としては
CGI-Aの動作結果に元のフォームから受信した内容をINPUTタグのHIDDEN属性として吐き出します。
CGI-Aの結果から何らかの動作(たとえば送信ボタンなど)でCGI-Bに送信(SUBMIT)してやればよいのです。
要するにCGI-Aで隠しフォームを生成表示してやって、そのフォームからCGI-Bに送信してやるのです。
もし違ってたらごめんなさい。
この回答への補足
ralf124cさん
前のお答えで以下のようにありましたが
blank, targetはどういう意味ですか
document.f1.target = '_blank';
document.f1.target = '_target';
No.2
- 回答日時:
> 別窓とは「別ウインドウに表示」という意味ですか。
その通り「窓=ウインドウ」です。
> この場合、すぐ表示する必要はなく、あとでリンクしたらそのページが表示できればよいようにしたいと思っています。
どのようにしたいのかがよくわかりません。
言葉どおりに受け取ると質問とはまったく別のお話になってしまいます(質問では同時・ここでは前後別々?)。
CGIを二つ同時にリクエストするということは二つのブラウザが必要です。
もしもひとつの窓でそれを行いたいのならCGIはひとつしか呼び出せません。
後でリンクさせて表示させるなら、そのときにもう一方のCGIを実行してやればいいと思いますが・・・。
CGIにこだわらないのであれば、CGI用に製作された二つのプログラムの一方がもう一方をシステムイベントとして実行処理してやる方法も考えられますが、それならはじめから二つを組み合わせてひとつのプログラムにしとけば良いわけで・・・。
やっぱり、後付のお言葉が、質問と矛盾しているように受け取れますので、順序良く詳細をお願いします。
この回答への補足
教えていただきありがとうございます。
詳細に書くと
フォーム→確認(javascript)→送信(CGI) というパターンです。確認ページはjavascriptで作りました。フォームにおいて、例えば、2つの項目があって1つの項目の内容だけをCGI-Aで受け取ります。もう1つの項目の内容を別のCGI-Bに送ります。CGI-Aを表示してから某リンク先をクリックするとCGI-Bが表示されるようにしたいのです。お分かりになりましたか。
No.1
- 回答日時:
そのような書き方は試みたことはありませんがJavaScriptを使えば簡単です。
ちなみにどちらか一方は必ず別窓にしなければなりません。サンプル------------------------------------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<title>TEST HTML 4.01 - FORM</title>
</head>
<script language="javascript">
<!--
function fSubmitBoth(){
document.f1.action = './test01.cgi';
document.f1.target = '_blank';
document.f1.submit();
document.f1.action = './test02.cgi';
document.f1.target = '_self';
document.f1.submit();
}
//-->
</script>
<body>
<form method="POST" name="f1">
<p><input type="text" name="T1" size="20"></p>
<p><input type="text" name="T2" size="20"></p>
</form>
<p><input type="button" value="送信" name="B1" onclick="fSubmitBoth();"></p>
</body>
</html>
この回答への補足
ありがとうございました。ところでまだ初心者なので教えてください。別窓とは「別ウインドウに表示」という意味ですか。この場合、すぐ表示する必要はなく、あとでリンクしたらそのページが表示できればよいようにしたいと思っています。その場合はどうなるのですか
補足日時:2009/07/15 12:31お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- CGI CGIが読み書きするデータファイルのパーミッションはさくらのインターネットでは何にするべき? 1 2023/05/02 16:44
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript javascriptで入力フォームが空欄の時にアラートによるエラーを出すコードを書いています。 2 2023/06/13 17:58
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- ホームページ作成・プログラミング CGIが実行可能なHP領域又はレンタルサーバーでおすすめの所を教えてください 現在ホームページ領域の 1 2023/01/01 11:47
- CGI CGIで出力するhtmlの<!DOCTYPE html>等のタグは要りますか? 2 2023/02/05 21:26
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- PHP php 入力画面から確認表示画面へ情報の受け渡しについて。 1 2023/06/07 18:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
入力フォームの値が消える
-
ビジネスメールの敬称
-
DATE型変数を初期化する方法
-
エクセルVBA テキストボックス...
-
テキストボックスの番号を使っ...
-
教えて!全角文字「μ」の半角
-
excel vba でユーザーフォーム...
-
ホームページでCGIのフォームを...
-
EXCEL VBA で指定した範囲に入...
-
Excel-VBAでInputBox+Pulldown...
-
c#でTextBoxの入力制限
-
初歩的な事だと思います。 Sub...
-
数字以外の入力をエラーにする...
-
入力フォームの値をQRコードで...
-
accessで該当するレコードがな...
-
FIREFOXでWebページを表示でき...
-
アクセスのマクロ
-
VBA R1C1形式で変数の入力について
-
VBAの質問になります メッセー...
-
httpリクエストの送り元の特定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
入力フォームの値が消える
-
メールフォームで送信先アドレ...
-
ビルダー20 お問合せフォー...
-
アンケートフォームなどの送信...
-
ホームページビルダー18での...
-
フォームーSubmitから呼...
-
入力フォームの改造をしたいん...
-
携帯に任意のURLをメール転...
-
プルダウンの項目によって送信...
-
フォームから送信されたメール...
-
javascriptの数値をcgiへ渡したい
-
メールフォームで必須項目の仕方
-
javascript フォームタグ 画面...
-
ビジネスメールの敬称
-
エクセルVBA テキストボックス...
-
テキストボックスの番号を使っ...
-
DATE型変数を初期化する方法
-
Safariで「本当にこのフォーム...
-
VBAで質問があります
-
フォームを再送信しますか?
おすすめ情報