質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

962閲覧

php間のhttpリクエスト方法

umeco

総合スコア6

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/02/05 07:26

編集2018/02/05 07:55

htmlから既存phpにGETでデータを送信するphpを作りたい。
http:〜〜〜?○○=○○&○○=○○の形になるんでしょうか。
同時に、既存phpの中で最終的に結果をechoで出力している内容も編集用に取得したい。

上記方法をご教授頂きたく。。

すみません、補足致します。
新規機能として、既存のphpを呼び出すdispatcherとしてのphp を作成したいのです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

方法1:
formのmethodをgetにし、actionを受け取り先PHPにする。
※methodに何も設定しなければデフォルトGETなので「methodを指定しない」でも良いですが意図を明確にするためにも入れた方が良いです)

html

1<form method="get" action="hoge.php"> 2<input type="text" name="test"> 3</form>

方法2:
リンクに埋め込む

html

1<a href="hoge.php?test=XXXXX">送信</a>

上記のように渡す場合、受け取り先はいずれも下記でOKです。

php

1//hoge.php 2if($_SERVER['REQUEST_METHOD'] === 'GET'){ 3 echo $_GET["test"]; 4} 5

方法1ではtextコントロールに入力された内容が「hoge.php?test={入力内容}」として送信され、
方法2では指定のURLにアクセスしますが、方法1のように送信されたのと同じ結果となります。

同時に、既存phpの中で最終的に結果をechoで出力している内容も編集用に取得したい。

上記、よく理解できていませんが、phpであればGET送信した情報を利用できるので、
例えば、下記のようにするようなイメージでしょうか。

php

1//hoge.php 2if($_SERVER['REQUEST_METHOD'] === 'GET'){ 3 $test = ''; 4 if(array_key_exists("test",$_GET)){ 5 $test = htmlspecialchars($_GET["test"],ENT_QUOTES,'UTF-8'); 6 } 7 echo $test.'<input type="text" name="test" value="'.$test.'">'; 8} 9

コメントを受けての追記

下記のような構成にするとして下記のような感じ。
※理論だけで未検証のコードなのでエラーなど出た場合は適宜調整いただければと。

/{root}/index.html
/{root}/calc.php
/{root}/calc1/index.php
/{root}/calc2/index.php
/dispatcher.php

dispatcher.php をrootと同じ階層にしたのは、
機能的にWEBからアクセスさせないためです。
{root}以上の階層であればどこでも構いません(それこそフレームワークの考え方ですね;)

/{root}/index.html

html

1<a href="calc.php?type=calc1&a=123&b=345">計算1へ</a> 2<a href="calc.php?type=calc2&a=123&c=678">計算2へ</a>

/{root}/calc.php

php

1if($_SERVER['REQUEST_METHOD'] === 'GET'){ 2 require_once __DIR__."/../dispatcher.php" 3} 4echo "エラー";

calc.phpを経由するのはdispatcherの存在を隠すためです。

/dispatcher.php

php

1 //計算種類が存在するか確認 2 if(array_key_exists("type",$_GET) && file_exists(__DIR__."/{root}/".$_GET["type"]."/index.php")){ 3 $qa_group = array(); 4 //計算種類以外をクエリストリングとして再編 5 foreach($_GET as $key=>$value){ 6 if($key== "type") continue; 7 $qa_group[] = $key."=".$value; 8 } 9 $qa = ''; 10 if(count($qa_group) > 0){ 11 $qa = '?'.implode("&",$qa_group); 12 } 13 //対象の計算へリダイレクト 14 header("Location: ".__DIR__."/{root}/{$_GET["type"]}/{$qa}"); 15 exit; 16}

投稿2018/02/05 07:42

編集2018/02/05 10:04
m.ts10806

総合スコア80852

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2018/02/05 07:54

細かいですが、$_GET["test"]の存在確認を行ったほうがよいと思います。
umeco

2018/02/05 08:03

回答ありがとうございます。 追記を致しました。 当方、phpが全く分かっておらず伝わるといいのですが… 既存部分としてindex.phpが複数あり、そこで定義ファイルを読み込んでcontrolerから各種Actionを呼び出す作りをしています。 今回、それらに対するdispatcher の役割をするものをphpで作成しようとしています。
m.ts10806

2018/02/05 08:06

kei344さん。 確かにそうですね。ありがとうございます。 REQUEST_METHODとかhtmlエスケープもしておきながら、大事なところが抜けていました・・。修正しておきます。
m.ts10806

2018/02/05 08:11

umecoさん 何かしらフレームワークを使われているのでしょうか? でしたら質問本文やタグに追記してください。 あと、該当箇所のソースコードもご提示いただければ、と思います。 (※ただ、フレームワークにそった書き方をするだけで考え方自体は同じです)
umeco

2018/02/05 08:23

フレームワークは使用していません。モデル体系 画面からはhttp:〜〜?○○=○○の形でindex.phpが呼び出されてます。 これが複数あります。 値段計算ロジックなのですが、計算種類毎にフォルダ分けされたindex.phpが計算種類毎のフォルダに配置されています。 これらを呼び分けるdispatcherのphpを作成したいのです。
m.ts10806

2018/02/05 08:30 編集

うーん。なんとなくの理解でしかないのですが、 dispatcherとして、なら、GETのクエリを計算種類のフォルダ名にして、 リダイレクトされては? そのdispatcherのphpに対してはどうアクセスさせる仕様なのかにもよりますが。
umeco

2018/02/05 08:36

画面からURL指定のGETメソッドでパラメータを渡す形になります。 dispatcher の機能として、合計値を算出するという事もやらなくてはならず、リダイレクトさせると全部の値が取れないのでは…?と考えています。
m.ts10806

2018/02/05 10:04

dispatcher内で計算させるということですか? それぞれの計算種類のindex.phpでやっているものと思っていました。 ひとまず現段階で私が理解している内容をコードにしてみました。 参考にしてください。
m.ts10806

2018/02/05 10:07

やはり、ある程度現状のソースコードをご提示いただかないとこれ以上の回答は難しいかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問