• 締切済み

Config::Simple利用でfromの保存ボタンを押した時に保存させたい。

初心者にほぼ近いものです。 Config::Simple利用でformの保存ボタンを押した時に 保存させ次のページに移動したいと考えていますが、 正しく動作しません。 解決策をご存じの方お願いします。 【考えているソース】 前後省略 print "<FORM ACTION='hozon_kanryo.html' METHOD='post'>\n"; print "<INPUT TYPE='submit' name='btn' VALUE='登録'>\n"; if($form->param('btn')){ $list->write(); } print "</FORM>\n"; $listには正しくデータが格納してあり if文をなくせば、このページを読み込んだ段階で 保存されてしまいます。 (ifの定義は他のサイトで参照し出来るのか分からず 試してみたものです) どうにかformでsubmitされた時に保存する方法は ないでしょうか?

みんなの回答

回答No.1

一旦 CGI スクリプトを経由して、リダイレクトで移動させるのはどうで しょう?つまり、 (1) パラメータをチェック (2) Submitボタンが押されていたら、ファイル保存などした後でリダイレ クト (3) 押されていなかったら、フォームを表示 つまり、 if (パラメータチェック) { ファイル保存 リダイレクト } else{ HTML表示 print "<FORM ACTION=自身のCGIスクリプト METHOD='post'>\n"; ... } ということです。 #!/usr/bin/perl -T use strict; use warnings; use utf8; use CGI; use CGI::Carp qw(fatalsToBrowser); use CGI::Pretty; use constant DEST_URI => 'http://www.google.com/'; my $q = CGI->new(); my ($button) = $q->param('Submit'); if ( defined $button ) { # Save File, etc print $q->redirect(DEST_URI); } else { print $q->header( -charset => 'UTF-8' ), $q->start_html(), $q->h2("Forms"), $q->hr, $q->start_form( -method => 'get', -action => $ENV{'SCRIPT_NAME'} ), $q->submit( -name => 'Submit', -value => 'Value' ), $q->end_form, $q->end_html; }

big_vine
質問者

お礼

回答有難うございます。 一旦 別のCGIスクリプトを経由して、と言うのも考えて いたのですが、やはりこの方法が早いかな。 また、下記のような use CGI::Carp qw(fatalsToBrowser); use CGI::Pretty; 知らないモジュールまで勉強になりました。 いろいろ便利なものがあるんですね。 有難うございました。

関連するQ&A

専門家に質問してみよう