尝试使用$ _request ['operation']操作两个数字

时间:2014-07-18 07:02:54

标签: php

我正在尝试获取$result的值,但它会给2+4,因为我会给出值$first=2$second=4$operation= +

<?php
$first     = $_REQUEST['first'];
$second    = $_REQUEST['second'];
$operation = $_REQUEST['operation'];
echo $result = "$first+$operation+$second";
?>

<form id="dpk-form" action="" method="post">
    <label>First No:</label>  <input name="first" type="text" /><br /><br />
    <label>Second No:</label> <input name="second" type="text" /><br /><br />
    <label>Operation:</label> <input name="operation" type="text" /><br /><br />
    <input type="submit" value="Submit" /><br /><br />
    <label>Result:</label> <input name="result" type="text" /><br />
</form>

4 个答案:

答案 0 :(得分:3)

使用运算符作为变量没有简单的方法。您可以使用eval(),但这不是最佳做法。

我会这样做:

switch  ($_REQUEST['operation']) {
    case '+':
        $result = $first + $second;
        break;
    case '-':
        $result = $first - $second;
        break;        
}

echo $result;

当然你应该添加到你想要使用的switch个其他运算符,当然如果你想使用除法,你需要考虑除以0。

答案 1 :(得分:0)

$result = eval($first.$operation.$second);

但是,在这种情况下调用eval是一种非常糟糕且通常很危险的做法。

答案 2 :(得分:0)

无评估路线,但您需要预定义您允许的操作:

switch ($operation) {
    case '+':
        echo $first + $second;
        break;
    case '-':
        echo $first - $second;
        break;
    case '/':
        echo $first / $second;
        break;
    case '*':
        echo $first * $second;
        break;
    case '%':
        echo $first % $second;
        break;
}

答案 3 :(得分:0)

这不会起作用,因为.是一个字符串连接运算符,因此每个表达式都会尝试转换为字符串。

您可以在此处使用eval,但I would not recommend the usage

你可以在这里使用switch语句。

switch($_REQUEST['operation'])
{
    case '+':
        $result = $_REQUEST['first'] + $_REQUEST['second'];
        break;
    case '-':
        $result = $_REQUEST['first'] - $_REQUEST['second'];
        break;

    // ...
}

但是,这带来了高维护成本的缺点,并且不是很干。 如果你更高级,你可能想要使用strategy pattern