Filter input for php

PHP filter_input

Summary: in this tutorial, you will learn how to use the PHP filter_input() function to get an external variable by name and filter it.

Introduction to PHP filter_input() function

The PHP filter_input() function allows you to get an external variable by its name and filter it using one or more built-in filters.

The following shows the syntax of the filter_input() function:

filter_input ( int $type , string $var_name , int $filter = FILTER_DEFAULT , array|int $options = 0 ) : mixedCode language: PHP (php)

The filter_input() function has the following parameters:

  • $type is one of INPUT_GET , INPUT_POST , INPUT_COOKIE , INPUT_SERVER , and INPUT_ENV .
  • $var_name is the name of the variable to filter.
  • $filter is the filter id to apply. Here’s the list of valid filters. If you omit the $filter argument, the filter_input() function will use the FILTER_DEFAULT filter id, which doesn’t filter anything.
  • $options is an associative array that consists of one or more options. When a filter accepts the options, you can use one or more flags. If you want to use multiple flags, you need to separate them by the ( | ) e.g., FILTER_SANITIZE_ENCODED | FILTER_SANITIZE_SPECIAL_CHARS .

The filter_input() function returns null , false , or the filtered value according to the following rules:

  • If the $var_name is not set, the filte_input() function returns null .
  • If the filter fails, the filter_input() function returns false .
  • Otherwise, it returns the filtered value of the requested variable.
Читайте также:  Config file for python script

PHP filter_input() function example

The following example uses the filter_input() function to sanitize data for a search form:

 $term_html = filter_input(INPUT_GET, 'term', FILTER_SANITIZE_SPECIAL_CHARS); $term_url = filter_input(INPUT_GET, 'term', FILTER_SANITIZE_ENCODED); ?> form action="search.php" method="get"> label for="term"> Search label> input type="search" name="term" id="term" value=""> input type="submit" value="Search"> form>  if (null !== $term_html) < echo "The search result for $term_html ."; >Code language: HTML, XML (xml)

The form contains an input with type search and a submit button.

When you enter a search term, e.g., how to use the filter_input function and click the submit button; the form uses the GET method to append the term query string to the URL, e.g.,

http://localhost/search.php?term=how+to+use+the+filter_input+functionCode language: plaintext (plaintext)

This search form submits to itself ( search.php ).

The filter_input() function sanitizes the search term using the FILTER_SANITIZE_SPECIAL_CHARS and FILTER_SANITIZE_ENCODED filters.

The FILTER_SANITIZE_SPECIAL_CHARS filter returns a value for showing on the search field and the FILTER_SANITIZE_ENCODED filter returns a value for displaying on the page.

filter_input vs. filter_var

If a variable doesn’t exist, the filter_input() function returns null while the filter_var() function returns an empty string and issues a notice of an undefined index.

Suppose you have a page with the following URL:

http://localhost/search.phpCode language: JavaScript (javascript)

The following filter_input() function returns null and doesn’t raise any error when you get the term variable from the INPUT_GET:

 $term = filter_input(INPUT_GET, 'term', FILTER_SANITIZE_SPECIAL_CHARS); var_dump($term);Code language: HTML, XML (xml)
NULLCode language: plaintext (plaintext)

However, the filter_var() function returns an empty string and issues an error:

 $term = filter_var($_GET['term'], FILTER_SANITIZE_SPECIAL_CHARS); var_dump($term);Code language: HTML, XML (xml)
Notice: Undefined index: term in . \search.php on line 3 string(0) ""Code language: plaintext (plaintext)

Therefore, you often use the isset() or filter_has_var() function to check if a variable is set before passing it to the filter_var() function like this:

 if (isset($_GET['term'])) < $term = filter_var($_GET['term'], FILTER_SANITIZE_SPECIAL_CHARS); var_dump($term); >Code language: HTML, XML (xml)

Also, the filter_input() function doesn’t get the current values of the $_GET , $_POST , … superglobal variables. Instead, it uses the original values submitted in the HTTP request. For example:

 $_GET['term'] = 'PHP'; // doesn't have any effect on INPUT_GET $term = filter_input(INPUT_GET, 'term', FILTER_SANITIZE_SPECIAL_CHARS); var_dump($term);Code language: PHP (php)
NULLCode language: plaintext (plaintext)

This example attempts to assign a value to the $_GET[‘term’] variable. However, the filter_input() doesn’t read the term from the current $_GET variable. Therefore, the script displays NULL.

