Калькулятор на PHP

PHP
В этом посте я расскажу как сделать самый простой калькулятор на PHP, этот калькулятор будет только прибавлять два числа, ни чего другого он делать не будет. Так же не будет всяких проверок. Все проверки и задачи с вычитанием, умножением и деление мы добавим позже. А сейчас пишем форму нашего самого простого калькулятора:
<form action="" method="post" />
 <input type="text" name="a" />
 <input type="text" name="b" />
<input type="submit" name="submit" value="Решить" /> 
</form>

Форма имеет два поля для ввода чисел и кнопку Решить. Все выводится в одну строчку, если Вам надо, что бы вся форма выходила в столбик, добавти тег <br />, после каждого поля.
Переходим к php стрипту калькулятора:
$a = $_POST['a'];             #Получаем первое слагаемое 
$b = $_POST['b'];             #Получаем второе слагаемое

$result = $a + $b;            #Прибавляем оба числа и результат записываем в переменную
echo 'Результат: '. $result;  #Выводим результат на экран

Вот и весь скрипт самого простого калькулятора!
Чуть позже будем добавлять в наш калькулятор вычисление, умножение и деление.
Как и обещал рассказать, как к нашему самому простому калькулятору, который только прибавляет добавить возможность отнимать, умножать и делить. Использовать будем код с первого поста. И так добавляем выбор из двух задач: прибавить и отнять, для этого в нашу форму калькулятора, после:
 <input type="text" name="b" />

добавляем:
 <input type="radio" name="task" value="+" />Прибавить 
 <input type="radio" name="task" value="-" />Отнять

Эти две строчки HTML кода и будут выбором между задачами сложения и вычитания. Добавив выбор, у нас появилась новая переменная $task, которая также передается через глобальный массив POST, а значит надо принять ее в нашем скрипте. После:
$b = $_POST['b'];             #Получаем второе слагаемое

добавит:
$task = $_POST['task'];       #Получаем задачу

Теперь переходим к решению задачи, где сначала нам потребуется ее найти, а искать ее мы будем условием. Эту строчку:
$result = $a + $b;            #Прибавляем оба числа и результат записываем в переменную 

меняем на:
if ($task == '+') {           #Если задача стоит прибавить
    $result = $a + $b;
}
else {                        #Если задача стоит отнять
    $result = $a - $b;
}

Теперь мы можем нашим калькулятором сложить или отнять. Но этого мало, калькулятор не умножает и не делит, сейчас исправим!
Значит после:
 <input type="radio" name="task" value="-" />Отнять

добавляем еще две строчки:
 <input type="radio" name="task" value="*" />Умножить 
 <input type="radio" name="task" value="/" />Разделить

В скрипте, после:
if ($task == '+') {           #Если задача стоит прибавить
    $result = $a + $b;
}

вставляем:
elseif ($task == '*') {       #Если задача стоит умножить
    $result = $a * $b;
}
elseif ($task == '/') {       #Если задача стоит разделить
    $result = $a / $b;
}

В итоге должно получится так:
Форма калькулятора:
<form action="" method="post" />
 <input type="text" name="a" />
 <input type="text" name="b" />
 <input type="radio" name="task" value="+" />Прибавить
 <input type="radio" name="task" value="-" />Отнять
 <input type="radio" name="task" value="*" />Умножить 
 <input type="radio" name="task" value="/" />Разделить  
<input type="submit" name="submit" value="Решить" /> 
</form> 

и сам скрипт:
$a = $_POST['a'];             #Получаем первое слагаемое
$b = $_POST['b'];             #Получаем второе слагаемое
$task = $_POST['task'];       #Получаем задачу

if ($task == '+') {           #Если задача стоит прибавить
    $result = $a + $b;
}
elseif ($task == '*') {       #Если задача стоит умножить
    $result = $a * $b;
}
elseif ($task == '/') {       #Если задача стоит разделить
    $result = $a / $b;
}
else {                        #Если задача стоит отнять
    $result = $a - $b;
}
echo 'Результат: '. $result;  #Выводим результат на экран

