Perlでフォーム部品を使った CGIを作っています。

下のようなソースなのですが、ラジオボタンのデフォルト値の扱いがうまくできません。
やりたいのは、CGIを最初に起動したときは「OFF」、
ラジオボタンを好きに設定変更してたとえば「ON」に変更した後、
「処理スタート」ボタンを押したり、F5キーで更新したりしても
自分で設定した「ON」が維持されているようにしたいです。

下のソースのように、"off"の方に「Checked」をつけると
ボタンを押したり更新するたびに「OFF」に戻ってしまいます。
その他いろいろやってみたのですが、うまくいきません。
どうしたら上記のようなことができるでしょうか?

ブラウザはIE8です。

use CGI qw(param);

$AutoMode = param('AutoMode');

if( $AutoMode eq "" ){
$AutoMode = "off";
}

print <<HTML1;

<html>
<body>

<form name="test" action="radio.cgi" method="post">

<input type="radio" name="AutoMode" value="off" Checked> 自動モード OFF<br>
<input type="radio" name="AutoMode" value="on"> 自動モード ON<br>
<br>
<input type="submit" value="処理スタート"><br>

</form>

</body>
</html>

HTML1

exit;

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/05/25 09:27:39
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:shintabo No.1

回答回数45ベストアンサー獲得回数10

ポイント200pt

# こーいぅーことですか?

#!/usr/local/bin/perl

use strict;

use warnings;

use CGI qw(param);

my $AutoMode = param('AutoMode');

my $OffMode;

if( $AutoMode eq "on" ){

$AutoMode = "checked";

} else {

$OffMode = "checked";

}

print "Content-type:text/html\n\n";

print <<HTML1;</p>

<html>

<body>

<form name="test" action="hatena.cgi" method="post">

<input type="radio" name="AutoMode" value="off" $OffMode> 自動モード OFF

<input type="radio" name="AutoMode" value="on" $AutoMode> 自動モード ON


<input type="submit" value="処理スタート">

</form>

</body>

</html>

HTML1

exit;

id:uta_at_home

ありがとうございます。

そういうことです!


私のやりたかったことは、shintaboさんの書いてくれたソースでほぼできました。

(似たことを自分でもやったつもりだったのですが、そのときは、なぜかうまくいきませんでした。

変数をmy宣言しなかったからかな?)


「自動モードON」を選択。「処理スタート」を押す前に、F5キーで更新。

とすると「自動モードOFF」に戻ってしまいますが、これはしょうがないですかね?

2010/05/25 01:14:54

その他の回答1件)

id:shintabo No.1

回答回数45ベストアンサー獲得回数10ここでベストアンサー

ポイント200pt

# こーいぅーことですか?

#!/usr/local/bin/perl

use strict;

use warnings;

use CGI qw(param);

my $AutoMode = param('AutoMode');

my $OffMode;

if( $AutoMode eq "on" ){

$AutoMode = "checked";

} else {

$OffMode = "checked";

}

print "Content-type:text/html\n\n";

print <<HTML1;</p>

<html>

<body>

<form name="test" action="hatena.cgi" method="post">

<input type="radio" name="AutoMode" value="off" $OffMode> 自動モード OFF

<input type="radio" name="AutoMode" value="on" $AutoMode> 自動モード ON


<input type="submit" value="処理スタート">

</form>

</body>

</html>

HTML1

exit;

id:uta_at_home

ありがとうございます。

そういうことです!


私のやりたかったことは、shintaboさんの書いてくれたソースでほぼできました。

(似たことを自分でもやったつもりだったのですが、そのときは、なぜかうまくいきませんでした。

変数をmy宣言しなかったからかな?)


「自動モードON」を選択。「処理スタート」を押す前に、F5キーで更新。

とすると「自動モードOFF」に戻ってしまいますが、これはしょうがないですかね?

2010/05/25 01:14:54
id:shintabo No.2

回答回数45ベストアンサー獲得回数10

ポイント150pt

> 「自動モードON」を選択。「処理スタート」を押す前に、F5キーで更新。

>

> とすると「自動モードOFF」に戻ってしまいますが、これはしょうがないですかね?

それは、Cookieとか使わないとダメです。

radioのonclickで、

document.cookie = "xxx";

して、

cgi側で、$cgi = CGI->new(); $cgi->cookie(xxx)で分岐する

とか、

もしくは、onclickでsubmitしちゃうのもアリですね。

id:uta_at_home

重ね重ね、ありがとうございます。


あれはクッキーを使っているのですね。

onclickでsubmitは仕様上まずいので、

教えてもらった方法でクッキーに挑戦してみます。

2010/05/25 09:21:04
  • id:shintabo
    ちなみに、

    > (似たことを自分でもやったつもりだったのですが、そのときは、なぜかうまくいきませんでした。
    >
    > 変数をmy宣言しなかったからかな?)

    では、ありませんよ。

    checkedを静的に「off」の場所に書いてたのが原因です。
  • id:uta_at_home
    > checkedを静的に「off」の場所に書いてたのが原因です。

    バグの原因まで教えてもらって、ありがとうございます。

    昨夜 shintaboさんが回答してくれたソースを
    自分の CGIにマージしているときに違いに気付きました。

    Perlはときどき使っているのですが、
    自己流で知識もスキルも低いままで
    お世話をかけてしまいました。

    いろいろ詳細に教えていただいて本当に助かりました。
    ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません