I have the following which doesn\'t work properly as $_GET[\'category\'] can also equal 0.
if ( empty( $_GET[\'category\'] ) ){
// do something
This isn't really hard to do: isset is the method you need.
if (!isset($_GET['category'])) {
// category isn't set
} elseif ($_GET['category'] === '0') {
// category is set to 0
} else {
// category is set to something other than 0
}
Note that I have compared for exact equality to the string '0', because GET and POST variables are always strings (or occasionally arrays) and never numbers when PHP first receives them.
There is the filter_input-function for such cases.
Try this:
if (!isset($_GET['category'])) { // if variable not specified
}
elseif ($_GET['category'] == 0) { // variable is specified and zero
}
else { // variable is specified and not zero
}
Make sure the name attribute of the element that is doing get on the previous page is set, preferably to the same as its id.
Then:
$category='';
if ( !isset( $_GET['category'] ) ){
//1
} else {
$category=$_GET['category'];
//3
if($category==0){
//2
}
}
if (!isset($_GET['category']))
{
1. Do something if $_GET['category'] does not exist at all
}
elseif ($_GET['category'] == 0)
{
2. Do something if $_GET['category'] == 0
}
elseif (isset($_GET['category']) && ($_GET['category'] != 0)
{
3. Do something if $_GET['category'] == something other than "does not exist" and 0.
}
My brackets might be slightly out somewhere but hopefully that should help you out.
<?php
$bad_values = array(null, '', 'dirty word');
if(isset($_GET['xd']))
{
if(in_array($_GET['xd'], $bad_values, true))
{
// bad, it was null, empty or something else you think is not ok
}
else
{
// it's fine, now check whether you got the zero. do a string comparison
if($_GET['xd'] == '0')
{
// you got the zero, yell at the user
}
else
{
// you got something else, it might be fine, it might be spoofed. use referential integrity to enforce data integrity in your db
}
}
}
else
{
// it wasn't even sent in the request, that falls under 1)
}