Getting confused with empty, isset, !empty, !isset
I have the following which doesn't work properly as $_GET['category']
can also equal 0.
if ( empty( $_GET['category'] ) ){
// do something
} else {
// do something else
}
How do I re-write this if statement to do 3 different things
- Do something if
$_GET['category']
does not exist at all - Do something if
$_GET['category'] == 0
- Do som开发者_JAVA百科ething if
$_GET['category'] ==
something other than "does not exist" and 0.
I've tried different combinations of empty()
, !empty()
, isset()
, !isset()
but I'm not getting the results I'm after. I'm probably doing the wrong combinations...
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.
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.
There is the filter_input
-function for such cases.
<?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)
}
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
}
}
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
}
精彩评论