• 締切済み

PHPで1つのFORM内から、2つのプログラムを実行

初めまして! PHP&HTML初心者です。 現在あるプログラムを若干変更する事になりました。 <add.php3内> print "<FORM ACTION=$PHP_SELF METHOD=POST>\n"; print "<TEXTAREA COLS=80 ROWS=12 NAME=COMMENT WRAP=HARD>$CURCOMMENT</TEXTAREA>"; print "<TEXTAREA COLS=80 ROWS=6 NAME=NOTE WRAP=HARD>$CURNOTE</TEXTAREA>"; print "<BR><B><INPUT TYPE=BUTTON VALUE=\" accept \" onclick=\"this.form.submit();\"></B>"; print "<SELECT NAME=\"CommentState\">\n"; print "<OPTION>東京</OPTION>\n"; print "<OPTION>大阪</OPTION>\n"; print "</SELECT>\n"; print "<INPUT TYPE=BUTTON VALUE=\"submit\" onclick=\"backScript(change.php3);\">\n"; print "</FORM>\n"; print "<INPUT TYPE=BUTTON VALUE=\"submit\" onclick=\"backScript(change.php3);\">\n"; ←が実行されず、 ボタンを押しても無反応です。 上のacceptボタンは正常に動作しています。 change.php3とadd.php3を一つにまとめるというのは、設計上不可能です。 同じFORM内で、2つの関数(1つは自分自身)を実行する事は可能でしょうか? 同じ入力テキストエリアを共有しているので、FORMを2つに分けるのも難しいかと思います。 長々と書いてしまいましたが、いいアイデアがあれば是非教えてください!

みんなの回答

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.3

"change.php3","change.inc.php3"と、2つのファイルに分けます。 "change.php3"には、HTMLを描画する、Headerを返してリダイレクトするなど、ブラウザに対する処理を書く事に特化した書き方にします。 "change.php3"から"change.inc.php3"をincludeします。 "change.inc.php3"は、"change.php3"に呼び出された際の処理を書き、必要に応じて関数化に書きなおします。 そうして、既存の"change.php3"と同等の動きができれば2つに分ける処理は完了です。 ソースを2つに分けただけで、設計は変わっていないはずです。 同様に"add.php3"も、"add.php3","add.inc.php3"と、2つのファイルに分けます。 最後に、"change_add.php3"というファイルを新規作成します。 冒頭で下記のように、それぞれの内部動作ロジックを呼び出すようにします include_once "change.inc.php3"; include_once "add.inc.php3"; 必要に応じて、適切な場所で関数化したロジックも呼び出します。 以上が、正攻法でしょうね。

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

>change.php3とadd.php3を一つにまとめるというのは、設計上不可能です。 それは設計が変だからです。 どう対処しても場当たり的で姑息な手段でしかないので本質的には 設計をしなおす必要があります。 それでもどうしてもPHPで処理するなら change_add.phpというファイルを用意し、PEARのHttp_requestなどで changeとaddにデータを投げてやることです。 もちろんお勧めできるような処理ではありませんが、対応はできる でしょう。

noname#77845
noname#77845
回答No.1

ボタンを押す押さないは、クライアント側の動作なのでphpで制御するのは難しいでしょうね。 JavaScriptを使って制御しましょう。 やり方の例としては、どちらの呼び出しもただのbuttonにし、両方で同じJavaScript関数を呼びます。 呼び出された関数では片方のスクリプトをAjaxを使って非同期で呼び出し、その後に、もう一方のスクリプトに制御を渡します。 こんな感じで実現できるのではないでしょうか?

関連するQ&A

専門家に質問してみよう