• ベストアンサー

inputタグでphpを呼び出す際、ページ遷移せずに実行結果を呼び出す方法が分かりません

phpのプログラムで数点詰まってしまった所がございましたので、アドバイスいただける方がいらっしゃいましたら、よろしくお願いします。 【やりたいこと】 1. index.phpのactionというボタン(inputタグ)を押すと、action.phpの中身を実行したい(これは出来ています)。 2. その際、ブラウザのURLはaction.phpではなく、index.phpにしたい(これは出来ていません。index.phpにaction.phpの実行結果を読み込めばよいのかなと思いましたが、その方法が分かりませんでした)。 3. index.phpのactionというボタンを押すと表示される画面に、「戻る」ボタンを表示したい(これは出来ていません。action.php内に「戻る」ボタンを記述した所、action.phpを正常に実行した際は「戻る」ボタンが表示されましたが、異常時には「戻る」ボタンが表示されませんでした。なおindex.phpに最初にアクセスした際には「戻る」ボタンは表示させたくありません)。 【ソースコード】 ※phpが動作するサーバの同一階層内に、下記のindex.php、action.phpをアップしていただければ、動作を確認していただけると思います。 ★index.php <html> <head> <title>action</title> </head> <body> <form action="action.php" method="post" enctype="application/x-www-form-urlencoded"> <input type="submit" name="Submit" value="action" /> </form> </body> </html> ★action.php <?php phpinfo(); ?> どこか一箇所でもアドバイスいただけるようでしたら、アドバイスいただければと思います。 以上、よろしくお願いします。

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

  • ベストアンサー
回答No.4

>異常時には「戻る」ボタンが表示されませんでした。 この異常時というのがよくわかりませんが、、、。 POSTデータの内容で条件分岐させて、index.phpの中でaction.phpの処理をさせてしまえばいいだけです。 ★index.php <html> <head> <title>action</title> </head> <body> <?php if($_POST['Submit']){ phpinfo(); echo "<a href=\"".$_SERVER['PHP_SELF']."\">戻る </a>"; exit; } ?> <form action="<?=$_SERVER['PHP_SELF']?>" method="post"> <input type="submit" name="Submit" value="action" > </form> </body> </html>

iroha_168
質問者

お礼

ありがとうございます。 こちらの都合で、action.phpの中身をindex.phpの中に直接書くことは出来ない感じなので、一部ソースを変えさせていただきました。 そうした所、私が意図していた動作となりました。 ★index.php <html> <head> <title>action</title> </head> <body> <?php if($_POST['Submit']){ include "action.php"; echo "<a href=\"".$_SERVER['PHP_SELF']."\">戻る </a>"; exit; } ?> <form action="<?=$_SERVER['PHP_SELF']?>" method="post"> <input type="submit" name="Submit" value="action" > </form> </body> </html> ★action.php <?php phpinfo(); ?> それと「異常時には「戻る」ボタンが表示されませんでした。」ですが、action.php内で「error」が発生した際、そこでプログラムが止まってしまい、「戻る」ボタンが表示されないので、そういう場合でも「戻る」ボタンを表示させたいと思いました。 とりあえずこの点についてはひとまず保留し、今回教えていただいたソースを元にプログラムを組んで見たいと思います。

iroha_168
質問者

補足

教えていただいたソースを実際に使用しているソースに適用した所、一通り意図した動作になっている事を確認しました(異常時の「戻る」ボタンについては、とりあえず現時点では保留しました)。 その為、本件はcloseさせていただきたいと思います。 ご回答をいただいた皆様、大変ありがとうございました。

その他の回答 (3)

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

つまりAjaxですね。 Ajax関係の書類は沢山出ているので、ぜひ購入してみてください。 簡単なコードを紹介します。別途prototypeを入手してください。 ★index.php <html> <head> <script src="prototype.js" type="text/javascript"></script> <script src="ajax.js" type="text/javascript"></script> </head> <body> <form id="ajaxsend"> <input name="送信データ" type="hidden" id="送信データ" value="あいうえお" /> <input type="button" id="ajaxbutton" value="変更" /> ←要求を送信するボタン <div id="ajaxres"></div> ←結果を受信する位置 </form> </body> </html> ★ajax.js Event.observe( window, 'load', eventhandler ); function eventhandler(){ Event.observe( 'ajaxbutton', 'click', Ajax_Start_Send ); } function Ajax_Start_Send(){ var objAjax = new Ajax.Updater( 'ajaxres', './action.php', { method : 'post' , parameters : Form.serialize( 'ajaxsend' ) , onFailure : function(){ alert( '通信失敗' ); } } ); } ★action.php <?php echo $_POST['送信データ']; ?> 結構適当に書いたので、動かないかもしれませんが、これで。

