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

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

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

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

PHP

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

Q&A

解決済

2回答

3746閲覧

PHPでGetパラメータを取得・編集する方法

MoominPAPA

総合スコア7

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

PHP

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

0グッド

0クリップ

投稿2016/07/25 01:12

編集2016/07/25 01:34

複数設定されているGetパラメータから指定したパラメータ以外を削除した
URLを作成しようと思っているのですがなぜか、先頭のパラメータしか取得できません。
以下がソースなのですが、原因をご教示いただけませんでしょうか。
よろしくお願いいたします。

PHP

1 2 $url = empty($_SERVER["HTTPS"]) ? "http://" : "https://"; 3 $url .= $_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]; 4 5 $parse_url_arr = parse_url ( $url ); 6 parse_str ( $parse_url_arr['query'], $query_arr ); 7 $chk_words = array( 'typea', 'typeb', 'typec' ); 8 9 reset( $query_arr ); 10 while( list($tmp_key, $tmp_val) = each($query_arr) ) { 11 12 if( in_array($tmp_key, $chk_words) ) { 13 /*指定パラメータは残す*/ 14 } else { 15 /*指定パラメータ以外は削除*/ 16 unset($query_arr[ $tmp_key ]); 17 } 18 next($query_arr); 19 } 20

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

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

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

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

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

t_hoshizaki

2016/07/25 01:21

コードの箇所は『```』で囲んでいただけないでしょうか? 現状ですととても読みづらく、回答が得られないかと。
MoominPAPA

2016/07/25 01:36

ご指摘ありがとうございます。 コードの付加方法を知らなかったので、そのまま記載してしまいました。 修正しましたので、お手間でなければご教示いただければ幸いです。
shi_ue

2016/07/25 01:50

なぜわざわざ、URLを作ってからパースしてるんですか?$_GETが使えない理由があるとか?
MoominPAPA

2016/07/27 22:29

深い意味はありませんでした。おっしゃる通り、$_GETで良かったです。 ご指摘ありがとうございます。
guest

回答2

0

ベストアンサー

PHP

1$url = empty( $_SERVER[ 'HTTPS' ] ) ? 'http://' : 'https://'; 2$url .= $_SERVER[ 'HTTP_HOST' ].$_SERVER[ 'REQUEST_URI' ]; 3$url = explode( '?', $url )[ 0 ]; // PHP5.4+ 4$query = []; 5foreach ( [ 'typea', 'typeb', 'typec' ] as $v ) { // 6 $tmp = (string) filter_input( INPUT_GET, $v ); // INPUT_GET or INPUT_POST 7 if ( empty( $tmp ) ) { continue; } 8 $query[ $v ] = $tmp; 9} 10if ( !empty( $query ) ) { 11 $url .= '?'.http_build_query( $query, '', '&' ); 12}

投稿2016/07/25 07:43

kei344

総合スコア69366

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

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

MoominPAPA

2016/07/27 22:25

修正案のご提示ありがとうございます。 foreachも検討していたのですが、このような記述方法を知りませんでした。 ぜひ、参考にさせていただきます。
guest

0

next いらないと思いますよ。

php

1$url = empty($_SERVER["HTTPS"]) ? "http://" : "https://"; 2$url .= $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; 3 4$parse_url_arr = parse_url($url); 5parse_str($parse_url_arr['query'], $query_arr); 6$chk_words = array('typea', 'typeb', 'typec'); 7 8reset($query_arr); 9while (list($tmp_key, $tmp_val) = each($query_arr)) { 10 if (in_array($tmp_key, $chk_words)) { 11 /* 指定パラメータは残す */ 12 } else { 13 /* 指定パラメータ以外は削除 */ 14 unset($query_arr[$tmp_key]); 15 } 16// next($query_arr); 17}

投稿2016/07/25 01:55

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

MoominPAPA

2016/07/27 22:23

ご指摘ありがとうございます。 おっしゃる通り、nextは不要でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問