PHP математика - операторы - PullRequest
3 голосов
/ 01 декабря 2011

Итак, у меня есть простой сайт, который использует php для выполнения какой-то простой математики, например:

<form action="" method="POST">
<input type="text" name="first" />
<select name="method">
    <option>+</option>
    <option>_</option>
    <option>*</option>
    <option>/</option>
</select>
<input type="text" name="second" />
<input type="submit" value="Equals" />

Сайт позволяет пользователю вводить два числа и затем выбирать математический оператор.манипулировать ими.Так, например, при первом вводе пользователь может ввести число 3, выбрать оператор вычитания, ввести число 1 в следующем поле и отправить.Я обрабатываю информацию следующим образом:

if (isset($_POST['first']) && isset($_POST['second'])) {
   $first = $_POST['first'];
   $second = $_POST['second'];
   $method = $_POST['method'];
} 

Однако я хочу повторить результат математической задачи на веб-странице после отправки.Как бы я это сделал?Простое повторение всех переменных даст мне (в данном случае) «3-1» вместо фактического ответа, который будет «2».

Любая идея, как этого добиться?

Ответы [ 4 ]

6 голосов
/ 01 декабря 2011
if (isset($_POST['first']) && isset($_POST['second'])) {
    $first = $_POST['first'];
    $second = $_POST['second'];
    $method = $_POST['method'];
    switch($method)
    {
        case '+':
            $result = $first + $second;
            break;
        case '-':
            $result = $first - $second;
            break;
        case '*':
            $result = $first * $second;
            break;
        case '/':
            // check for division by 0 (wouldn't want to blow anything up)
            $result = $first / $second;
            break;
        default:
            $result = 'undefined operation';
            break;
    }
    printf("%.5f %s %.5f = %s", $first, $method, $second, $result);
}
2 голосов
/ 01 декабря 2011

Вам нужно использовать оператор switch в вашем методе $ следующим образом:

switch($method){

    case '+':
        $result = $first + $second;
        break;

    case '-':
        $result = $first - $second;
        break;

    case '*':
        $result = $first * $second;
        break;

    case '/':
        $result = $first / $second;
        break;

}
var_dump($result);

В качестве альтернативы, вы также можете ПРОВЕРИТЬ операцию:

$code = '$result = '.$first.$method.$second.';';
exec($code);
var_dump($result);

Обратите внимание, что вы этого не делаетепроверьте ваш ввод, это может привести к проблемам с безопасностью:

if(!isset($_POST['first']) || !is_numeric($_POST['first'])){ exit('Bad number in #1'); }

Сделайте то же самое для других входных данных, таких как first, second и method:)

2 голосов
/ 01 декабря 2011

вы могли бы использовать корпус переключателя.

switch($method){

case "+":
    $result = $first + $second;
    break;
case "-":
    $result = $first - $second;
    break;
case "*":
    $result = $first * $second;
    break;
case "/":
    $result = $first/$second;
    break;
}

echo $result;
1 голос
/ 01 декабря 2011

Опасно просто оценивать выражение, поскольку оно может содержать неприятности, и вы никогда не должны доверять пользовательскому вводу (даже если вы используете тег select, кто-то может ввести что-либо).

Либо сначала очистите входные данные, затем оцените их (например, проверьте, что два числа на самом деле являются числами, а метод является только одним из допустимого списка), или используйте оператор switch для переменной метода и запишите каждый метод в PHP.

В качестве альтернативы вы можете посмотреть на скриптовые языки внутри PHP, такие как LUA.

Надеюсь, что поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...