重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

お世話になります。
下のサンプルコードは、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を使っています。
よろしくお願いします。

A 回答 (2件)

CGI.pm の v2.15 以降であれば、-override に真を設定すれば常に -default の値が表示されるようになると思います。



textfield(-name=>'name', -default=>"" -override => 1),
    • good
    • 0
この回答へのお礼

ありがとうございます!!!
これでバッチリでした。

お礼日時:2013/07/17 21:04

$name = param('name') ;


等と先に値を取り出しておいて
-value=>"" を指定するのは?
もしかしたら、先に取り出す必要が無いかも。
    • good
    • 0
この回答へのお礼

ありがとうございます!

#! /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 />

のようになりました。
不思議ですね~

お礼日時:2013/07/17 21:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!