Yep, isset is simply to check the existence of a variable, and that it is not null. It otherwise does not care about the value of the variable. Input from forms cannot be null, only empty strings.
PHP Code:
if ($_POST['field'])
If you have not posted your form, or you have provided the form with false equivalent data (array(), "", "0", false, although from a form you will never get array()), that will not pass the check and it will trigger an error notice if not posted.
PHP Code:
if (isset($_POST['field']))
Simply checks if we have been provided with a field called 'field'. It only cares if its not null, but as mentioned you cannot receive null from a form, only an empty string. I'd need to test to be 100% sure, but I believe if you managed to pump a null through it, Apache or IIS would convert it during the successful fields checks. Isset does not throw an error if the variable doesn't exist (as is its purpose).
With the example you have here, you can use a ternary operation for it:
$delivery = isset($_POST['delivery']) ? $_POST['delivery'] : 'none';. Just like any if, you can group as many conditions as you want into it.
Empty checks that a variable exists and is an empty value (false equivalent). Although faith in my memory is kinda diminishing a bit, I'm quite sure that empty() used to trigger notice when the variable does not exist. Currently it does not. Empty can be used in place of isset if you demand that a provided value cannot be a false equivalent. This is unlike isset as isset considers "" or 0 to be valid. Empty does not. Personally, I use empty during validation phases, but not during initial verification. Don't use empty on something like a quantity, otherwise it will never pass the 0 check (for which you likely need to remove it from a cart for example instead of ignoring the input completely).
So to sum it up (which mlseim did):
PHP Code:
if ($variable) // condition of the VALUE of the variable
if (isset($variable)) // $variable exists and is not null
if (empty($variable)) // $variable exists and is false equivalent
Isset also has one advantage on empty; you can use many and all have to pass. Works well with forms:
PHP Code:
if (isset($_POST['username'], $_POST['password']))