[PHP-DEV] Bug #11962 Updated: eval() doesn't handle multi-dimentional arrays.

2001-07-09 Thread jeroen

ID: 11962
Updated by: jeroen
Reported By: [EMAIL PROTECTED]
Old Summary: eval() doesn't handle multi-dimentional arrays.
Old Status: Open
Status: Bogus
Bug Type: Scripting Engine problem
Operating System: RedHat 6.2
PHP Version: 4.0.6
New Comment:

Your string equals 


'echo $GLOBALS[page][title];', and RTFM why that doesn't work.

Previous Comments:


[2001-07-08 20:00:57] [EMAIL PROTECTED]

It appears that eval() does not handle mutli-dimentional arrays properly e.g.

$page[title] = 'Page';
$test = '$page[title]';

If I do:

eval( 'echo '.$test.';' );

I get:

Page

as the output, however if I change $test to:

$test = '$GLOBALS[page][title]';

then do:

eval( 'echo '.$test.';' );

I get:

Array[title]

as my output.

My best guess for the reason this is happening is that when eval() does a lookup for a 
variable in the symbol table it is going from top to bottom and stops on the first 
match, no matter how complete - From this I am assuming that the symbol table would be 
built as follows:

$GLOBALS
$GLOBALS[page]
$GLOBALS[page][title]

so if eval() searched from the top then it would find a partial match against 
$GLOBALS[page] which is what I think it is doing.

A better example:

$page[title] = 'Hello';

$string = '$page[title]';
eval( 'echo '.$string.';' );

echo br\n;

$string = '$GLOBALS[page][title]';
eval( 'echo '.$string.';' );


I hope I make sense to you, if not then please let me know and I will try and be 
clearer.





ATTENTION! Do NOT reply to this email!
To reply, use the web interface found at http://bugs.php.net/?id=11962edit=1


-- 
PHP Development Mailing List http://www.php.net/
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]




[PHP-DEV] Bug #11962 Updated: eval() doesn't handle multi-dimentional arrays.

2001-07-09 Thread derick

ID: 11962
Updated by: derick
Reported By: [EMAIL PROTECTED]
Old Summary: eval() doesn't handle multi-dimentional arrays.
Status: Bogus
Bug Type: Scripting Engine problem
Operating System: RedHat 6.2
PHP Version: 4.0.6
New Comment:

Because the parser ain't smart enough, try echo $GLOBALS['page']['id']; or echo 
{$GLOBALS['page']['id']}; (the first one is faster).

Derick

Previous Comments:


[2001-07-09 07:08:59] [EMAIL PROTECTED]

Your string equals 


'echo $GLOBALS[page][title];', and RTFM why that doesn't work.



[2001-07-08 20:00:57] [EMAIL PROTECTED]

It appears that eval() does not handle mutli-dimentional arrays properly e.g.

$page[title] = 'Page';
$test = '$page[title]';

If I do:

eval( 'echo '.$test.';' );

I get:

Page

as the output, however if I change $test to:

$test = '$GLOBALS[page][title]';

then do:

eval( 'echo '.$test.';' );

I get:

Array[title]

as my output.

My best guess for the reason this is happening is that when eval() does a lookup for a 
variable in the symbol table it is going from top to bottom and stops on the first 
match, no matter how complete - From this I am assuming that the symbol table would be 
built as follows:

$GLOBALS
$GLOBALS[page]
$GLOBALS[page][title]

so if eval() searched from the top then it would find a partial match against 
$GLOBALS[page] which is what I think it is doing.

A better example:

$page[title] = 'Hello';

$string = '$page[title]';
eval( 'echo '.$string.';' );

echo br\n;

$string = '$GLOBALS[page][title]';
eval( 'echo '.$string.';' );


I hope I make sense to you, if not then please let me know and I will try and be 
clearer.





ATTENTION! Do NOT reply to this email!
To reply, use the web interface found at http://bugs.php.net/?id=11962edit=1


-- 
PHP Development Mailing List http://www.php.net/
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]