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

后端 未结 6 407
感情败类
感情败类 2021-01-21 19:10

I have the following which doesn\'t work properly as $_GET[\'category\'] can also equal 0.

if ( empty( $_GET[\'category\'] ) ){
    // do something
         


        
相关标签:
6条回答
  • 2021-01-21 19:36

    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.

    0 讨论(0)
  • 2021-01-21 19:42

    There is the filter_input-function for such cases.

    0 讨论(0)
  • 2021-01-21 19:42

    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 讨论(0)
  • 2021-01-21 19:45

    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
       }
    }
    
    0 讨论(0)
  • 2021-01-21 19:56
    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.

    0 讨论(0)
  • 2021-01-21 19:59
    <?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)
    }
    
    0 讨论(0)
提交回复
热议问题