• ベストアンサー

POSTとGETを利用しようと

サブミットのときにはgomiのデータが$_POST['gomi']にセットされキャンセルのときにはgomiのデータが$_GET['gomi']にセットされるようにしたいのですが x.html: <form action="x.php" method="post"> <input type="text" name="gomi"/> <input type="submit" value="set"/> </form> <p><a href="x.php">cancel</a></p> ではもちろんcancelをクリックしても$_GET['gomi']にgomiのデータがセットされません どうしたらできるでしょうか?

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

#3つづきです なぜか話が平行線になってきたので、これ以上 話を聞き入れてもらえそうにもありませんが、 もう少しよく考えてみてください。 おそらくPOSTとGETという言葉に混乱されている と思います。データが途中かどうかをPOSTかGETか で判断するのはまったく意味のないことです。 その考え方はナンのメリットもないので捨ててください。 例えばチェックボックスで全部完了したら チェックさせたり、ラジオボタンですべて入力 したら完了に手動できりかえるなどでじゅうぶんです。 サーバーにデータを送るのはPOSTで統一してください。 それに入力途中の項目があるかどうかをサーバー サイドでチェックするのは最低限必要なことなので POSTで送られたら即完了というのもやっては いけません。 以上から、フローをもっと真剣に考えた上で 適切なデータの受け渡しをなさるとよろしいかと。 そもそもPOSTで途中データを送ってしまえば 途中までのデータを引き継いで、再入力を省略する フォームも簡単に実現できます。

guuman
質問者

お礼

このシステムではindex.phpで POSTした場合とGETした場合で飛び先が違っていますが 私が設計するとしたら 飛び先を同じにして 両方ともsubmitによるpostにして どちらのsubmitによりpostされたかによって 処理内容を変えるようにします そのときには質問の問題は発生しないと思われます

guuman
質問者

補足

ありがとうございます 目的は http://www.hizlab.net/app/meibo.html にある http://www.hizlab.net/app/view/meibo/index.php?prev=meibo.html%23makepage ・・・(*) の変更です このプログラムにはバグがあるのがわかったのでこの修正をしたかったのです http://www.hizlab.net/app/view/meibo/new.php?prev=meibo.html%23makepage に対してGET時データを送っていないのでphpエラーになります をれを修正したかったのです このファイルを見てみるとGET時データを受け取って処理をしています ところが(*)ではGETのときに何も送っていないのです それがエラーになります

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

#2です ご質問の命題はキャンセル=途中まで入力して送信 ということでしょうか?それであれば入力が途中 だろうが、完了していようが関係ないので、 普通にpostでデータを送って問題ないと思います。 受けたx.php側で足りないデータをチェックする のではいけませんか? ちなみにgetに任意の引数を渡すのにsubmit以外の トリガーを使用するにはスクリプトしか考えられ ません。(#2のようにpostをgetにかえるのでは なく直接hrefを編集するにしてもスクリプトは 必要) そもそも途中データを検証するというアプローチは ユーザビリティを高める仕様であってスクリプトが 無効であれば、一からデータをいれる手間が発生する のは仕方ない(というか当然)のことだと思いますが。

guuman
質問者

お礼

ありがとうございます POSTの場合はx.phpで入力完了時の処理を GETの場合にはx.phpで別の入力処理をするが途中の入力のうち使えるものは入力のデフォルトとして使い入力者の手間を削減するというものです やはり無理なのですね Javascriptが使えないブラウザだけ手間がかかるという犠牲だから大きくはないということですね

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

質問内容に矛盾があります。 キャンセルしているのに送信してしまったら ぜんぜんキャンセルじゃないじゃないですか? それでももしやりたいならこんな感じでしょうか? <form action="x.php" method="post"> <input type="text" name="gomi"/> <input type="submit" value="set"/> </form> <p><a href="javascript:post2get()">cancel</a></p> <script language=javascript> function post2get(){ document.forms[0].method='get'; document.forms[0].submit(); } </script> おそらくブラウザ依存しますがIE6では動いています

guuman
質問者

お礼

ありがとうございます 途中まで入力してキャンセルした場合は入力したデータを x.php内のフォームのテキストに入れてそこで新たな編集による入力とするのです x.phpもフォームですからその入力の手間を省くのです 実際には10項目の入力になります canselではなく別メニューに移行するということでしょうか 質問をわかりやすくするために単純化したために誤解を招いたようです ところでJavascriptをOnにしていないブラウザのことを考えてJavascriptを使わない方法となると不可能でしょうか?

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

<form action="x.php" method="post"> <input type="text" name="gomi"/> <input type="submit" value="set"/> </form> <p><a href="x.php?gomi=HOGE">cancel</a></p> こういうことですか?

guuman
質問者

補足

ありがとうございます x.php?gomi=HOGE のHOGEにテキスト欄に入力されている文字列を入れたいのです

関連するQ&A