
お世話になります。
下のサンプルコードは、CGI.pmのperldocに載っていたサンプルを改造したものです。
#! /usr/bin/perl
#
# simple.cgi -- CGIフォームの実験
use CGI qw/:standard/;
use CGI::Carp qw/fatalsToBrowser warningsToBrowser/;
print
header( -expires=>'-1d',
-pragma => 'no-cache',
'Cache-Control' => 'no-cache'),
start_html('Simple Script'),
h1('Simple Script'),
start_form,
"What's your name? ",textfield(-name=>'name', -default=>""),p,
submit,
end_form,
hr,"\n";
if (param) {
print
"Your name is ",em(param('name')),p,
}
print end_html;
改造点はheader関数にexpires、pragma、Cache-Controlを入れてみたこと、
textfieldに-default=>""を入れてみたこと、
UIと表示項目を1つに減らしたことです。
やりたいのは、上のテキストボックスに名前を入れて、submitを押した瞬間に、上のtextboxをクリアすることです。
ぼくの理解では、最初に上記のCGIがあるURLにアクセスしたときにはプログラムは全部走ってしまう、paramがゼロだからそのときは入力表示を出すだけ、
実行を押した後もう一度このプログラムは最初から走る、paramに値があるから出力が表示される、というものです。
となれば、2度目に(入力を得て)実行されるときは、headerのcache関係の項目や、textfieldのdefaultが効いて空白になりそうな気がしますが、現実には最初に入った値がそのまま動き続けます。
これをPerl側で空白になるように制御できるでしょうか。
サーバーはFreeBSD(レンタル)、Perlは5.12、WebサーバーはApacheです。
クライアントはWindows7でIE9、Firefox22、Chrome28を使っています。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
CGI.pm の v2.15 以降であれば、-override に真を設定すれば常に -default の値が表示されるようになると思います。
textfield(-name=>'name', -default=>"" -override => 1),
No.1
- 回答日時:
$name = param('name') ;
等と先に値を取り出しておいて
-value=>"" を指定するのは?
もしかしたら、先に取り出す必要が無いかも。
ありがとうございます!
#! /usr/bin/perl
#
# simple.cgi -- CGIフォームの実験
use CGI qw/:standard/;
use CGI::Carp qw/fatalsToBrowser warningsToBrowser/;
$name = param('name');
print
header( -expires=>'-1d',
-pragma => 'no-cache',
'Cache-Control' => 'no-cache'),
start_html('Simple Script'),
h1('Simple Script'),
start_form,
"What's your name? ",textfield(-name=>'name', -value=>""),p,
submit,
end_form,
hr,"\n";
if (param) {
print
"Your name is ",em($name),p,
}
print end_html;
ということですね。
これはなぜかダメでした。
改造後も、表示後のHTMLソースを見ると
What's your name? <input type="text" name="name" value="さっき入力した値" /><p /><input type="submit" name=".submit" /></form><hr />
Your name is <em>さっき入力した値</em><p />
のようになりました。
不思議ですね~
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
内部処理形式が日付型 (Date) ...
-
JSONで文字列が長い時
-
formで特定のinputを送信しない...
-
Application.ScreenUpdating = ...
-
関数「exists」と「defined」の...
-
実行時エラー 3020の対策
-
メモリをアドレスを直接指定し...
-
複数列を持ったリストボックス...
-
セレクトボックスの「選択して...
-
文字の横にプルダウンを表示さ...
-
パソコン → パャRン
-
プルダウンメニューで中央表示
-
switch文のエラーについて
-
16進の10進変換について
-
UWSCのSELECT文の記述方法
-
optionのselectedは更新時は効...
-
先月(YYYYMM)の生成方法
-
シェルスクリプトで、空白(ス...
-
sendmailで送信したメールが届...
-
Pythonでコンソールをクリアす...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
内部処理形式が日付型 (Date) ...
-
Perlで足し算をするには
-
Perlで自分自身の関数名を知る...
-
icmp socket error
-
掲示板に入力した文を表示する...
-
CGIから複数の別プログラムを同...
-
連想配列とforeach
-
HASH(0xほげほげ)
-
Pythonのプログラミングの質問...
-
10進数→2進数
-
数値の多い順に別々の処理をす...
-
変数内でHTMLを使用したいです
-
親ループのループ変数$_を子ル...
-
Net::Telnetでタイムアウト時間...
-
Application.ScreenUpdating = ...
-
JSONで文字列が長い時
-
formで特定のinputを送信しない...
-
実行時エラー 3020の対策
-
セレクトメニューで2つの項目...
-
メモリをアドレスを直接指定し...
おすすめ情報