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

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

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

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

Q&A

解決済

3回答

3334閲覧

PHPで複数のGET or POST値をそれぞれのパラメタ名を変数名にして格納する綺麗なやり方をご存知ありませんか?

kooo

総合スコア26

GET

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

0グッド

1クリップ

投稿2015/10/14 16:41

はじめまして、
phpでフォームから取得する値についてなのですが、
まずはこんなコードで変数に格納してみました。

php

1//空判定のインデックス 2$errorm = 's-non-used'; 3 4 5//検索ボックスから値取得 6//product,event,desire,number,trouble,start 7 8$query = preg_split('/=[a-zA-Z0-9%]*&/', $_SERVER['QUERY_STRING'].'&'); 9 10foreach ($query as $value){ 11 12 if($_GET["$value"] !== ''){ 13 14 $$value = $_GET["$value"]; 15 16 } else { 17 18 $$value = $errorm; 19 20 } 21} 22

しかし、$_SERVER['QUERY_STRING'].'&'の.'&'であるとか、
正規表現は速度が遅いだとかもう少し綺麗にできたらいいのですが
私では力不足でできません。

どなたかもっと綺麗で高速なソースコードのわかる方、お願い致します。
複数のGET値をそれぞれのパラメタ名を変数名にして
全部格納できるソースコードでお願い致します。

ちなみにベストアンサーを付けるときは

  • GETもPOSTもできる
  • 空の値にインデックスを付けられる

などが揃ってれば、あとは速さと見た目が綺麗なソースコードで判断します。

実行速度を簡単に測る環境が手元に無いもので申し訳ないのですが、

index.php?a=a&b=b&c=c&d=d&・・・&z=z
を便宜的に${a0}~${a999},${z0}~${z999}に
千回繰り返し格納した時間も併記していただけると助かります。

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

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

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

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

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

guest

回答3

0

ベストアンサー

それは、php.iniで、register_globals を on にしたのと同じ効果ですね。下記参照。
http://jp2.php.net/manual/ja/ini.core.php#ini.register-globals
http://jp2.php.net/manual/ja/security.globals.php

攻撃者が、任意の名前の変数に任意の値を設定できるというリスクを抱えていることを認識されていますか?

投稿2015/10/14 16:56

otn

総合スコア84533

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

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

kooo

2015/10/14 18:14

知らずに危険なコードを書いていたみたいで、指摘していただけて助かりました。 自分のコードを修正するとともに、同じことを思って検索した方がリスクに気付けるよう 最初の条件と違いますがotn様をベストアンサーとさせていただきます。 絶対あったら便利なのにと思ってたらそういう歴史があったのですね、 言われて初めてリスクに気づきました、本当にありがとうございます。
guest

0

↓こんな感じでいかがでしょうか?

<?php //空判定のインデックス $errorm = 's-non-used'; function getParam($key, $errorm) { if(isset($_GET[$key])) return $_GET[$key]; if(isset($_POST[$key])) return $_POST[$key]; return $errorm; } $a=getParam("a", $errorm); // 変数使用時に都度パラメータ取得 var_dump($a);

投稿2015/10/14 17:51

TetsujiMiwa

総合スコア1124

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

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

退会済みユーザー

退会済みユーザー

2015/10/14 18:10

以下のような場合に、意図した動きになりません。 <?php function getParam($key, $errorm = 's-non-used') { if (isset($_GET[$key])) { return $_GET[$key]; } if (isset($_POST[$key])) { return $_POST[$key]; } return $errorm; } $a = getParam("q", $errorm); ?> <!DOCTYPE HTML> <html lang="ja-JP"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <form action="?q=getparam" method="post"> <input type="text" name="q" /> <button>submit</button> </form> <pre> <?php if (isset($a)) { var_dump($a); } ?> </pre> </body> </html>
TetsujiMiwa

2015/10/14 18:16

・GETとPOSTを同時に使用する ・GETとPOSTの同フォーム名で異なる値を使用する という点に難がありますね。
guest

0

php

1 2// http://example.com?q=search&r=firefox 3 4$method = ('GET' === filter_input(INPUT_SERVER, 'REQUEST_METHOD')) ? INPUT_GET : INPUT_POST; 5$params = filter_input_array($method); 6var_dump($params); 7/* 8 array (size=2) 9 'q' => string 'search' (length=6) 10 'r' => string 'firefox' (length=7) 11 */ 12 13// 可読性を損ない、保守性が悪いので extract は個人的には絶対利用しない。 14extract($params); 15var_dump($q); 16/* 17 * string 'search' (length=6) 18 */ 19var_dump($r); 20/* 21 * string 'firefox' (length=7) 22 */

千回繰り返し格納した時間も併記していただけると助かります。

ご自身で検証してください。
そもそも Query String には長さの制限もあるので意味をなさないし、速度を気にするならPHPは使わない。


extract より

警告 extract() をユーザー入力 ($_GET や $_FILES など) のような信頼できないデータについて使用しないでください。 もし行う場合、例えば register_globals を信頼しているような古いコードを一時的に実行したい場合、 EXTR_SKIP のような flags の値が上書きされていないことを確認してください。そして php.ini の variables_order で定義されたものと同じ順で展開すべきであることに留意してください。

投稿2015/10/14 17:18

編集2015/10/14 17:30
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問