Теперь калькулятор умеет прибавлять, отнимать, умножать и делить два числа.
На данный момент задачу можно не выбрать, просто нажать кнопку Решить и условие будет сравнивать знак, которого нет. Не найдя подходящего знака, условие выводит то, что содержит в себе else:
else {                        #Если задача стоит отнять
    $result = $a - $b; 
} 

в нашем примере задача в else отнять.
Я не хочу калькулятор, который без выбора задачи, выбирал задачу сам, по этому сделаем проверку - была ли выбрана задача или нет, если задача не была выбрана, выведем сообщение об ошибке. Говоря другими словами сделаем выбор задачи обязательным. Для проверки переменной на заполненность будем использовать функцию empty(). Делаем так: перед:
$a = $_POST['a'];

добавляем проверку переменной на пустоту:
if (empty($_POST['task'])) {  #Проверяем пуста или нет переменная
    $result = 'Задача не выбрана. Пожалуйста, выберите задачу.';
}
else {

После:
else {                        #Если задача стоит отнять
    $result = $a - $b;
}

добавить фигурную скобку }.
Теперь если задача не выбрана, пользователь получит сообщение: Задача не выбрана. Пожалуйста выберите задачу.. Уже лучше!

Теперь таким же образом давайте сделаем обязательными поля, добавим такую же проверку для ввода цифр. Значит после:
if (empty($_POST['task'])) {      #Проверяем пуста или нет переменная
    $result = 'Задача не выбрана. Пожалуйста, выберите задачу.';
}

добавляем:
elseif (empty($_POST['a'])) {     #Проверяем пуста или нет переменная
    $result = 'Вы не ввели число в первую форму. Пожалуйста, заполните все поля.';
}
elseif (empty($_POST['b'])) {     #Проверяем пуста или нет переменная
    $result = 'Вы не ввели число во вторую форму. Пожалуйста, заполните все поля.';
} 

Вот и всё! Теперь все поля и выбор задачи обязательны!

Итог нашей конструкции:
HTML код остался без изменения:
<form action="" method="post" />
 <input type="text" name="a" />
 <input type="text" name="b" />
 <input type="radio" name="task" value="+" />Прибавить
 <input type="radio" name="task" value="-" />Отнять
 <input type="radio" name="task" value="*" />Умножить 
 <input type="radio" name="task" value="/" />Разделить  
<input type="submit" name="submit" value="Решить" /> 
</form>

А вот php скрипт значительно изменился:
if (empty($_POST['task'])) {      #Проверяем пуста или нет переменная
    $result = 'Задача не выбрана. Пожалуйста выберите задачу.';
}
elseif (empty($_POST['a'])) {     #Проверяем пуста или нет переменная
    $result = 'Вы не ввели число в первую форму. Пожалуйста, заполните все поля.';
}
elseif (empty($_POST['b'])) {     #Проверяем пуста или нет переменная
    $result = 'Вы не ввели число во вторую форму. Пожалуйста, заполните все поля.';
}
else {
    $a = $_POST['a'];             #Получаем первое слагаемое
    $b = $_POST['b'];             #Получаем второе слагаемое
    $task = $_POST['task'];       #Получаем задачу

    if ($task == '+') {           #Если задача стоит прибавить
        $result = $a + $b;
    }
    elseif ($task == '*') {       #Если задача стоит умножить
        $result = $a * $b;
    }
    elseif ($task == '/') {       #Если задача стоит разделить
        $result = $a / $b;
    }
    else {                        #Если задача стоит отнять
        $result = $a - $b;
    }
}

