Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.php > #3713
| From | "Graham" <graham.stow@stowassocs.co.uk> |
|---|---|
| Newsgroups | comp.lang.php |
| References | <A8OdnXgegKYUmyXTnZ2dnUVZ7ridnZ2d@bt.com> <4eb81acf$0$28518$a8266bb1@newsreader.readnews.com> <f_qdnUg0B6m_diXTnZ2dnUVZ8qudnZ2d@bt.com> <4eb8eed0$0$6947$e4fe514c@news2.news.xs4all.nl> |
| Subject | Re: PHP Newbie can't evaluate numerical string as number |
| Date | 2011-11-08 09:35 +0000 |
| Message-ID | <O5SdndpZ6bFXaiXTnZ2dnUVZ7ridnZ2d@bt.com> (permalink) |
Yes it works! (although I admit I'm not entirely sure why). Many thanks! And
apologies to Denis for having doubted him.
Thanks also for the warning on using formula in this way. The formula in
question (a bit more complex than A-B) is actually embodied in UK Govenment
legislation, so I won't be letting users mess with it.
R's
Graham Stow
"Erwin Moller"
<Since_humans_read_this_I_am_spammed_too_much@spamyourself.com> wrote in
message news:4eb8eed0$0$6947$e4fe514c@news2.news.xs4all.nl...
> On 11/8/2011 9:41 AM, Graham wrote:
>> Unfortunately not. Here you introduce the formula into the main script,
>> whereas I need to introduce it in a separate script (or import it from a
>> database) to save me having to amend it countless times if it ever
>> changes.
>> Hence me using str_replace to change !big_number to $big_number. Although
>> this worked, I was still left with a 'numerical string' which I couldn't
>> evaluate. So I guess my question is how do you evaluate a numerical
>> string
>> such as '30000 - 3000'?
>
> I think Dennis showed that trick: use eval().
> Personally I think it is ugly, but it works.
>
> example:
> $myNumericString = "30000 - 300";
> $myEval = '$myResult = '.$myNumericString.';';
> eval ($myEval);
> echo $myResult;
>
> (not tested)
>
> A warning:
> I once had to develop a webside where people needed to enter formula's
> that worked on data (a bit like MS Excel, but serverside).
> For example:
> "SUM(**somefield**) / COUNT(**somefield**)"
> They needed to be stored in a database too, and the number of possible
> manipulations (like SUM and COUNT) were limited.
> If I were to eval() that string blindly, I would open up a the side to a
> lot of missery (naughty commands, eg file_put_contents()), so I ended up
> writing a parser that took the formula apart, and if it used anything
> outside my small list of allowed manipulations, I refused the formula.
>
> I am not sure where your formula's come from, but if they are entered by
> users, take some care before using eval().
>
>
> Regards,
> Erwin Moller
>
>
>>
>> "Denis McMahon"<denismfmcmahon@gmail.com> wrote in message
>> news:4eb81acf$0$28518$a8266bb1@newsreader.readnews.com...
>>> On Mon, 07 Nov 2011 16:25:42 +0000, Graham wrote:
>>>
>>>> I'm a Perl veteran (well almost!) but a PHP newbie. I've got a simple
>>>> subtraction formula in 'vars.php' as follows:
>>>>
>>>> <?php
>>>> $formula = "!big_number - !small_number"; ?>
>>>>
>>>> I then include it in 'test.php' along with a few variables, do a bit of
>>>> string replacement, run eval on it, then print it
>>>>
>>>> <?PHP
>>>> include 'vars.php';
>>>> $big_number = 30000;
>>>> $small_number = 3000;
>>>> $formula = str_replace("!", "$", $formula); eval("\$formula =
>>>> \"$formula\";");
>>>> //$formula = intval($formula);
>>>> //settype($formula, "integer");
>>>> print ("formula = $formula\n");
>>>> ?>
>>>>
>>>> The above gives me...'formula = 30000 - 3000' when of course what I
>>>> want
>>>> is...'formula = 27000'
>>>>
>>>> A few of the many things I've tried are commented out. Please put me
>>>> out
>>>> of my misery someone!
>>>
>>> Does the following working example help?
>>>
>>> <?php
>>>
>>> $big_number = 50000;
>>> $small_number = 5000;
>>>
>>> $formula1 = "\$result1 = \$big_number - \$small_number;";
>>> $formula2 = "return(\$big_number - \$small_number);";
>>>
>>> echo "\$formula1 = '{$formula1}'\n";
>>> echo "\$formula2 = '{$formula2}'\n";
>>>
>>> eval($formula1);
>>> $result2 = eval($formula2);
>>>
>>> echo "\$result1 = {$result1}\n";
>>> echo "\$result2 = {$result2}\n";
>>>
>>> ?>
>>>
>>> Rgds
>>>
>>> Denis McMahon
>>
>>
>
>
> --
> "That which can be asserted without evidence, can be dismissed without
> evidence."
> -- Christopher Hitchens
Back to comp.lang.php | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
PHP Newbie can't evaluate numerical string as number "Graham" <graham.stow@stowassocs.co.uk> - 2011-11-07 16:25 +0000
Re: PHP Newbie can't evaluate numerical string as number The Natural Philosopher <tnp@invalid.invalid> - 2011-11-07 16:56 +0000
Re: PHP Newbie can't evaluate numerical string as number Denis McMahon <denismfmcmahon@gmail.com> - 2011-11-07 17:52 +0000
Re: PHP Newbie can't evaluate numerical string as number "Graham" <graham.stow@stowassocs.co.uk> - 2011-11-08 08:41 +0000
Re: PHP Newbie can't evaluate numerical string as number Erwin Moller <Since_humans_read_this_I_am_spammed_too_much@spamyourself.com> - 2011-11-08 09:56 +0100
Re: PHP Newbie can't evaluate numerical string as number "Graham" <graham.stow@stowassocs.co.uk> - 2011-11-08 09:35 +0000
Re: PHP Newbie can't evaluate numerical string as number Denis McMahon <denismfmcmahon@gmail.com> - 2011-11-08 09:57 +0000
Re: PHP Newbie can't evaluate numerical string as number Tim Streater <timstreater@greenbee.net> - 2011-11-08 10:08 +0000
Re: PHP Newbie can't evaluate numerical string as number Denis McMahon <denismfmcmahon@gmail.com> - 2011-11-08 17:49 +0000
Re: PHP Newbie can't evaluate numerical string as number "Graham" <graham.stow@stowassocs.co.uk> - 2011-11-08 10:27 +0000
Re: PHP Newbie can't evaluate numerical string as number Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2011-11-07 23:49 +0100
Re: PHP Newbie can't evaluate numerical string as number Jonathan Stein <jstein@image.dk> - 2011-11-08 11:19 +0100
csiph-web