• ベストアンサー

こんな場合・・・

Perlでプログラミングしているんですが、HTMLの知識かも知れません。簡単そうなことなんですが、つまづいてしまいました。 下記のソース 矢印の部分を読んでください。 ソースの説明 以下は書き込みした後の確認画面のソースです。確認画面では自分が入力したことを確認できます。よく登録フォームとかでありますよね。 OKボタンを押すと書き込まれます。戻るボタンを押すと、書き込み画面に戻り再編集できるようにしたいと考えています。 <form method="post" action="$this_file"> <input type="hidden" name="op" value="w"> <input type=submit value="  OK  ">   #→OKを押したら1文上のパラメータを別ルーチンに送りたい。value="w"です。 <input type="hidden" name="op" value=""> <input type=submit value="  戻る  ">   #→戻るを押したら1文上のパラメータを別ルーチンに送りたい。つまり「value=""」です。 <input type="hidden" name="gname" value="$gname"> <input type="hidden" name="email" value="$email"> : : </form> 矢印文のことをしたいんですが、どうもどちらのボタンを押してもvalue=""が送られてしまうんです。これをちゃんと矢印文どおりにプログラミングさせたいんですがどう記述すればいいのでしょうか?HTMLの辞典を引いたんですけど、わからなかったです。

質問者が選んだベストアンサー

  • ベストアンサー
  • HUTABA
  • ベストアンサー率27% (436/1611)
回答No.1

1つのフォームの中にOKと戻るのボタンがあるので <input type="hidden" name="op" value="w"> が <input type="hidden" name="op" value=""> で上書きされてしまっているのでしょう。 このどちらのボタンを押しても、"w"と""の情報が送信されます。 <form method="post" action="$this_file"> <input type="hidden" name="op" value="w"> <input type=submit value="  OK  "> : : </FORM> <form method="post" action="$this_file"> <input type="hidden" name="op" value=""> <input type=submit value="  戻る  "> : : </FORM> としてフォームを分けるか、JavaScriptを組み込んで押されたボタンによって送信するデータを変えると良いと思いますよ。

Scotty_99
質問者

お礼

お礼おそくなりました。回答ありがとうございました。 同じような感じで早速やってみます。

その他の回答 (3)

回答No.4

#3ではちょっと不親切なので少し補足します。 要は前の入力画面に戻れればいいんですよね。 <form method="post" action="$this_file"> <input type="submit" value="  OK  "> <input type="button" name="back" value="  戻る  " onClick="history.go(-1);"> <input type="hidden" name="gname" value="$gname"> <input type="hidden" name="email" value="$email"> : : </form> こうすれば、hidden属性でパラメータを送る必要もないですし、スクリプト全体が簡潔になると思います。 パラメータを利用しなければ name="back" は不要でしょう。 "history.back" という JavaScriptもありますけど、 "history.go" 一つ覚えておけば、戻るも進む自由なので これが、いいのではないかな。()の数値が進む(マイナスの場合は戻る)段階数です。

Scotty_99
質問者

お礼

お礼おそくなりました。2度の回答ありがとうございました。 早速やってみました。ただ、入力履歴が消えてしまわないようにしたかったです。書き忘れました。でも、参考になりました。

回答No.3

<input type="button" name="back" value="戻る" onClick="history.go(-1);"> こういう方法もあります。一番かんたんかも。

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

No.1 で HUTABA さんが書かれている通り、1つの FORM 内に同じ name のフォーム部品を置くことはできません。 簡単なのは、op を hiddenフォームではなくOKボタンの name にすることです。 こうすれば、   OKボタンを押す → op が送信される   戻るボタンを押す → op は送信されない となるので、送信先CGIでは op というパラメータが送信されているかどうかをチェックすれば済みます。

Scotty_99
質問者

お礼

お礼おそくなりました。早速の回答ありがとうございました。 nameで送るのが楽そうですね。

関連するQ&A