On the other hand, the filter_var() function does read values from the current $_GET variable. For example:

 $_GET['term'] = 'PHP'; $term = filter_var($_GET['term'], FILTER_SANITIZE_SPECIAL_CHARS); var_dump($term);Code language: HTML, XML (xml)
string(3) "PHP"Code language: JavaScript (javascript)

Summary

Источник

Filter input for php

В этом разделе помещены уроки по PHP скриптам, которые Вы сможете использовать на своих ресурсах.

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

Совет: активация отображения всех ошибок в PHP

При поднятии PHP проекта на новом рабочем окружении могут возникнуть ошибки отображение которых изначально скрыто базовыми настройками. Это можно исправить, прописав несколько команд.

Источник

filter_input_array

Эта функция полезна для получения множества переменных без многократного вызова функции filter_input() .

Список параметров

Одна из констант INPUT_GET , INPUT_POST , INPUT_COOKIE , INPUT_SERVER или INPUT_ENV .

Массив, определяющий аргументы. Допустимый ключ — строка ( string ), содержащая имя переменной, а допустимое значение — либо тип фильтра, либо массив ( array ), при необходимости определяющий фильтр, флаги и параметры. Если значение является массивом, допустимыми ключами являются filter , который определяет (тип фильтра ), flags , который определяет любые флаги, применяемые к фильтру и options , который определяет любые параметры, применяемые к фильтру. Смотрите пример ниже для лучшего понимания.

Этот параметр также может быть целым числом, содержащим предопределённую фильтровую константу. Затем все значения во входном массиве фильтруются этим фильтром.

Добавляет в результат отсутствующие ключи со значением null .

Возвращаемые значения

Массив, содержащий значения запрошенных переменных в случае успешного выполнения. Если входной массив, определяемый параметром type , не заполнен, то функция вернёт null , если флаг FILTER_NULL_ON_FAILURE не задан, false в противном случае. Для других неудачных выполнений возвращается false

Значение массива будет false , если фильтрация завершилась неудачей, или null , если переменная не определена. Либо, если установлен флаг FILTER_NULL_ON_FAILURE , возвращается false , если переменная не определена и null , если фильтрация завершилась неудачей. Если параметр add_empty равен false , элемент массива не будет добавлен для удалённых переменных.

Примеры

Пример #1 Пример использования filter_input_array()

/* данные, полученные методом POST
$_POST = array(
‘product_id’ => ‘libgd’,
‘component’ => array(’10’),
‘version’ => ‘2.0.33’,
‘testarray’ => array(‘2′, ’23’, ’10’, ’12’),
‘testscalar’ => ‘2’,
);
*/

