I wonder how the variable poisoning happen?
PHP does not require variable initialisation, so you can pretty much use a variable straightaway, without having to explicitly set a value.
Variable poisoning occurs when the variable is set to an unexpected value.
This may allow an attacker to circumvent security measures, force execution of arbitrary commands etc, depending on how serious the problem is.
With register_globals set to On, this is more likely to happen, since a user might be more easily able to take advantage of sloppy coding that doesnt validate incoming variables, or uses variables without initialising them.
Using isset() or empty() with incoming variables is part of initialising them.
You confirm that the incoming variable exists, after which you can safely use it...
Or not so safely, if you do not perform further validation and/or type-casting.
If the variable does not exist, or is empty, then you can set some default value, or report/log an error to the user/administrator.