开发者

Getting confused with empty, isset, !empty, !isset

开发者 https://www.devze.com 2023-04-10 06:20 出处:网络
I have the following which doesn\'t work properly as $_GET[\'category\'] can also equal 0. if ( empty( $_GET[\'category\'] ) ){

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

  1. Do something if $_GET['category'] does not exist at all
  2. Do something if $_GET['category'] == 0
  3. 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
}
0

精彩评论

暂无评论...
验证码 换一张
取 消