$args = array(
‘product_id’ => FILTER_SANITIZE_ENCODED ,
‘component’ => array( ‘filter’ => FILTER_VALIDATE_INT ,
‘flags’ => FILTER_REQUIRE_ARRAY ,
‘options’ => array( ‘min_range’ => 1 , ‘max_range’ => 10 )
),
‘version’ => FILTER_SANITIZE_ENCODED ,
‘doesnotexist’ => FILTER_VALIDATE_INT ,
‘testscalar’ => array(
‘filter’ => FILTER_VALIDATE_INT ,
‘flags’ => FILTER_REQUIRE_SCALAR ,
),
‘testarray’ => array(
‘filter’ => FILTER_VALIDATE_INT ,
‘flags’ => FILTER_REQUIRE_ARRAY ,
)

$myinputs = filter_input_array ( INPUT_POST , $args );

var_dump ( $myinputs );
echo «\n» ;
?>

Результат выполнения данного примера:

array(6) < ["product_id"]=>string(17) "libgd%3Cscript%3E" ["component"]=> array(1) < [0]=>int(10) > ["version"]=> string(6) "2.0.33" ["doesnotexist"]=> NULL ["testscalar"]=> int(2) ["testarray"]=> array(4) < [0]=>int(2) [1]=> int(23) [2]=> int(10) [3]=> int(12) > >

Примечания

Замечание:

В массиве INPUT_SERVER нет ключа REQUEST_TIME , потому что он будет позднее в $_SERVER .

Смотрите также

  • filter_input() — Принимает переменную извне PHP и, при необходимости, фильтрует её
  • filter_var_array() — Принимает несколько переменных и, при необходимости, фильтрует их
  • Типы фильтров

User Contributed Notes 8 notes

Note that although you can provide a default filter for the entire input array there is no way to provide a flag for that filter without building the entire definition array yourself.

So here is a small function that can alleviate this hassle!

function filter_input_array_with_default_flags ( $type , $filter , $flags , $add_empty = true ) $loopThrough = array();
switch ( $type ) case INPUT_GET : $loopThrough = $_GET ; break;
case INPUT_POST : $loopThrough = $_POST ; break;
case INPUT_COOKIE : $loopThrough = $_COOKIE ; break;
case INPUT_SERVER : $loopThrough = $_SERVER ; break;
case INPUT_ENV : $loopThrough = $_ENV ; break;
>

$args = array();
foreach ( $loopThrough as $key => $value ) $args [ $key ] = array( ‘filter’ => $filter , ‘flags’ => $flags );
>

return filter_input_array ( $type , $args , $add_empty );
>
?>

[New Version]This function is very useful for filtering complicated array structure.
Also, Some integer bitmasks and invalid UTF-8 sequence detection are available.

Code:
/**
* @param integer $type Constant like INPUT_XXX.
* @param array $default Default structure of the specified super global var.
* Following bitmasks are available:
* + FILTER_STRUCT_FORCE_ARRAY — Force 1 dimensional array.
* + FILTER_STRUCT_TRIM — Trim by ASCII control chars.
* + FILTER_STRUCT_FULL_TRIM — Trim by ASCII control chars,
* full-width and no-break space.
* @return array The value of the filtered super global var.
*/
define ( ‘FILTER_STRUCT_FORCE_ARRAY’ , 1 );
define ( ‘FILTER_STRUCT_TRIM’ , 2 );
define ( ‘FILTER_STRUCT_FULL_TRIM’ , 4 );
function filter_struct_utf8 ( $type , array $default ) static $func = __FUNCTION__ ;
static $trim = «[\\x0-\x20\x7f]» ;
static $ftrim = «[\\x0-\x20\x7f\xc2\xa0\xe3\x80\x80]» ;
static $recursive_static = false ;
if (! $recursive = $recursive_static ) $types = array(
INPUT_GET => $_GET ,
INPUT_POST => $_POST ,
INPUT_COOKIE => $_COOKIE ,
INPUT_REQUEST => $_REQUEST ,
);
if (!isset( $types [(int) $type ])) throw new LogicException ( ‘unknown super global var type’ );
>
$var = $types [(int) $type ];
$recursive_static = true ;
> else $var = $type ;
>
$ret = array();
foreach ( $default as $key => $value ) if ( $is_int = is_int ( $value )) if (!( $value | (
FILTER_STRUCT_FORCE_ARRAY |
FILTER_STRUCT_FULL_TRIM |
FILTER_STRUCT_TRIM
))) $recursive_static = false ;
throw new LogicException ( ‘unknown bitmask’ );
>
if ( $value & FILTER_STRUCT_FORCE_ARRAY ) $tmp = array();
if (isset( $var [ $key ])) foreach ((array) $var [ $key ] as $k => $v ) if (! preg_match ( ‘//u’ , $k )) continue;
>
$value &= FILTER_STRUCT_FULL_TRIM | FILTER_STRUCT_TRIM ;
$tmp += array( $k => $value ? $value : » );
>
>
$value = $tmp ;
>
>
if ( $isset = isset( $var [ $key ]) and is_array ( $value )) $ret [ $key ] = $func ( $var [ $key ], $value );
> elseif (! $isset || is_array ( $var [ $key ])) $ret [ $key ] = null ;
> elseif ( $is_int && $value & FILTER_STRUCT_FULL_TRIM ) $ret [ $key ] = preg_replace ( «/\A < $ftrim >++| < $ftrim >++\z/u» , » , $var [ $key ]);
> elseif ( $is_int && $value & FILTER_STRUCT_TRIM ) $ret [ $key ] = preg_replace ( «/\A < $trim >++| < $trim >++\z/u» , » , $var [ $key ]);
> else $ret [ $key ] = preg_replace ( ‘//u’ , » , $var [ $key ]);
>
if ( $ret [ $key ] === null ) $ret [ $key ] = $is_int ? » : $value ;
>
>
if (! $recursive ) $recursive_static = false ;
>
return $ret ;
>
?>

Источник

Оцените статью