Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

why does filter_input() return NULL when I manually assign value to $_POST array?

I'm following some exercises about data validation and decided to mess around with the filter_input() function. When I try to run this code:

$_POST['var'] = 10;

$filtered = filter_input(INPUT_POST, 'var', FILTER_VALIDATE_FLOAT);

var_dump($filtered);

var_dump($filtered) returns NULL. I know the code works if $_POST['var'] is assigned a value by submitting a form, but I'm just wondering why manually assigning a value to the $_POST[] array doesn't return float(10)?

like image 832
user701510 Avatar asked Apr 18 '12 01:04

user701510


3 Answers

filter_input() doesn't read from the _POST/_GET/_COOKIE/_SERVER/_ENV superglobal arrays. It reads from the original sources of those values respectively (which are also used to populate the superglobals).

like image 93
BoltClock Avatar answered Sep 28 '22 23:09

BoltClock


This is because INPUT_POST works on the original POST values, modifications to them in your script have no effect. However, if you want to filter that var you can use:

filter_var($_POST['var'], FILTER_VALIDATE_FLOAT);
like image 35
nico gawenda Avatar answered Sep 28 '22 22:09

nico gawenda


If you want to set a default input value and filter, use filter_var. Because filter_input doesn't filter current values of superglobals.

like image 39
miqbal Avatar answered Sep 28 '22 23:09

miqbal