Empty() and Isset() in PHP
This is just a quick tip regarding the “empty” and “isset” functions for people that are fairly new to the world of PHP programming. I learned this the hard way a long time ago while I was working on my first few form processors in PHP.
From the PHP Web site, referring to the “empty” function:
Returns FALSE if var has a non-empty and non-zero value.
That’s a good thing to know. In other words, everything from NULL, to 0 to “” will return TRUE when using the “empty” function.
Here is the description of what the “isset” function returns:
Returns TRUE if var exists; FALSE otherwise.
In other words, only variables that don’t exist (or, variables with strictly NULL values) will return FALSE on the “isset” function. All variables that have any type of value, whether it is 0, a blank text string, etc. will return TRUE.
Something else you need to know is that textareas and textboxes in forms will be sent with “” values rather than NULL values to the $_POST array.
Therefore, if you are trying to process a form, and you want to make sure the person entered something into the field, you are much better off checking to see if the form value is empty, than you are checking to see if it “isset”. On the other hand, if you are trying to check the value of a radio button or combobox in which one of your possible values is “0″, then you should be using the isset command.
For the first few form processors I worked on, I was consistently using the following code:
if(isset($_POST[myField]) && $_POST[myField] != "") {
Do my PHP code
}
A more efficient way of doing this is obviously to use:
if(!empty($_POST[myField])) {
Do my PHP code
}
Just a quick tip for people struggling with this. There are two main points in this article:
1) “isset” and “empty” are not exactly opposite of each other. They actually check for two very different things. Therefore, using “!isset” is not the same as using “empty”, nor is “!empty” the same as using “isset”. That’s a good thing, but it’s not something you generally figure out right off the bat.
2) Forms will send blank values to the $_POST array instead of sending NULL values. Therefore, the variable you are usually checking from your form is, in the strictest sense of the word, “set”. However, it may still have an “empty” value. Therefore, if you really only want to check to see if the variable exists, even if it has an empty value (or if you want to check if a variable doesn’t exist), then you want to use the “isset” function. However, if you want to check to see if the variable has (or doesn’t have) an empty value, then you are better off using the “empty” function.
I hope that helps someone out there avoid some of the coding mistakes I made early in the game. Enjoy.
Related posts:




Thanks for the clarification. I, too, had to learn this the hard way, but now I clearly understand my mistake.
Thank you.
I had a confusing bug and your article made it clear.
This is why isset() is mainly used to check to see if a “hidden” input is set (and thus is a good way to activate php code upon submission of a form).
Wow, you’ve helped me alot. Thank you!
Hi I want to check a number of fields to ensure that they are not left empty. Your tutorial above was a great help to me to understand how to check a field. Is there a method for checking a group of fields at one time or should I check each field individually.
Thanks for the help.
please help me give me a sample code in php empty…
the scenario is i want to tell that if the field of the table is empty the result is no records found if the record has a data it will select the data
@Jeffrey
To check multiple fields at once, you can use either PHP’s AND syntax as follows:
if(!empty($_POST['field1']) && !empty($_POST['field2']) && !empty($_POST['field3'])) {
// Do whatever you like here
}
If your script is built with error handling, to post back errors, you’re going to want to do this all separately, so that you can send back distinctive error messages:
session_start(); // I set my scripts with sessions
$form_err = array(); // Setup an array for error storage
$form_flag = FALSE; // Preset to FALSE to show it started with 0 errors
if(!empty($_POST['field1'])) {
$form_err[] = ‘Field empty’;
$form_flag = TRUE;
}
if(!empty($_POST['field2'])) {
$form_err[] = ‘Field empty’;
$form_flag = TRUE;
}
if($form_flag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
session_write_close();
header(“location: your/page/goes/here”);
exit();
}
Then just simply work your way through the errors to for the user, so they know exactly what they did wrong.
Whoops, $_SESSION['ERRMSG_ARR'] = $errmsg_arr; should actually be $_SESSION['ERRMSG_ARR'] = $form_err;
This is a good tip, but it’s important to remember that if a user that submits a single blank space in a form field, that field will be set and not empty.
The following code will echo “not empty”.
I use trim() almost to an insane extent to catch these cases. You’d be surprised how many forms authored in PHP will accept a single blank space as valid input.
I am just beginning to learn PHP, HTML, and SQL. I have started writing a PHP program and am having trouble. I have a user input information on a form which I am trying to test using the empty or isset commands but I am not having any luck. I have the variables named as follows:
Input Form: easypick is a radio button that either is a Yes or No responce (returns Y/N).
firstnumbers is a checkbox that allows mulitple entry of numbers from (1-56).
When I go to check to see if the user wants a random number generated or if he has selected the
numbers, I am checking these values with the following code below, but I am not getting the correct responce. What am I doing wrong?
// Check to see if the user wants to have the computer randomly select his numbers.
if ((empty($_POST['firstnumbers[]‘])) && (!empty($_POST['easypick'])) && ($easypick =”N”))
{
echo ‘User does not want to random select his numbers’;
exit;
}
else
if ((empty($_POST['firstnumbers[]‘])) && (!empty($_POST['easypick'])) && ($easypick =”Y”))
{
// Ok, User wants to have his numbers randomly selected and did not choose any of the first
five numbers.
echo ‘Inside Here – User Want to Random Select His Numbers’;
exit;
}
Thanks Curtis! Your clear explanation was very helpfull!
hey thanks for the empty function.
A lot of people recommended me to use isset but it wasn’t always working.
Anyway the empty() approach is way better for the forms.
What do you suggest when the submitted value should not be blank but 0 is acceptable. For example a form that may request the number of children a person has. In this case neither isset or empty would work. I guess you could work something out with is_numeric but when validating with loops I don’t really see much of an alternative to isset && !=”". Any thoughts?
I’ve run into that problem, myself, before, too. Although it’s a little complicated, I think I usually end up using something like
if( isset( $var ) && ( !empty( $var ) || 0 == $var ) ) ).I’ll try to remember to take a look at some of my old code and see if I can find a better solution.
Thank you so much! This article saved me SO much time debugging