Let's break it down :
if (!isset($_GET["cat"]) || !isset($_GET["new_field"])) {
This means, if cat is not set, OR new_field is not set, then the condition is true.
If you pass cat, but you don't pass new_field, the condition will still be true. If you want it to be false, you need to send BOTH cat AND new_field.
The && requires that all conditions must be true to return true, else it returns false.
The || requires that any of the given conditions must be true to return true, else it returns false.
You can find a complete reference of PHP logical operators here :