2

私はスタック オーバーフローと Web の残りの部分を検索してきましたが、未定義のインデックスに対する一般的な解決策はないと考え始めています。

複数のフォームを持つ大規模な PHP アプリケーションがあり、スクリプトの最後ですべてのフォームの入力を呼び出し、それらをまとめてすべての入力の概要を表示します。

echo $_POST['FirstName'];
echo $_POST['MiddleName'];
echo $_POST['LastName'];

次のように各発生を確認する方法を知っています

if ( !isset($_POST['MiddleName']) ) { $_POST['MiddleName'] = '' }

すべての未定義のインデックスを自動的にキャプチャし、それらを 0 または null に設定する方法はありますか?

4

5 に答える 5

4

定義できるすべてのインデックスの配列をループするのと同じくらい簡単です。

   $indexes_that_MUST_be_defined_but_can_be_empty = array(
      'FirstName',
      * * *
      'LastName'
   );
   foreach($indexes_that_MUST_be_defined_but_can_be_empty as $index) {
       if( ! isset($_POST[$index])) {
           $_POST[$index] = NULL;
       }
   }

または、次のようにさまざまなデフォルトを事前設定することもできます。

   $indexes_that_MUST_be_defined_but_can_be_empty = array(
      'FirstName' => NULL,
      * * *
      'LastName' => NULL
   );
   $_POST = array_merge($indexes_that_MUST_be_defined_but_can_be_empty, $_POST);

本当に警告を抑制したい場合は、次の@ように使用できます。

echo htmlspecialchars(@$_POST['any_index']);

しかし、私は本当にこれをお勧めしません。

編集:これがもう1つの可能な解決策です。ポインターを使用する「魔法の」関数:

function null_if_not_defined(&$variable) {
    return isset($variable) ? $variable : NULL;
}

// Usage: 
echo htmlspecialchars(null_if_not_defined($_POST['any_index']));
于 2013-05-01T10:48:06.167 に答える
0

値が割り当てられたインデックスのみを表示したい場合は、次のようにすることができます。

foreach ($_POST as $index => $value) {
  echo "{$index}: {$value}<br/>";
}
于 2013-05-01T10:48:13.313 に答える
0

この目的のために単純な関数を作成することもできます。

$p = function($item) {
  return isset($_POST[$item]) ? $_POST[$item] : null;
};

これで、次のように使用できます。

echo $p('MiddleName');
于 2013-05-01T10:50:51.883 に答える