- ベストアンサー
ボタンの処理について。
拡張子.phpでボタンが2つあるページを作りました。 ボタン1がクリックされた時の処理と、ボタン2がクリックされた時の処理を別々に行いたいのですが、どのようにすればいいのでしょうか。 また、ボタン1がクリックされた時の処理で、変数aに2を代入し、その後、ボタン2がクリックされた時の処理で、変数aに2が代入された状態にするにはどのようにすればいいのでしょうか。 グローバル変数を使うとしたら、使い方を具体的にお願いします。 他のページには飛ばず、同じphpファイル内に記述するとしてお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
submitのnameで処理を分ける方法もありますよ 以下のような書き方なら表示するボタンは常に1つでも作れます ※処理内容によって出来ないときもあるかもですが <? if($_REQUEST[case1] == FALSE){ $name = "button1"; $button = "case1"; } if($_REQUEST[case1] == TRUE){ $name = "button2"; $button = "case2"; $a = "2"; } ?> <form method="post" action=""> <input type="text" value="<? print $a; ?>" name="a"> <input type="submit" value="<? print $name; ?>" name="<? print $button; ?>"> </form> ※変数aの中身がわかりやすいように hiddenではなく textにしてます 処理の流れや内容が不明なので中途半端なコードになっておりますが 参考になれば。(見当違いだったら申し訳ないです)
その他の回答 (1)
- neko-ten
- ベストアンサー率55% (1287/2335)
基本的にメソッドで飛ばされた変数を元に処理を行いますので、 各ボタンごとにフォーム切り分けて、パラメータごとに条件分岐させればいいのでは? 簡単には、フォームを切り分けてしまうことです。 ------------------------------------------------------------------------------- FileName:test.php <form action="test.php" method="post"> <input type="hidden" name="mode" value="Prm1"> <input type="submit" value="Submit1"> </form> <form action="test.php" method="post"> <input type="hidden" name="mode" value="Prm2"> <input type="submit" value="Submit2"> </form> <?php $PostVal = $_POST["mode"]; switch($mode){ case "Prm1": /* 処理1 */ break; case "Prm2": /* 処理2 */ break; } ?> ---------------------------------------------------------------------------------- なお、ページ遷移がないということですが・・・ targetが自分でも読み込みは行いますが、この動作もしたくないということでしょうか? もしそうならAjaxで非同期通信をすることになるかと。 グローバル変数はすべてのスコープから参照できる変数のことです。 PHPの場合は関数の外で変数が宣言されていても関数の中からは参照できません。 関数内部から参照するためにグローバル変数を使います。今回のような用途では使いません。(使えません) 今回の場合ですと、ボタン1の処理が完了した時点でPHPの動作は完了しています。 その際の変数内部のデータを後ほど参照したいのであれば、何かに保存しなければいけません。 保存先はファイルでもよいですし、Cookie、場合によっては応答HTMLに記述、ボタン2で読みだす方法も。 まだ私もPHPを初めて日が浅いので、間違いがあるかもしれません・・・。 ほかの方の意見もご参照ください。
お礼
なるほど、フォームを分ける方法があるのですね。 グローバル変数についても参考になりました。 ありがとうございました。
お礼
hiddenは盲点でした。 ありがとうございます。 お二方の回答を参考に目的のプログラムが作れました。 一応、載せておきます。 <? if($_POST['aaaa']) { $a = 1; } if($_POST['bbbb']) { echo $_POST['c']; } ?> <form method="post" action=""> <input type="text" value="<? print $a; ?>" name="c"> <input type="submit" value="button1" name="aaaa"> <input type="submit" value="button2" name="bbbb"> </form>