• ベストアンサー

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(); ?> どこか一箇所でもアドバイスいただけるようでしたら、アドバイスいただければと思います。 以上、よろしくお願いします。

  • PHP
  • 回答数4
  • ありがとう数5

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

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

  • PHP処理実行後のページの遷移について

    現在、新規情報登録画面の作成を行っています。 PHPで、データベースにインサート処理後、成功したら他のページへ遷移するという処理を行いたいのですが、PHP側の処理が実行されるとページの遷移が行われず、action='遷移ページ指定'したらインサートが実行されません。 JavascriptとPHPともにまだ学習し始めたばかりの初心者で、わかりにくい質問ですが回答のほうよろしくお願いします。 <処理の流れ> 入力 ↓ 登録ボタン押す ↓ チェック ↓ チェック成功時→ページ遷移 チェック不成功時→ページ遷移なし <html> <head><title>新規登録</title> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript">google.load("jquery", "1.2");</script> </head> <body> <form method="post" action="form_ad_shinki_touroku2.php" name="formA" onsubmit="return AllCheck()"> <script type="text/javascript"> 動的入力フォーム追加機能、チェック機能など </script> <?php SQLの処理など ?> <input type="submit" name="tuika" value=" 登 録 "> <input type="button" onclick="addInput()" value="フォーム追加" /> <input type="button" name="back" value=" 戻 る " onClick="location.href='javascript:history.back();'"> </form> <body> <html>

  • PHPで求めた変数をHTMLで使う方法

    HTMLのformタグで与えた引数を元に、ある値をPHPで求めた後、その求めた変数をHTMLに戻って使う方法をご教授下さい。 例えば、 index.html ↓↓↓ <form action="submit.php" method="post"> <input type="text" name="xxxxx"> <input type="text" name="yyyyy"> <input tyoe="submit" value="実行"> </form> <textarea name="answer"> 実行後ここに、下のPHPで求めた$zzzzzを表示したい。 </textarea> 上のHTMLでxxxxxとyyyyyを入力して実行ボタンを押します。 そしてPHP側は、 submit.php  ↓↓↓ $zzzzz = $_POST["xxxxx"] . "は、" . $_POST["yyyyy"] . "です。"; このように求めた$zzzzzを上のHTMLに戻って表示したいのですが、しばらく調べてみても見つかりませんでした。 どなたかご教授下さい、お願いします。

  • phpファイルの命令実行順番について

    いつも勉強させていただいております。 初歩的な質問になるかもしれませんが、回答いただければ幸いです。 現在PHPの学習をしております。 phpファイルに記載された命令がどのような順に実行されるのか、ということにたいして私なりの理解が正しいかどうか確認していただきたいのと、ソースについての質問をさせていただきたく思います。 以下、動作確認済みのサンプルソースです。 <html> <head> <title> 画像を保存 </title> </head> <body> <?php if(@$_POST["text1"]) { $width = 300; $height = 200; $fname = $_POST["text1"]; $img = imagecreate($width, $height); imagecolorallocate($img, 0, 255, 0); if(imagepng($img,$fname)) { echo "<p><a href=\"$fname\">作成されたファイル</a>"; } } ?> <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>"> <table> <tr> <td> <input type="text" name="text1" value="test.png" > </td> <td> <input type="submit" value="作成" name="sub1" > </td> </tr> </table> </form> </body> </html> ”作成”ボタンを押すと、text.pngという画像ファイルをこのソースがあるフォルダ内に保存し、というだけの処理をするものです。 ・上記サンプルにおける、記述された命令の実行順について (1) <?php で囲まれている部分が動作する。 →最初は$_POSTに何も入っていないので、if条件は偽となり、何も動作しない。 (2) <form>から、</form>で囲まれている部分が動作する。 テキスト入力エリアや作成ボタンなどのイメージが完成する PHP_SELFを$_SERVERに指定しているので、この情報をこのファイル内の、<?php~で囲まれているところに渡す。 ここまでで画面表示が完了する。さらに作成ボタンを押したときの動作を続ける (3) <input type="text" name="text1" value="test.png" > 初期値として画面に表示したい値をvalueに指定する。 <input type="submit" value="作成" name="sub1" > ボタンに表示したい文字をvalueに指定する。 作成ボタンを押すことで、"text1"という名前とヒモづいたテキストエリアに書かれた情報がPOSTにより渡される。 このサンプルではtextひとつしかないが、他のラジオボタンなど全ての情報が作成ボタンを押すことにより、渡される。 これにより、$_POSTへnameに該当するものを指定すると、それにヒモづいた情報が取得できるようになる。 作成ボタンを押した後は、(1)に戻り、text1にヒモづく情報が見つかることにより、if条件内の処理が動作する。 この場合は「作成されたファイル」という文字がでてくる。 さらに(2)が動作し、「作成されたファイル」という文字の下にテキストエリアや作成ボタンが表示される。 質問 <form>内にあるactionへの設定ですが、"<?php echo $_SERVER["PHP_SELF"]?>"は決まり文句のようなもので、PHP_SELFのみ期待する動作に応じて変化する、という考え方でいいでしょうか? この記述は使用している参考書にあったものですが、googleなどで検索するとaction=ファイル名、となっているものもありました。なぜこのファイルではこのような書き方をしていて、他のものではファイル名をactionに設定しているのでしょうか? actionへ指定するものはどういったものを指定するものなのでしょうか? actionの使い方がよくわかりません。 お手数ですが、ご回答いただける方、よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPで、C#のプログラムを実行するには、

    PHPで、C#のプログラムを実行するには、    example.php>> <form id="form" method="post" action="cpg.php"> <label> <input type="submit" name="button" id="button" value="C#実行" /> </label> </form> ↑ cpg.php にどういうソースを書けば、  C:\WinSockC(.sln←拡張子)のプログラムを実行することができますか?

    • ベストアンサー
    • PHP
  • XAMPP1.7.1上でPHPを実行するとソースが表示されます。

    いつも、お世話になっております。 小生、只今WindowsXPSP3上でXAMPP1.7.1を使い、PHPプログラミングを勉強しているPHP初心者です。 今回質問させて頂きたいのは、 HTMLで作成したページから、PHPで作成したページに遷移する際、 PHPで作成したページに、PHPのソースが表示されてしまいます。 詳しくご説明させて頂きますと、以下の様になります。 1・HTMLで入力フォーム、表示ボタンを作成。 2・入力フォームにデータを入力、表示ボタンを押下。 3・PHPで作成したページに遷移、本来HTMLで入力されたデータが表示されるはずなのに、PHPソースが表示される。 以上です。 以下にHTMLソース、PHPソースを提示させて頂きます。 -----HTML----- <html> <head> <title>ビールの値段</title> </head> <body> <form action="source.php" method="post"> お名前 : <input type="text" name="YourName"><br> ビールの値段: <input type="text" name="PriceOfBeer"><br> 本数: <input type="text" name="AmountOfBeer"><br> <input type="submit" value="計算"> </form> </bodyまた、> </html> -----PHP----- <?php $Today = date("Y年m月d日"); ?> <html> <head> <title>ビールの値段計算結果</title> </head> <body> <?php print("<h3>$Today</h3>\n"); print($_REQUEST['YourName'] . " さん<br><br>"); print("本日購入したビールの値段は"); print($_REQUEST['PriceOfBeer'] * $_REQUEST['AmountOfBeer']); print("円です。<br>\n"); ?> </body> </html> 以上です。 ちなみに他のPHP文例えば下記の様なPHP文は普通に実行されます。 -----PHP----- <?php $State = "Tokyo"; $Tokyo = "港区"; print("出身は東京の{$$State}です。"); ?> そして、各ツールのヴァージョンはXAMPP1.7.1、PHP5.2.9、Apache2.2.11.0になります。 また、XAMPP上の文字コードはUTF-8に設定してあり、PHPのソースはUTF-8にエンコード指定し保存して実行しています。 以上、ご確認の程、先輩方ご教授宜しくお願いします。

    • ベストアンサー
    • PHP
  • formタグについてPHP

    他でも質問しましたが、xamppはもともと練習に使うつもりでしたが、 現在はレンタルサーバーを使っているのでここで試したらどうかと 帰りの電車の中で考えました。 ※送るデーター <form acition="index.php"method="POST"> <p>氏名<input type="text" size="20" name="ad"></p> <input type="submit" value="送信"> </form> ※受け取るデーター index.php <?php echo$_POST['ad1']; echo$_POST['ad2']; ?> 質問1.上記に名前が書かれれば、サーバーに引き渡したデーターを ブラウザーに表示ができるのでしょうか? 質問2.echoはeachとは違うのでしょうか? 質問3.actionのところによくメールアドレスが入っていたりするような気がします。 メールアドレスでも受け取れるのでしょうか?

    • 締切済み
    • PHP
  • 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つに分けるのも難しいかと思います。 長々と書いてしまいましたが、いいアイデアがあれば是非教えてください!

    • 締切済み
    • PHP
  • INPUT上でリターンを押してもsubmitされない方法

    フォームにてキーワードを入力し、検索ボタン押したときに javascriptにて以下の動作をさせたいと思っています。  ・hidden項目に特定値をセットしてsubmitをかける 以下のコードを書いたのですが、INPUT上でリターンを押すと submitされてしまいます。 ボタン以外でリターンを押した場合に何も動作させないようにするにはどのようにすればよいのでしょうか? -------------------------------------------------------------- <SCRIPT language="JavaScript"> <!-- function javasc_name(param){ document.form.PARAM.value = param document.form.submit() } //--> </SCRIPT> <form method="POST" action="cgi-bin/xxx.exe"> <input type="text" name="KEYWORD"> <input type="hidden" name="PARAM"> <input type="button" value="検索" OnClick="javasc_name(10)"> </form> --------------------------------------------------------------

    • ベストアンサー
    • HTML
  • ショッピングサイトの商品購入ボタン押下後の確認画面について教えてください。

    商品を購入した際の確認画面で困っています。 購入した商品名と金額を表示して、OKならそのまま購入 違うのであればリセットとしたいのです。 index.php <form action="<?php echo $editFormAction; ?>" id="form" name="form1" method="POST"> <input type="submit" name="Submit" value="商品を購入" /> kakunin.php <form id="form1" name="form1" method="post" action=""> <input name="submit" type="button" value="OK"thanks.php /> <input type="reset" name="Submit1" value="リセット" /> <form/> index.phpから受け取った情報をkakunin.phpで表示することはできるのですが、それを(表示を)クリアする方法がわかりません。 お忙しいとは思いますが、アドバイスお願いします。

    • 締切済み
    • PHP
  • 同じformタグの中にあるボタンで別々のページに遷移したい(ブラウザ依存を考慮)

    はじめまして。 現在、ショッピングサイト構築の勉強をしています。その中で、わからない点がありましたので、皆様に教えて頂ければ幸いです。 【したいこと】 現在書いているコードは以下の通りです。 <html> <head> </head> <body> <form method="post" action="ok.jsp"> <input type="text" name="A"> <input type="submit" value="B"> <input type="submit" value="C"> </form> </body> </html> やりたいことは、 「Cが押された場合は、AとCの値をok.jspに送信」 「Bが押された場合は、Bの値のみをng.jspに送信」 できるようにすることです。 ちなみに、画面レイアウトの関係で、A,B,Cの順番は変えれません。 JavaScriptを使用して <略> <form method="post" action="ok.jsp"> <input type="text" name="A"> <input type="submit" value="B" onClick="location='ng.jsp';return false"> <input type="submit" value="C"> </form> のように記述すると、JavaScriptを許可している場合は実現できました。ただ、JavaScript未対応(拒否)の場合にも実現できる方法がわかりません。このままの記述だと、未対応の場合はok.jspに遷移してしまいます。 何か良い方法をご存知の方がいらっしゃいましたら、是非教えてください。よろしくお願いします。