user2871179
user2871179

Reputation: 57

PHP - proper check if $_POST['variable'] is posted

I want to check if $_POST['submit'] is posted.

My original code was:

if ($_POST['submit']) { }

But I have a PHP notice with this code - "Undefined index: submit in..."

So to remove the notice I have to write this:

if (isset($_POST['submit'])) { }

But this is pointless because $_POST array is global and it return always true. Also if I want to check if $_POST['submit'] is not 0 without PHP notice I have to write this:

if (isset($_POST['submit']) && $_POST['submit'] != 0) { }

In this particular case I prefer:

if ($_POST['submit']) {}

But here I get the PHP notice.

So which way is the most proper/accepted?

Thank you

Upvotes: 4

Views: 8995

Answers (5)

Dimich
Dimich

Reputation: 359

As of PHP version 7 there is a new method available called "Null Coalesce Operator". This method saves you time and space in your code.

$submit = $_POST['submit'] ?? '';

If submit key does not exist or is NULL the value of the $submit variable will be an empty string.

This method is not limited to $_POST. It will work for any variable. For example:

echo $my_message ?? 'No message found';

If message was not initialized or is NULL, the statement above will output No message found

There's even more that you can do with a null coalesce operator, documentation link below.

Documentation here

Upvotes: 2

Cyril Joudieh
Cyril Joudieh

Reputation: 124

$_POST[] checks to see if a variable is submitted and not the form name.

if ( isset($_POST['name']) ) {
    // work here
}

Upvotes: 1

Manish Shrivastava
Manish Shrivastava

Reputation: 32050

As per my understanding, It should be like below:

if (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD']=='POST'){
  # if method is post, code goes here.
}

and if you are sure that your method is POST for sure. and you have data post in $_POST you can use code like below:

if (isset($_POST['submit']) && $_POST['submit'] != '') {# I think, '' instead of 0
  # if data is posted, code goes here.
}

I usually prefer $_POST.

Upvotes: 0

sumit
sumit

Reputation: 15464

Try

if ($_SERVER['REQUEST_METHOD']=='POST')
{
  //do 
}

Upvotes: 2

deceze
deceze

Reputation: 522480

isset($_POST['submit']) checks if the submit key is set in the $_POST array. It doesn't just check whether the $_POST array exists and is therefore not "pointless". If you want to check whether the value is not falsey (== false), which includes 0, without triggering an error, that's what empty is for:

if (!empty($_POST['submit']))

which is the same thing as

if ($_POST['submit'])

but without triggering a notice should the value not exist.

See The Definitive Guide To PHP's isset And empty for an exhaustive explanation.

Upvotes: 4

Related Questions