参考URL:
http://www.google.co.jp/search?hl=ja&q=prototype
iroha_168
質問者

お礼

ありがとうございます。 action.phpを下記のように書き換え動作確認してみました。 ★action.php <?php phpinfo(); ?> 結構よさそうな感じでしたが、#2の「この回答へのお礼」に記載させていただきましたシェルコマンド版のソースの結果と比較すると、2点異なる箇所がございました。 1. action.phpを呼出し後、「戻る」ボタンでindex.phpに戻る為にはiframeを使う必要があるとの事でした。 なおF5キーで再読み込みすると前画面に戻れました。 http://www.google.com/search?num=50&hl=ja&lr=lang_ja&q=ajax+%E6%88%BB%E3%82%8B+%E3%83%9C%E3%82%BF%E3%83%B3&revid=1299055956&sa=X&oi=revisions_inline&resnum=0&ct=broad-revision&cd=1 2. index.phpでactionボタンを押した際の表示結果と、action.phpに直接アクセスした際の表示結果が異なりました(内容自体は同一と思われます)。 パッと見、index.phpにaction.phpの結果を呼び出した際は、スタイルが無効になっているような感じに見受けられました。 それとAjaxで「戻る」ボタンを実現する為にはiframeが必要みたいですが、iframeを使用するとなるとyambejpさんからご指摘を受けました「別フレームで処理」という形になり、そうなるとAjaxを使用しなくても目的の動作が出来るのかもと思い始めています。 その為、「iframeのみ」「Ajax+iframe」のどちらかで意図した動作が出来ないか引き続き調査してまいりたいと思います。

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

ページの遷移なしに処理をするには別windowを開いたり別フレームで処理したりとか 方法がないことはないですが、phpのようなサーバー技術とは無縁の技術です #1さんのあげているajaxが妥当な処理になるでしょう

iroha_168
質問者

お礼

ありがとうございます。 今回はinputタグでphpを呼び出そうとしているのですが、以前inputタグでシェルコマンドを呼び出した際はphpのみで完結したので、今回もphpだけで出来るだろうと思い込み、このカテゴリーに質問してしまいました。 一応ご参考までに今回やりたいことのシェルコマンド版のソースを記載させていただきます。 下記のindex.php、action.shをアップしていただき、action.shのパーミッションを755にしていただいた上で、index.phpにアクセスし、actionボタンを押していただくと動作を確認していただけると思います。 ★index.php <html> <head> <title>action</title> </head> <body> <?php if(!isset($action)){ $action = $_POST['action']; } if ($action == "action") { $result = shell_exec(escapeshellcmd('sh action.sh')); echo nl2br($result); ?> <input type="button" value="戻る" onclick="history.back()" onkeypress="history.back()" /> <?php } else { ?> <form action="index.php" method="post" enctype="application/x-www-form-urlencoded"> <input type="hidden" name="action" value="action" /> <input type="submit" name="Submit" value="action" /> </form> <?php } ?> </body> </html> ★action.sh #!/bin/bash ls -l シェルコマンド版ではブラウザのURLは変わらず、actionボタン押下後に「戻る」ボタンが表示されるので、これのphp版を作成しようと試行錯誤しております。 皆さんにアドバイスいただいた、Ajax関係を引き続き調べてみたいと思います。

noname#64965
noname#64965
回答No.1

actionボタンをクリック時にJavascriptのXMLHttpRequestを利用して、action.phpを実行ではどうですか?

iroha_168
質問者

お礼

ありがとうございます。 yambejpさん、reisatanさんがおっしゃられているように、Ajaxを使用するということですね。 これから調べてみようと思います。

関連するQ&A