Edit report at https://bugs.php.net/bug.php?id=55650&edit=1

 ID:                 55650
 User updated by:    chris dot wisefool at gmail dot com
 Reported by:        chris dot wisefool at gmail dot com
 Summary:            !empty($_GET[$key][$subkey])) always returns false
                     if $_GET[$key] is set
 Status:             Open
 Type:               Bug
 Package:            Built-in web server
 Operating System:   Windows 6.1 build 7600 i586
 PHP Version:        5.3.8
 Block user comment: N
 Private report:     N

 New Comment:

Either the form munged part of my data (unlikely) or I pasted it in wrong. The 
line after 

if (!empty($_GET['search']['filter'])) echo 'SEARCH FILTER PARAM WAS PROVIDED!';

should be

$_GET = array('search'=>1);
if (!empty($_GET['search']['filter'])) 
   echo 'SEARCH FILTER PARAM WAS NOT PROVIDED!';

I'd edit it, but it seems you can't: you can only add comments...


Previous Comments:
------------------------------------------------------------------------
[2011-09-09 06:29:54] chris dot wisefool at gmail dot com

Description:
------------
Running on PHP Version 5.3.5, EasyPHP Server Apache.
The test code on my system shows "SEARCH FILTER PARAM WAS PROVIDED" if 
?search=1 
is passed for the query string but curiously not if ?search[a]=1 is provided. 
Based on some other bug reports (#27677) I thought maybe the behavior was 
correct, 
but if so then it seems a bug that when _GET is manually set to the same value 
instead of set by PHP parsing the query string, that it gives different 
results. 
So it seems a bug either way. :)


Test script:
---------------
<?php
# Assume http://somesite/?search=1
if (!empty($_GET['search']['filter'])) echo 'SEARCH FILTER PARAM WAS PROVIDED!';

# The REALLY odd thing is if I do this it does give the expected results:
$_GET 
if (!empty($_GET['search']['filter'])) 
   echo 'SEARCH FILTER PARAM WAS NOT PROVIDED!';

<?php
# The following (which obviously should be run as a separate script)
# demonstrates that the $_GET array seems the same in both cases 
# It seems like empty() is somehow seeing the _GET array as set by PHP
# and the manually set _GET array as different when containing identical 
# contents!
#  It seems very odd to me!
var_dump($_GET);
if (!empty($_GET['search']['filter'])) 
   echo 'SEARCH FILTER PARAM WAS NOT PROVIDED!';

$_GET = array('search'=>1);
var_dump($_GET);
if (!empty($_GET['search']['filter'])) 
   echo 'SEARCH FILTER PARAM WAS NOT PROVIDED!';


Expected result:
----------------
SEARCH FILTER PARAM WAS PROVIDED if ?search[filter]=1 provided
No "SEARCH FILTER PARAM WAS PROVIDED" if ?search=1

Actual result:
--------------
SEARCH FILTER PARAM WAS PROVIDED if ?search=1 or ?search[filter]=1 provided


------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=55650&edit=1

Reply via email to