0

is it possible??

$a= 5;
$b =10;
$c= "+"
$d= $a.$b.$c;

How can I do dynamic calculation like this. I know this code will not work. But
Just want to use opereater directly input through form. How can I prevent opreater to converting into string.

3
Contributors
3
Replies
4
Views
5 Years
Discussion Span
Last Post by diafol
2

As Pritaeas states, eval() should be evil() !! You must escape and lock down ALL input if you're going to use eval(). ANother way to do this would be to work through a conditional:

function opClick($c, $a=0, $b=0){
    $allowed = array("+","-","/","*");
    $err = array(
        "div0" => "You can't divide by zero", 
        "wrongOp" => "This operator does not exist, please use +, -, / or *"
    );
    if(in_array($c,$allowed)){
        $a = floatval($a);
        $b = floatval($b);

        switch $c{
            case '+':
                $ans = $a + $b; 
                break;
            case '-':
                $ans = $a - $b; 
                break;
            case '/':
                $ans = ($b !== 0) ? $a / $b : $err['div0']; 
                break;
            case '*':
                $ans = $a * $b; 
                break;
        }
    }else{
        $ans = $err['wrongOp'];
    }
    return $ans;
}    


$a = 34;
$b = 2;
$c = '+';

echo "$a $c $b = " . opClick($c,$a,$b);

Just something off the top of my head. Not brilliant, but at least a option to eval(). In fact you could use eval() instead of the big switch:

function opClick($c, $a=0, $b=0){
    $allowed = array("+","-","/","*");
    $err = array(
        "div0" => "You can't divide by zero", 
        "wrongOp" => "This operator does not exist, please use +, -, / or *"
    );
    if(in_array($c,$allowed)){
        $a = floatval($a);
        $b = floatval($b);
        $ans = ($c == '/' && $b === 0) ? $err['div0'] : eval("$a $c $b");
    }else{
        $ans = $err['wrongOp'];
    }
    return $ans;
}    

$a = 34;
$b = 2;
$c = '+';

echo "$a $c $b = " . opClick($c,$a,$b);

However, I would use javascript for this type of simple calculation and if need be store the result in a form field (hidden or visible) which can then be sent to php (Ajax or normal method) if you need to use it in server-side process like DB manipulation.

Edited by diafol

Votes + Comments
very nice answer
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.