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

フォーム部分では、次のように2種類の送信ボタンを作っています。

<form name="test" action="test.cgi" method="post">
    <input type="submit" value="処理1を実行"><br>
    <input type="submit" value="処理2を実行"><br>
</form>

「処理1を実行」ボタンが押されたときと、「処理2を実行」ボタンが押されたときとで
違う処理を行いたい(CGI内の違うサブルーチンを実行したい)のですが、
どうやって処理を分けたらいいのでしょうか?

どちらのボタンが押されたのか、呼び出された「test.cgi」で見分ける方法はあるでしょうか?

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

ベストアンサー

id:koriki-kozou No.1

回答回数480ベストアンサー獲得回数79

ポイント200pt

ボタンにnameをつけておけば、押されたほうのnameとvalueが送られてくる

<input type="submit" name="s1" value="処理1を実行"><br>
<input type="submit" name="s2" value="処理2を実行"><br>

test.cgi のほうではs1、s2のどちらが存在するかによって処理を分ければいい

my $s1 = param('s1') || '';
my $s2 = param('s2') || '';
if (param('s1') != '') {
    処理1
} else if (param('s2') != '') {
    処理2
}
id:uta_at_home

ありがとうございます。

シンプルなソースで、私の書いてるCGIにすぐ使えそうです。

試してみます。

2010/06/22 20:53:36

その他の回答1件)

id:koriki-kozou No.1

回答回数480ベストアンサー獲得回数79ここでベストアンサー

ポイント200pt

ボタンにnameをつけておけば、押されたほうのnameとvalueが送られてくる

<input type="submit" name="s1" value="処理1を実行"><br>
<input type="submit" name="s2" value="処理2を実行"><br>

test.cgi のほうではs1、s2のどちらが存在するかによって処理を分ければいい

my $s1 = param('s1') || '';
my $s2 = param('s2') || '';
if (param('s1') != '') {
    処理1
} else if (param('s2') != '') {
    処理2
}
id:uta_at_home

ありがとうございます。

シンプルなソースで、私の書いてるCGIにすぐ使えそうです。

試してみます。

2010/06/22 20:53:36
id:hanako393 No.2

回答回数1142ベストアンサー獲得回数87

ポイント100pt

http://okwave.jp/qa/q1284270.html

この回答が参考になります。

・ボタン名を2つとも同じ名前にする

・value名を2つとも違う値にする

これをまもれば簡単に簡単にできます。

id:uta_at_home

ありがとうございます。

こちらも参考になります。

nameでわける方法と、valueでわける方法があるのですね。

2010/06/22 20:54:25
  • id:koriki-kozou
    koriki-kozou 2010/06/22 20:57:56
    ちょっと訂正
    if ($s1 != '') {
    処理1
    } else if ($s2 != '') {
    処理2
    }

    valueでやる場合は、ボタンの表示が変わってしまうのが難点といえば難点
  • id:uta_at_home
    試してみたところ、koriki-kozouさんに教えてもらった方法でうまくいきました。
    (コメントで訂正してもらった方のソースで)

    お二人ともありがとうございました!

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

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

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

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