echo 'Результат: '. $result;     #Выводим результат на экран
При открытии нашего калькулятора, он сразу пытается решить задачу, то есть срабатывает условие и выдает сообщение из первого if'а, в данном случаи это сообщение: Задача не выбрана. Пожалуйста выберите задачу.. Я думаю это не правильно, думаю будет лучше если калькулятор будет выполнять свою работу, только тогда, когда ему отдадут команды, то есть введут необходимые данные и нажмут кнопку Решить. И сейчас мы это исправим! В HTML форму мы не полезем, работать будем только с PHP скриптом, и то совсем чуть-чуть. Для проверки были ли нажата кнопка или нет, будем использовать функцию isset().
Значит, находим строчку:
if (empty($_POST['task'])) {      #Проверяем пуста или нет переменная 

и перед ней вставляем:
if (isset($_POST['submit'])) {        #Если кнопка была нажата

Находим:
        $result = $a - $b; 
    }
}

добавляем после фигурную скобку: }, в итоге получаем такой код (HTML форма осталась без изменений):
if (isset($_POST['submit'])) {        #Если кнопка была нажата
    if (empty($_POST['task'])) {      #Проверяем пуста или нет переменная
        $result = 'Задача не выбрана. Пожалуйста выберите задачу.';
    }
    elseif (empty($_POST['a'])) {     #Проверяем пуста или нет переменная
        $result = 'Вы не ввели число в первую форму. Пожалуйста, заполните все поля.';
    }
    elseif (empty($_POST['b'])) {     #Проверяем пуста или нет переменная
        $result = 'Вы не ввели число во вторую форму. Пожалуйста, заполните все поля.';
    }
    else {
        $a = $_POST['a'];             #Получаем первое слагаемое
        $b = $_POST['b'];             #Получаем второе слагаемое
        $task = $_POST['task'];       #Получаем задачу

        if ($task == '+') {           #Если задача стоит прибавить
            $result = $a + $b;
        }
        elseif ($task == '*') {       #Если задача стоит умножить
            $result = $a * $b;
        }
        elseif ($task == '/') {       #Если задача стоит разделить
            $result = $a / $b;
        }
        else {                        #Если задача стоит отнять
            $result = $a - $b;
        }
    }
}

echo 'Результат: '. $result;          #Выводим результат на экран

Теперь пока кнопка не будет нажата, калькулятор ни чего делать не будет.

Если в поля нашего калькулятора вставить вместо цифр буквы, то они будут считаться, как ноль (0), что не есть хорошо. На мой взгляд, лучше сообщить пользователю о том, что число было введено не корректно, что разрешено использовать только цифры от ноля (0) до девяти (9) и минус (-), для решения примеров с числами меньше ноля. Сейчас мы исправим этот недочет с буквами. Исправлять будем функцией preg_match(), чья задача проводить проверку на соответствие регулярному выражению.

И так провожу инструктаж: находим в нашем скрипте следующий код:
    elseif (empty($_POST['b'])) {     #Проверяем пуста или нет переменная
        $result = 'Вы не ввели число во вторую форму. Пожалуйста, заполните все поля.';
    } 

и после него вставляем:
    elseif (!preg_match("/^([0-9\-])+$/", $_POST['a'])) { #Проверяем на корректность данных задачи
        $result = 'В поле можно вставить только цифры.'; 
    }
    elseif (!preg_match("/^([0-9\-])+$/", $_POST['b'])) { #Проверяем на корректность данных задачи
        $result = 'В поле можно вставить только цифры.';
    }

Теперь при вводе любых символов, кроме цифр и минуса (-), пользователь получит сообщение: В поле можно вставить только цифры..

Хочу предложить еще один вариант выбора задачи с цифрами. Этот вариант с ниспадающим меню, занимает чуть меньше места на странице. Для установки ниспадающего выбора задачи, просто замените HTML форму на эту:
<form action="" method="post" />
 <input type="text" name="a" />
  <select name="task">
    <option value="+">Прибавить</option>
    <option value="-">Отнять</option>
    <option value="*">Умножить</option>
    <option value="/">Разделить</option> 
   </select>
  <input type="text" name="b" /> 
<input type="submit" name="submit" value="Решить" /> 
</form>