2

$_GET['values']変数に代入するための近道はありますか?

私は現在、他の人と同じようにしています:

if(isset($_GET['type'],$_GET['case'])
   $type = $_GET['type'];
   $case = $_GET['case'];

以下のように個別に行うのではなく、これを行うためのよりクリーンな方法はありますか。

 $type = $_GET['type'];
 $case = $_GET['case'];
4

8 に答える 8

4

さて、配列マップを使用すると、caseを一度だけでなく一度にすべて取得でき、 と を同時にチェックすることもできisset()ますempty()

次の URL があるとします。read.php?id=1&name=foo&job=student&country=Brazil

あなたの問題は型を取得することです.それが正しいかどう$_GETかを確認する必要があるかもしれません.empty/isset

まず、反復する関数を作成します。

function checkGet($val){
    return (isset($val) && !empty($val)) ? $val : null;

}

次に、その関数をコールバックしますarray_map()

$check = array_map('checkGet', $_GET);

それだけです!

今実行var_dump($check);すると、すべての型と値を取得できます。

array (size=4)
  'id' => string '1' (length=1)
  'name' => string 'foo' (length=3)
  'job' => string 'student' (length=7)
  'country' => string 'Brazil' (length=6)

つまり、この後、次のことを行う代わりに:

if(isset($_GET['something']) && !empty($_GET['something']))
$var = $_GET['something'];
echo $var; 

ただ行う:

echo $check['something']
于 2013-09-26T09:11:32.600 に答える
4

必要なチェックを確実に行うために、私が考えることができる唯一の1行のコードは次のとおりです。

$type = (isset($_GET['type'])) ? $_GET['type'] : 'a default value or false';

コメントを読んで、あなたがこれをしたいかもしれないことを理解しています:

foreach($_GET as $key=>$value) {
  $$key = $value;
}

ただし、必要な変数のみを常に初期化することをお勧めします。上記のコードは不明な変数を取得することになり、実際にはユーザーがスクリプトを操作する方法を提供する可能性があります。
例:

index.php?ExpectedVar=1&UserDefinedVar=2

コードで次の変数を生成します。

$ExpectedVar // 1 <- you wanted this one
$UserDefinedVar // 2 <- but what about this?

このスクリプトを別のスクリプトから呼び出すとどうなるでしょうか?
次に、このコードがファイルの先頭にある場合でも、ユーザー定義の $_GET! からいくつかの変数が上書きされる可能性があります。

災害時シナリオ:
script1.php

<?php 
  $tableToDelete = "old_products";
  include("script2.php");
?>

script2.php

<?php
  foreach($_GET as $key=>$value) {
    $$key = $value;
  }
  // user added &tableToDelete=users
  // DROP TABLE $table
  // will gloriously delete users
?>

代わりに、私が投稿した元のコードを数行書くだけで、php スクリプトの開始時に必要な変数を取得し、明確な心でそれらを使用できます。

于 2013-09-26T09:04:55.063 に答える
4

http://docs.php.net/extract

機能を求めていると思いますextract

extract($_GET); //now, all of the functions are in current symbol table

于 2013-09-26T09:05:19.703 に答える
0

あなたはそれを行うことができますextract()

extract($_GET, EXTR_PREFIX_ALL, 'g');

となることによって

$_GET['val']になる$g_val

3 番目のパラメーターgに注意してください。これはキーの前に追加g_されます。

于 2013-09-26T09:17:02.563 に答える
0

このようにして、TRUEまたはFALSEのみが返されるようにします

if (!isset($_GET['type']) || empty($_GET['type'])) {

// Display error

} else {    

$type = $_GET['type'];
$case = $_GET['case'];  

}

または、そのようにすることもできます

$type = (isset($_GET['type'])===false)?'':trim($_GET['type']);
$case = (isset($_GET['case'])===false)?'':trim($_GET['case']);
于 2013-09-26T09:09:22.813 に答える
0

$_GET はテーブルなので、 foreach 関数を簡単に使用できます

例えば

foreach ($_GET as $key => $value) {
... = $value;
}

$key 名で変数を作成したい場合は、変数変数を使用してください PHP Manual 変数 変数

于 2013-09-26T09:09:53.010 に答える