3

$_REQUEST[]orで受け取る変数が多い php ファイルで、値がfunction である$_POST[]場合にチェックする必要があり、なかなか面倒です。より良い解決策はありますか?nullisset()

4

4 に答える 4

4

in_arrayとの組み合わせを使用するのはどうですかarray_map。たとえば、次のようになります。

// array of possible parameters that can be passed by the client
$keys = array('username','password');

// this will store the names of the ones that are not present
$missing = array();

foreach($keys as $key) {
    if(!in_array($key, $_POST)) {
        $missing[] = $key;
    }
}

$nullOffsets = array_map("is_null", $_POST);

echo 'Printing missing params:<br />';
print_r($missing);
echo 'Printing null existing params:<br />';
print_r($nullOffsets);
于 2009-11-16T10:35:47.330 に答える
0

ユーザー入力チェックは面倒ですが、それは必要悪です。

個人的には、必要なコンテンツを自分の変数にコピーして処理する以外は使用し$_GETない方が好きです。$_POST

$_GET.phpファイルの先頭に、コピー元またはコピーしたい値の名前を含む配列を保持しています。$_POST

これは次のようになります。

// the following array needs to be modified when you change your input specs
$inputAllowed = array("name", "title", "company");
$input = array();
foreach($inputAllowed as $key)
    if( array_key_exists( $key, $_POST ) )
        $input[$key] = $_POST[$key];
    else
        $input[$key] = "";

何かがnullであってはならない場合の処理​​とともに、そこに「is_null」チェックを追加するのは簡単です。または、最初にループを終了させて​​から、$inputをループすることもできます。

于 2009-11-16T10:49:40.127 に答える
0

変数が配列内にある場合 (単にリクエストを使用したり、配列をポストしたりしないでください)、それらをループしてisset()関数を呼び出すことができます。現在のコードによっては、これが「より良い」場合があります。

于 2009-11-16T10:36:28.923 に答える
0

配列をオブジェクトにラップしてみることができます。

class ArrayWrapper {
    private $data;
    public function __get($var) {
    if (!isset($this->data[$var])) {
        return false;
    }
    else {
        return $this->data[$var];
    }
    }
    public function __construct($a) {
    $this->data = $a;
    }
}

$a = array('test' => 1);

$aw = new ArrayWrapper($a);

if ($aw->test != false) {
    echo "test: ".$aw->test;
}
if ($aw->foo != false) {
    echo "foo: ".$aw->foo;
}
于 2009-11-16T11:01:47.513 に答える