CGI-BBS > 基礎 > その他 > CGIから別のWEBページを開きたい。


カレッヂ
カレッヂ


質問者 極超初心者  投稿日 1/17(金) 17:48:21
先日は早々のご回答をいただきましてありがとうございました。

再度で申し訳ないのですが、またまた質問です。

WEBの入力フォームからCSVに落とすCGI(Perl)をまだ作成中です。
WEBの入力フォーム→CGI(Perl)→CSVまではできたのですが、CGI(Perl)からCSVに落とす前に、入力したデータを表示して確認するWEBページ(htmlファイル)を作成しました。
このWEBページをCGIからブラウザに表示させたいと思うのですが、この場合はどのようにすればよいでしょうか?

ご存知であれば、誠に申し訳ございませんが、教えていただけないでしょうか?

宜しくお願い致します。

プロバイダ参照:
サーバのOS:WINサーバ
パソコンのOS:WinNT系
エディタ:TeraTerm
FTPソフト:FFFTP
サーバ移転:していない
改造:していない
CGI習熟度:firsttime

回答者 しあわせのツボ  [削除]  投稿日 1/17(金) 20:20:11
予め用意したHTMLをただ表示するだけなら
if (!open(IN, "ファイル名")) { 適宜エラー処理; }
print while <IN>;
close(IN);
とするだけです。

目的から察するにこれではないだろうことはわかっているのですが、
質問を文字通りに読むとこう答えるしかないので。
何かあったらまた質問してください。
質問者 極超初心者  [削除]  投稿日 1/20(月) 16:17:23
しあわせのツボさん、今回も早々にご返信いただきまして、誠にありがとうございます。感謝致します。
詳しい説明ができず、困惑させてしまって大変失礼しました。

現在作成しているWEBからの入力フォームのデータにつきまして、最初私は、WEBの入力フォーム→CGIでのデコード→WEBでの確認画面→確認後ボタンによりCSVに登録という流れを考え、
ファイル間のデータの流れとしてはWEB入力フォームhtmlファイル→CGIファイル→確認用htmlファイル→(CSVファイル)を考えていました。
そのため、前回の質問でCGIファイルから別個の確認用htmlファイルを開く方法を尋ねさせていただきました。
しかし、その後本等を見たところ、CGIファイルにhtmlタグを書き込むことによって開くことが一般的であることが分かり、そのようにしました。
#教えていただいたにもかかわらず、大変申し訳ございません。
その結果、確認のWEB画面でデータは表示できました。この画面から、確認ボタンによってCSVファイルに書き込みをしたく、HTMLのformタグで設定をしたいのですが、うまくいきません。
WEB確認ページのformのinputで設定された"c1""OK"のデータを、その下のif文以下に続いていければと思うのですが、その場合のformの設定が分かりません。
再度で申し訳ございませんが、何かアドバイスをお願いできませんでしょうか?

その部分のPerlプログラムを示します。

# POSTメソッドかGETメソッドかによる処理
if( $ENV{'REQUEST_METHOD'} eq "POST" ) {
read( STDIN, $buffer, $ENV{'CONTENT_LENGTH'} );
} else {
$buffer = $ENV{'QUERY_STRING'};
}
@buf = split( /&/, $buffer );

# HTMLから渡された文字を処理して変数に代入する
foreach $data ( @buf ){
( $num, $val ) = split( /=/, $data );
$val =~ tr/+/ /;
$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex( $1 ))/eg;

$personal{$num} = $val;
}

print <<EOT;
Content-type: text/html

#確認用WEBページ
<HTML><head><title>データ確認</title></head>
<body>
名  前=$personal{'a1'}<br>
性  別=$personal{'a2'}<br>
年  齢=$personal{'a3'}<br>
郵便番号=$personal{'a4'}<br>
住所(ご自宅)=$personal{'a5'}<br>
電話番号=$personal{'a6'}<br>
勤 務 先=$personal{'a7'}<br>
所  属=$personal{'a8'}<br>
役  職=$personal{'a9'}<br>
よろしければ”OK”を押してください。<br>データの修正を行いたい場合はブラウザの”戻る”ボタンにて、参加申し込みフォームに戻って修正を行ってください。<br>
<form action="">
<input type = "hidden" name = "c1" value="OK">
<input type="submit" value="確認">
</form>
</body>
</html>
EOT

#CSVへの書き出し
if ($personal{'c1'} eq OK){

to_csv();
close (FILE);

} else {

close (FILE);

}

#CSVファイルに出力するための関数
sub to_csv {

$file = "sheet.csv";
chomp ( $personal{'a1'} );
chomp ( $personal{'a2'} );
chomp ( $personal{'a3'} );
chomp ( $personal{'a4'} );
chomp ( $personal{'a5'} );
chomp ( $personal{'a6'} );
chomp ( $personal{'a7'} );
chomp ( $personal{'a8'} );
chomp ( $personal{'a9'} );

print FILE "$personal{'a1'}\t,$personal{'a2'}\t,$personal{'a3'}\t,$personal{'a4'}\t,$personal{'a5'}\t,$personal{'a6'}\t,$personal{'a7'}\t,$personal{'a8'}\t,$personal{'a9'}\n";

close (FILE);
}

おかしな部分が多々あり、見にくいと思いますが、私にとって本件が始めてのことなので、お許しください。

宜しくお願い致します。
回答者 しあわせのツボ  [削除]  投稿日 1/20(月) 19:39:30
気がついた点だけ簡単に。
# こうなると解読するより自分で書いた方が早いのですが(苦笑)

まず、このHTMLだと、チェックしたことはCGIに伝わりますが
どんなデータをチェックしたかが伝わりませんね。
全ての項目について、inputタグで埋め込んでおかなければなりません。
<form>
名前=$personal{'a1'}<input type="hidden" name="a1" value="$personal{'a1'}"><br>
(略、他の項目も同様に)
<input type = "hidden" name = "c1" value="OK">
<input type="submit" value="確認">
</form>
のように。

次に、この流れだとチェック済みでも再度確認画面が出てしまいますね。
最初にc1を調べ、OKならCSVに書き込んでからありがとう画面を出し、
そうでない時には確認画面を出すようにする必要があります。

そして、このコードだとCSVに記録されません。
closeが2つあってopenがないのは不自然なので、省略したのかとも思いますが。
なお、フォームから来たデータはchomp不要ですし、
CSVに書き出す際の\tは余計です(それはタブ区切りであってCSVではありません)。


プログラムはひとつながりになっているものなので、
中途半端に切り出されると意味不明になってしまいます。
今後ソースを示す必要がある場合は、拡張子を.txtにしたものを用意し、
全文をどこかにアップしてアドレスを示した方が確実です。
質問者 極超初心者  [削除]  投稿日 1/21(火) 13:12:10
しあわせのツボさん、またまた早急のご返信をいただきまして、誠にありがとうございました。
お陰を持ちまして、確認画面の表示・CSVの書き出し・入力ありがとうの画面までの表示ができました。

私の周りにCGIに詳しい者がおりませんで、こちらの掲示板を頼りにさせていただきました。
今回は大変助かりました。重ね重ねお礼申し上げます。ありがとうございました。

これから本サーバーに載せてのテストを行う予定でおります。
また何かありましたら質問させていただきたいと思いますので、申し訳ございませんが、宜しくお願い致します。

このページは終了したので返信(回答)は書きこめません
 


Web裏技