Wells-it.com - Web Hosting

little PHP help

You are viewing this site as a guest. Join our community to get your questions answered and share knowledge. Active members may advertise and ask for a website critique.

They have: 47 posts

Joined: Jun 2001

Hi all,
I need to combine two words to form a variable and echo it's value (defined by a constant) How can I do this in PHP? Heres the scenario:

<?
// I have a defined a constant

define("ECOSETUP", 10);

// I have a post value from a form which contains a value

$name=ECO

// I do something like this to combine the two

echo $name.'SETUP';

/*this gives me ECOSETUP as the output. What do I need to do to get 10 as my output using one line of code? I need to use the two words because I want to define differnt aspects of the same item ie SETUP, DEV,MONTHLY etc ie we will have ECOSETUP, ECODEV, ECOMONTHLY etc */
?>

Any ideas? I am sure it is pretty simple.
Thanks

?>

Renegade's picture
Moderator

He has: 2,944 posts

Joined: Oct 2002

Not too sure if this will work but, have your tried:

<?php
define
("ECOSETUP\", 10);
$name=ECO
echo $name . SETUP;
?>

The single quotes are parsed as litteral or something like that so putting the constant in single quotes will actually pass what's in the quotes rather than the constant itself.

Just a guess...

Cheng Eu Chew - Renegade
Download:
- Mozilla, Firefox
- Opera
This post may contain peanut traces

dk01's picture

He has: 517 posts

Joined: Mar 2002

http://php.benscom.com/manual/en/language.variables.variable.php#12841

Unfortunately its not possible and is the nature of constants. Add your variable to the $_GLOBALS array instead if you wish to be able to do this.

-Jim

Greg K's picture
Moderator

He has: 1,667 posts

Joined: Nov 2003

<?php
    define
("ECOSETUP\",10);
define(\"TMPSETUP\",20);
     
$name1 = \"ECO\";
$name2 = \"TMP\";
     
eval(\"\$val1 = \" . $name1 . \"SETUP;\");
$val2 = constant($name2 . \"SETUP\");
     
echo \"val1 = $val1 \n\";
echo \"val2 = $val2 \n\";
?>

Either one of those seems to work, the second method seems to use a function designed for this. I found the second method in the link that dk01 provided.

-Greg

PS. Don't forget to make sure you have checking in place to make sure it is only calling defined constants.

[This space intentionally left blank]

Cool Geek Supplies: www.ThinkGeek.com

dk01's picture

He has: 517 posts

Joined: Mar 2002

Greg K wrote:

<?php
    define
("ECOSETUP\",10);
define(\"TMPSETUP\",20);
     
$name1 = \"ECO\";
$name2 = \"TMP\";
     
eval(\"\$val1 = \" . $name1 . \"SETUP;\");
$val2 = constant($name2 . \"SETUP\");
     
echo \"val1 = $val1 \n\";
echo \"val2 = $val2 \n\";
?>

Either one of those seems to work, the second method seems to use a function designed for this. I found the second method in the link that dk01 provided.

-Greg

PS. Don't forget to make sure you have checking in place to make sure it is only calling defined constants.

Nice find!

dk01's picture

He has: 517 posts

Joined: Mar 2002

BTW the second is faster because it avoids using eval. Eval is notoriously bad for your code's speed. Especially if you intend on doing it many times. Instead use the constant() method.

They have: 47 posts

Joined: Jun 2001

Thanks all...very helpful. I have actually completed the code today...thanks to you. HAPPY NEW YEAR !! Cheers!

dk01's picture

He has: 517 posts

Joined: Mar 2002

*happy new years to you too!*

JeevesBond's picture
Moderator

He has: 3,711 posts

Joined: Jun 2002

dk01 wrote: Eval is notoriously bad for your code's speed. Especially if you intend on doing it many times. Instead use the constant() method.

I know this is off-topic, but vBulletin (the forum software we use) uses eval all the time, does constant() perform the same functionality (parse code in a variable)?

Could you substantiate that dk01? Do you know of someone who's tested the function, maybe you could provide links? Thanks.

a Padded Cell our articles site!

dk01's picture

He has: 517 posts

Joined: Mar 2002

I stand corrected. eval() in php is not inefficient but it is a security risk. There is debate over whether it should be used at all but most programmers agree that unless you are drawing the data from a database or trusted source then you should not use it. The reason is that it can execute arbitrary code. So for example if you have register globals on then this could be dangerous. So.. for some references. You mentioned vBulletin? Here is an exploit for that project caused by the fact that it uses eval:
http://www.osvdb.org/14047

Another few articles on the subject: http://www.sitepoint.com/blogs/2005/02/27/eval-is-dead-long-live-eval/
http://www.phpwact.org/security/functions/eval_functions?DokuWiki=064b51a8941c7b29c4e07fd16ce1...

I found this interesting because I know in javascript eval will actually make your code slower. (Try having several large eval's running in js, its notably slower)

JeevesBond's picture
Moderator

He has: 3,711 posts

Joined: Jun 2002

Ah, thanks for that dk01!

Luckily most of the eval stuff in vB is pulled from a database, but in that exploit it seems that a get variable is being eval'd ... Very dangerous, they're a bit silly to allow that to happen!

Haven't had to use eval in JavaScript yet, will make a note to avoid it like the plague. Smiling

a Padded Cell our articles site!