• ベストアンサー

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のデータがセットされません どうしたらできるでしょうか?

  • guuman
  • お礼率86% (1043/1206)
  • PHP
  • 回答数4
  • ありがとう数5

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

  • ベストアンサー
  • 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

  • GETとPOSTを同時利用したい

    wordpressで下記のようにPOSTを使用して遷移先のメールフォームにデータを渡しています。 コードの作成は(http://blog.goo.ne.jp/xmldtp/e/0884dbe92721ab84cb27d212ca631094)を参考にしました。 <a href="" onclick="document.mail_form.submit();return false;" > <img src="@@@.png" alt="お問い合わせフォーム"> </a> <form action="<?php echo get_permalink( @@@ ); ?>" method='post' name="mail_form" target="_blank"> <input type='hidden' name='post_id' value="<?php echo $post->ID; ?>"> </form> これをそのまま流用し、<form>内の遷移先URLに『?view=english』を追加して英語版での表示切替をしようとしたのですが、これをつけるとPOSTの情報が遷移先に渡らなくなりました。 <form action="<?php echo get_permalink( @@@ ); ?>?view=english" method='post' name="mail_form" target="_blank"> <input type='hidden' name='post_id' value="<?php echo $post->ID; ?>"> </form> どのようにすればPOSTの内容を維持したまま遷移先URLにGETの文字列を追加させることができますか?

    • ベストアンサー
    • PHP
  • postのタイムラグ

    以下のソースでPOSTの値が取れないときがあるので困っています。 具体的にはページを表示してから30秒程度待ってからの クリックじゃないとPOSTの値が取れません。 GETの場合はページ表示後すぐにボタンをクリックしても大丈夫でした。 原因が分からず途方に暮れています。 お知恵をお貸しください。 PHP Version 5.2.3 <?php $P_data = $_POST["pg"]; print("POST=>".$P_data."<BR>"); $G_data = $_GET["pg"]; print("GET=>".$G_data."<BR>"); print <<< DOC_END <html> <head> </head> <body> DOC_END; echo"<form action=test.php method=post>"; echo"<input type=hidden name=pg value=1>"; echo"<input type=submit value=あ>"; echo"</form>"; echo"<form action=test.php method=post>"; echo"<input type=hidden name=pg value=2>"; echo"<input type=submit value=い>"; echo"</form>"; echo"<form action=test.php>"; echo"<input type=hidden name=pg value=3>"; echo"<input type=submit value=う>"; echo"</form>"; echo"<form action=test.php>"; echo"<input type=hidden name=pg value=4>"; echo"<input type=submit value=え>"; echo"</form>"; print <<< END </body> </html> END; ?>

    • 締切済み
    • PHP
  • $_POSTのものを$_GETとして使うのはなぜ?

    http://www.phppro.jp/school/phpschool/vol19/2 こちらの講座にあるサンプルコードで分からないところがあります。 schedule_edit.phpのサンプルでは if (isset($_POST["year"]) && is_numeric($_POST["year"]) && $_POST["year"] > 2000) { $year = $_POST["year"]; <form action="schedule_edit.php" method="post"> <input type="text" name="year" id="schedule-year" value="<?php print(htmlspecialchars($year, ENT_QUOTES)); ?>" /> <label for="schedule-year" id="label-year">年</label> formで入力されたデータはhtmlspecialchars($year, ENT_QUOTES)の$yearに格納され、 $_POST["year"]としてデータが渡り、 php側で$year = $_POST["year"];のように$_POST["year"]のデータが$yearに格納し直されています。わざわざ格納し直す理由も分からないのですが、一番知りたいところは schedule_list.phpのサンプル内ではPOSTでなくGETで渡されているところです。 if ($schedule_date == date("Ymd", mktime(0, 0, 0, $_GET["month"], $_GET["day"], $_GET["year"]))) $_POST["day"]ではなぜだめなのか分かりません。 この$_GET["year"]はschedule_edit.phpの$_POST["year"]を見ているわけではないのでしょうか。

    • ベストアンサー
    • PHP
  • POSTで送りたい

    PHP初心者です HTMLタグが混じっ文字をHTMLごとPOSTで次ページに送る方法を教えてください ここでは<p><a href="./">TOPに戻る</a></p>をポストしたいです <form action = "test_view.php" method = "post" > <input type="text" name="<p><a href="./">TOPに戻る</a></p>"> <input type="submit" name="" value="送信"> </form> よろしくお願いします

    • ベストアンサー
    • PHP
  • 1アクションでPOST・GET、両方送信したい

    1つのフォームからボタンをクリックして、 POST・GET送信と、両方飛ばすには、どうすればよいでしょうか? URLに「表示させたいパラメータ」と「表示させたくないパラメータ」 があります。 「表示させたいパラメータ」は、GETで、 「表示させたくないパラメータ」は、POST送信したいのですが、 1つのフォームで、同時に飛ばす方法が分かりません。 <form method =post action=hoge.php>  <input type=text name="piyo" value="piyo">  <input type=hidden name=puyo_id value=puyo>←これだget送信したい  <input type=submit value="送信"> </form>

    • ベストアンサー
    • PHP
  • GETはできるがPOSTができない、、、

    PHPの勉強を始めたのですが、困ってるので教えてください。 HTMLのformタグでmethod="GET"では、PHPへデータが渡るのですが、"POST"ではデータが渡りません。 このような場合、どのような原因が考えられるのでしょうか? 環境は OS: WindowsXP(SP2 PHP: 4.3.10 Apache: 2.0.52 すべてSJISで統一しています。 よろしくお願いします。

    • 締切済み
    • PHP
  • POST送信かGET送信か

       ------------------------------------------ <SCRIPT language="JavaScript"><!-- function GoPage(url, id){ document.form.action = url; document.form.id.value = id; document.form.submit(true) } // --></script> <!--中略--> <input type="submit" name="submit" value="送信" onClick="javascript:GoPage("a.php", "1")">    ------------------------------------------    上記のような処理を書いた場合、 遷移先である a.php で id(値:1)を取得する時は POSTで受け取るのですか?それともGETでしょうか?   

  • POST GET HTTP 404 未検出

    POSTメソッドとGETメソッドの混在したFORMで404エラーとなります。 具体的には、次のようなFORMを考えています。 <form action="login.php?hoge=hogehoge" method="POST"> <table border="0"> <tr><td>ユーザ名</td><td><input type="text" name="name"></td></tr> <tr><td>パスワード</td><td><input type="password" name="pass"></td></tr> <tr><td colspan="2"><input type="submit" value="ログイン"></td></tr> </table> </form> Windows XPではうまく機能するのですが、 Vineではうまくいきません。「HTTP 404 未検出」となります。 どうしたらいいのかさっぱり分からない状態です。 エラーの原因を教えていただければと思います。 詳しい環境: OS:Vine PHP:5.2.8 Apache:2.0

    • 締切済み
    • PHP
  • サブミットの違い

    jspに <form action="XXaction" method="post"> <a href="XXaction" onclick="setData()">○○△</a> <input type="submit" value="○○" onclick="setData()"> </form> のように記述してます。 (実際はonclickのjavascriptも実装してます) ボタンを押すとpostとしてサブミットされるのに、 リンクをクリックするとgetでサブミットされます。 1.なぜgetになるのでしょうか? 2.どうしたらpostで飛ばせるでしょううか?

    • ベストアンサー
    • Java
  • GETだと初回しかSubmitが実行されない

    テキストフィールドに入力し、検索ボタンを押すと、DBを検索し 値を表示するプログラムをphpに <? if($submit){ (データ取得) $cd = "test" } ?> <form action="XX" method="post"> <input type="text" name="cd" value="<?=$cd;?>"> <input type="submit" value="検索"> </form> のように記述してます。 ボタンを押すとサブミットされDBより取得した内容「test」と表示され、何度押してもリロードされtestと表示されるのに、 methodをgetにすると、2度目以降何度押しても リロードされている様子がありません。 フィールドのテキストを換えて押しても 反応していないようです。 1.なぜgetだと1度目しかSubmitが動かないのでしょうか? 2.どうしたらgetでリロードができるでしょうか?

    • 締切済み
    • PHP