• 締切済み

フォームボタンを押して2つの動作をさせたい!

フレームを組んでいます。 上をa.php、下をb.php。 a.phpに表があり、表の右側にボタンがあります。 このボタンを押すとその表の該当する行の詳細がb.phpに表示します。 ただ、この時にb.phpを表示すると同時にa.phpの表の元となっているDBへsutatus情報(0/1)を更新させたいと思っています。 要望としては無駄なページは開きたくないと思っています。 方法として思いつくのは (1)PHPだけで、b.php読み込むスクリプトとDBへ書き込むスクリプトを読み出す  ⇒この場合、ボタン1つでその動作をさせる方法が思いつきません。   a.phpをPHPでreloadさせる方法がわかりません。  (フォーム以外からPOSTできるのでしょうか?) (2)PHP+javascriptで実施する。  ⇒別の新規ページを表示させて自動的に閉じることで可能?   ただ、その場合の手段がわからない・・・。 といったところは思いつきましたが 肝心な部分がいろいろ調べましたがわかりませんでした。 詳しく教えていただければありがたいです。

みんなの回答

  • sirowabi
  • ベストアンサー率0% (0/1)
回答No.4

実際にソースを見てみないことにはどういうエラーか判断できません。 私の書いたサンプルは、そのままでは使えない(であろう)部分も含まれていますが、そこは自分のソース用に変換して使用しているはず・・・ですよね。 一応サンプルで変換するはずの部分を説明しておきます。 function xxx(){ document.form_a.submit(); } 「xxx」は、ボディタグのonLoadで指定している名前と同一にしてください。 「form_a」は、フォームタグのnameで指定している名前と同一にしてください。 このサンプルでは適当な名前にしてあります。 <form action="a.php" method="post" name="form_a" target="frame_a"> <input type="hidden" name="data1" value="{$data1}"> </form> actionの指定はここではa.phpですが、自分用のa.phpの場所を指定してください。 nameはjavascriptで指定いているものと同一の名前にしてください。 targetはa.phpを開いているフレームの名前です。 ざっとこんなところですが、これをチェックしてまだ問題がある場合は、問題は他にあると思います。

jin0711
質問者

お礼

回答ありがとうございます。 結果的に parent.[上フレーム].location.hrefで解決いたしました!

  • sirowabi
  • ベストアンサー率0% (0/1)
回答No.3

ANo.2です。 DB更新をどうしてもa.phpでやりたい、またはa.php側の表示も同時に更新したい、ということなら以下にちょっとしたサンプル。 javascriptを使わない方法はANo.1さんが書いてくださっているので、私はjavascriptのほうを。 BODYタグのonLoad属性を利用して、b.phpで画面を表示した時にa.phpを呼ぶというものです。 ■a.php <?php //b.phpから受け取った値でDB更新~表作成処理など $tBody = <<<EOD <html> <head> <title>詳細</title> </head> <body> <!-- テーブル表示部分 --> </body> </html> EOD; print $tBody; exit; ?> ■b.php <?php //a.phpから受け取った値でDBから詳細情報を取得する処理など //a.phpに送りたいデータをセット $data1 = "a.phpに送りたいデータ"; $tBody = <<<EOD <html> <head> <title>詳細</title> <script language="JavaScript"> <!-- function xxx(){ document.form_a.submit(); } --> </script> </head> <body onLoad="xxx();"> <!-- a.php宛に送信するデータをセット --> <form action="a.php" method="post" name="form_a" target="frame_a"> <input type="hidden" name="data1" value="{$data1}"> </form> <!-- 詳細情報表示部分など --> </body> </html> EOD; print $tBody; exit; ?>

jin0711
質問者

お礼

回答ありがとうございます。 No2の回答いただいてから、b.php側で (1)DB更新 (2)a.phpの再表示 にチャレンジしています。 ただ、(2)がうまくいきません。 具体的にうまくいかないのはb.phpでdocument.form_a.submit();をつかってb.phpっを開いたときに何も意識せずにb.php⇒a.phpへpost送信させようとしていますが、「操作できないプロパティまたはメソッドです」とエラーが出てしまいます。

  • sirowabi
  • ベストアンサー率0% (0/1)
回答No.2

b.phpでDB更新をしてから詳細を表示すればいいのでは?(’’

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

#複数のPOST自体はJavaScriptでform.submitを使えば可能だとは思いますが・・ formのtargetを下のフレームにしているということですよね?targetを_topにして、framesetのページをブラウザに返すという手はどうでしょう。上のフレームにa.php、下のフレームにはb.phpにQueryString($_GET)で表示に必要なデータを渡すと。これならJavaScriptに頼らずに(JavaScriptを切っている環境でも)動作すると思います。 index.phpにPOST → フレームセットでa.php + b.php(POSTされた内容をGETで引き渡す) 【a.php】   <form action="index.php" method="post" target="_top">    :    : 【b.php】   (今現在$_POSTで処理しているのを$_GETに変更する) 【index.php】   <?php   $value = '';   if ($_POST) {     $querystr = '?idnum=' . $_POST['idnum'];     }   ?>   <html>   <head>   <title>example</title>   </head>   <frameset rows="100,*">   <frame src="a.php">   <frame src="b.php<?= $querystr; ?>">   </frameset>   </html>