PHP के filter_input() में multiple filter flags को combine करने के तरीके।
समस्या
<?php
// यह काम नहीं करता - flags bitwise OR नहीं हैं
$value = filter_input(INPUT_POST, 'field', FILTER_SANITIZE_STRING,
FILTER_REQUIRE_ARRAY | FILTER_NULL_ON_FAILURE); // Wrong!
समाधान 1: Array के लिए Conditional Flag
<?php
$value = filter_input(INPUT_POST, 'field', FILTER_DEFAULT,
is_array($_POST['field'] ?? null) ? FILTER_REQUIRE_ARRAY : null);
समाधान 2: Custom Filter Function (Flexible)
<?php
function filterInputArray($name, $filter = FILTER_DEFAULT, $flags = 0) {
$value = filter_input(INPUT_POST, $name, $filter, $flags);
// यदि array है और FILTER_REQUIRE_ARRAY नहीं दिया गया
if (is_array($value) && !($flags & FILTER_REQUIRE_ARRAY)) {
// Recursively filter each element
return array_map(function($v) use ($filter, $flags) {
return filter_var($v, $filter, $flags);
}, $value);
}
return $value;
}
// उपयोग
$emails = filterInputArray('emails', FILTER_VALIDATE_EMAIL);
$names = filterInputArray('names', FILTER_SANITIZE_STRING);
समाधान 3: Loop Through All POST Data
<?php
$filtered = [];
foreach ($_POST as $key => $value) {
if (is_array($value)) {
// Array fields: apply array filter
$filtered[$key] = filter_input(INPUT_POST, $key, FILTER_DEFAULT,
FILTER_REQUIRE_ARRAY | FILTER_REQUIRE_SCALAR);
} else {
// Scalar fields: apply scalar filter
$filtered[$key] = filter_input(INPUT_POST, $key, FILTER_SANITIZE_STRING);
}
}
// Specific field types के लिए
$rules = [
'email' => [FILTER_VALIDATE_EMAIL],
'age' => [FILTER_VALIDATE_INT, ['min_range' => 1, 'max_range' => 120]],
'tags' => [FILTER_DEFAULT, FILTER_REQUIRE_ARRAY],
'bio' => [FILTER_SANITIZE_STRING],
];
$filtered = [];
foreach ($rules as $field => $rule) {
$filter = $rule[0];
$options = $rule[1] ?? [];
$flags = $rule[2] ?? 0;
$filtered[$field] = filter_input(INPUT_POST, $field, $filter, $flags, $options);
}
समाधान 4: filter_input_array() - Bulk Filtering
<?php
$filters = [
'name' => FILTER_SANITIZE_STRING,
'email' => FILTER_VALIDATE_EMAIL,
'age' => [
'filter' => FILTER_VALIDATE_INT,
'options' => ['min_range' => 1, 'max_range' => 150]
],
'tags' => [
'filter' => FILTER_DEFAULT,
'flags' => FILTER_REQUIRE_ARRAY
],
'subscribe' => FILTER_VALIDATE_BOOLEAN,
];
$result = filter_input_array(INPUT_POST, $filters);
// Result structure:
// [
// 'name' => 'filtered string',
// 'email' => 'valid@email.com' or false,
// 'age' => 25 or false,
// 'tags' => ['tag1', 'tag2'] or false,
// 'subscribe' => true/false
// ]
Flag Constants Reference
| Constant | Value | Description |
|---|---|---|
FILTER_REQUIRE_ARRAY | 1 | Input को array के रूप में require करता है |
FILTER_FORCE_ARRAY | 2 | Scalar values को array में wrap करता है |
FILTER_REQUIRE_SCALAR | 4 | Array input पर false return करता है |
FILTER_NULL_ON_FAILURE | 8 | Failure पर false के बजाय null return करता है |
Bitwise Combination (जब applicable हो)
<?php // ये flags bitwise OR के साथ combine किए जा सकते हैं: $flags = FILTER_REQUIRE_ARRAY | FILTER_NULL_ON_FAILURE; // = 1 | 8 = 9 $value = filter_input(INPUT_POST, 'tags', FILTER_DEFAULT, $flags); // लेकिन FILTER_REQUIRE_ARRAY और FILTER_FORCE_ARRAY mutually exclusive हैं