PHPでPOSTされた変数をチェックするより良い方法はありますか?

StackOverflow https://stackoverflow.com/questions/1209873

  •  06-07-2019
  •  | 
  •  

質問

私の PHP ページでは、次のようなコード行が何行も存在することに気付きました。

$my_id = isset($_REQUEST['my_id']) ? $_REQUEST['my_id'] : '';
$another_var = isset($_REQUEST['another_var']) ? $_REQUEST['another_var'] : 42;
...

この配列をチェックし、ローカル変数が存在する場合はローカル変数に割り当て、存在しない場合はデフォルトを適用する、より良い、より簡潔、または読みやすい方法はありますか?

編集:使いたくない register_globals() - いずれにしても、まだ isset の問題が残っているでしょう。

役に立ちましたか?

解決

関数でラップするのはどうですか?

<?php

function getPost($name, $default = null) {
    return isset(

関数でラップするのはどうですか?

<*>POST[$name]) ?

関数でラップするのはどうですか?

<*>POST[$name] : $default; }

他のヒント

より良い方法は、シングルトン/静的クラスを作成して、リクエストデータのチェックの詳細を抽象化することです。

次のようなもの:

class Request {

  private $defaults = array();
  private static 

より良い方法は、シングルトン/静的クラスを作成して、リクエストデータのチェックの詳細を抽象化することです。

次のようなもの:

# get an instance of the request
$request = Request::getInstance();

# pass in defaults.
$request->setDefaults(array('name'=>'Please Specify'));

# access properties
echo $request->name;
echo $request->email;

その後、次のことができます。

<*>

これにより、個々のスクリプトのロードがよりクリーンになり、検証などが抽象化されます。さらに、このデザインのスコープのロードにより、拡張/代替動作の追加、より複雑なデフォルト処理の追加などが行われます。

instance = false; function getInstance () { if (!self::

より良い方法は、シングルトン/静的クラスを作成して、リクエストデータのチェックの詳細を抽象化することです。

次のようなもの:

<*>

その後、次のことができます。

<*>

これにより、個々のスクリプトのロードがよりクリーンになり、検証などが抽象化されます。さらに、このデザインのスコープのロードにより、拡張/代替動作の追加、より複雑なデフォルト処理の追加などが行われます。

instance) { $c = __CLASS__; self::

より良い方法は、シングルトン/静的クラスを作成して、リクエストデータのチェックの詳細を抽象化することです。

次のようなもの:

<*>

その後、次のことができます。

<*>

これにより、個々のスクリプトのロードがよりクリーンになり、検証などが抽象化されます。さらに、このデザインのスコープのロードにより、拡張/代替動作の追加、より複雑なデフォルト処理の追加などが行われます。

instance = new $c; } return self::

より良い方法は、シングルトン/静的クラスを作成して、リクエストデータのチェックの詳細を抽象化することです。

次のようなもの:

<*>

その後、次のことができます。

<*>

これにより、個々のスクリプトのロードがよりクリーンになり、検証などが抽象化されます。さらに、このデザインのスコープのロードにより、拡張/代替動作の追加、より複雑なデフォルト処理の追加などが行われます。

instance; } function setDefaults($defaults) { $this->defaults = $defaults; } public function __get($field) { if (isset(

より良い方法は、シングルトン/静的クラスを作成して、リクエストデータのチェックの詳細を抽象化することです。

次のようなもの:

<*>

その後、次のことができます。

<*>

これにより、個々のスクリプトのロードがよりクリーンになり、検証などが抽象化されます。さらに、このデザインのスコープのロードにより、拡張/代替動作の追加、より複雑なデフォルト処理の追加などが行われます。

REQUEST[$field]) && !empty(

より良い方法は、シングルトン/静的クラスを作成して、リクエストデータのチェックの詳細を抽象化することです。

次のようなもの:

<*>

その後、次のことができます。

<*>

これにより、個々のスクリプトのロードがよりクリーンになり、検証などが抽象化されます。さらに、このデザインのスコープのロードにより、拡張/代替動作の追加、より複雑なデフォルト処理の追加などが行われます。

REQUEST[$field])) { return

より良い方法は、シングルトン/静的クラスを作成して、リクエストデータのチェックの詳細を抽象化することです。

次のようなもの:

<*>

その後、次のことができます。

<*>

これにより、個々のスクリプトのロードがよりクリーンになり、検証などが抽象化されます。さらに、このデザインのスコープのロードにより、拡張/代替動作の追加、より複雑なデフォルト処理の追加などが行われます。

REQUEST['field']; } elseif (isset($this->defaults[$field])) { return $this->defaults[$field]; } else { return ''; # define a default value here. } } }

その後、次のことができます。

<*>

これにより、個々のスクリプトのロードがよりクリーンになり、検証などが抽象化されます。さらに、このデザインのスコープのロードにより、拡張/代替動作の追加、より複雑なデフォルト処理の追加などが行われます。

まず、使用します $_POST POSTされた変数の場合。 $_REQUEST だけではなく、さまざまな入力変数のマッシュアップです。 $_POST そして問題を引き起こす可能性があります。

あなたの質問に対する 1 つの解決策は、 isset() 論理。

function ForceIncomingValue($Key, $Default) {
    if (!isset($_POST[$Key]))
         return $Default;
    else return $_POST[$Key];
}

まず、$ _ REQUEST変数を使用しないでください。開発中にバグやその他の問題が発生します


function getPOST($key) {
    if(isset(

まず、$ _ REQUEST変数を使用しないでください。開発中にバグやその他の問題が発生します

function getPOST($key, $default = NULL) {
    if(isset(

まず、$ _ REQUEST変数を使用しないでください。開発中にバグやその他の問題が発生します


function getPOST($key) {
    if(isset(

まず、$ _ REQUEST変数を使用しないでください。開発中にバグやその他の問題が発生します

<*> <コード>

$ _ POST [$ key] が設定されていない場合、このコードは変数を空のままにすることに注意してください

そのコードを調整して、値をロードできなかった場合に(適切な)デフォルトを代わりに提供できるようにすることもできます。

<*>POST[$key])) { return

まず、$ _ REQUEST変数を使用しないでください。開発中にバグやその他の問題が発生します

<*> <コード>

$ _ POST [$ key] が設定されていない場合、このコードは変数を空のままにすることに注意してください

そのコードを調整して、値をロードできなかった場合に(適切な)デフォルトを代わりに提供できるようにすることもできます。

<*>POST[$key]; } }
<コード>

$ _ POST [$ key] が設定されていない場合、このコードは変数を空のままにすることに注意してください

そのコードを調整して、値をロードできなかった場合に(適切な)デフォルトを代わりに提供できるようにすることもできます。

<*>POST[$key])) { return

まず、$ _ REQUEST変数を使用しないでください。開発中にバグやその他の問題が発生します


function getPOST($key) {
    if(isset(

まず、$ _ REQUEST変数を使用しないでください。開発中にバグやその他の問題が発生します

<*> <コード>

$ _ POST [$ key] が設定されていない場合、このコードは変数を空のままにすることに注意してください

そのコードを調整して、値をロードできなかった場合に(適切な)デフォルトを代わりに提供できるようにすることもできます。

<*>POST[$key])) { return

まず、$ _ REQUEST変数を使用しないでください。開発中にバグやその他の問題が発生します

<*> <コード>

$ _ POST [$ key] が設定されていない場合、このコードは変数を空のままにすることに注意してください

そのコードを調整して、値をロードできなかった場合に(適切な)デフォルトを代わりに提供できるようにすることもできます。

<*>POST[$key]; } }
<コード>

$ _ POST [$ key] が設定されていない場合、このコードは変数を空のままにすることに注意してください

そのコードを調整して、値をロードできなかった場合に(適切な)デフォルトを代わりに提供できるようにすることもできます。

<*>POST[$key]; } else { return $default; } }
<コード>

$ _ POST [$ key] が設定されていない場合、このコードは変数を空のままにすることに注意してください

そのコードを調整して、値をロードできなかった場合に(適切な)デフォルトを代わりに提供できるようにすることもできます。

<*>POST[$key])) { return

まず、$ _ REQUEST変数を使用しないでください。開発中にバグやその他の問題が発生します

<*> <コード>

$ _ POST [$ key] が設定されていない場合、このコードは変数を空のままにすることに注意してください

そのコードを調整して、値をロードできなかった場合に(適切な)デフォルトを代わりに提供できるようにすることもできます。

<*>POST[$key]; } }
<コード>

$ _ POST [$ key] が設定されていない場合、このコードは変数を空のままにすることに注意してください

そのコードを調整して、値をロードできなかった場合に(適切な)デフォルトを代わりに提供できるようにすることもできます。

<*>

期待している変数のセットはスクリプトの作成時点でわかっていますか、それとも任意の値のセットに対してこれを実行したいですか?前者が true の場合、次のようなことができます。

# This array would hold the names of all the variables you're expecting
# and a default value for that variable name
$variableNames = array (...); 
foreach ($variableNames as $key => $default) {
    if (isset ($_REQUEST[$key])) $$key = $_REQUEST[$key];
    else $$key = $default;
}

基本的に、これは変数を評価して他の変数を作成する PHP の機能を利用します (したがって、$$key には 2 ドルがかかります。これは、$key の値を名前とする新しい変数を作成することを意味します)。

後者の状況に対する良い解決策はまだ思いつきません。

PHPのヌル合体演算子

  

$ username = $ _GET ['user'] ?? 'nobody';

多くの変数について、要件チェックを行うと、誰でも私の expect 関数

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top