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

Форум для тех кто начинает осваивать язык php.
Аватара пользователя
Slash
Администратор
Сообщения: 2031
Поблагодарили: 62 раза

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

Сообщение Slash » Ср фев 12, 2014 2:53 pm

Здравствуйте.
В этом посте я расскажу как сделать самый простой калькулятор на 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;  #Выводим результат на экран     

Вот и весь скрипт самого простого калькулятора!
Чуть позже будем добавлять в наш калькулятор вычисление, умножение и деление.
Реклама
Аватара пользователя
Slash
Администратор
Сообщения: 2031
Поблагодарили: 62 раза

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

Сообщение Slash » Пт фев 14, 2014 8:48 pm

Как и обещал рассказать, как к нашему самому простому калькулятору, который только прибавляет добавить возможность отнимать, умножать и делить. Использовать будем код с первого поста. И так добавляем выбор из двух задач: прибавить и отнять, для этого в нашу форму калькулятора, после:

Код: Выделить всё

 <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;  #Выводим результат на экран     

Теперь калькулятор умеет прибавлять, отнимать, умножать и делить два числа.
Аватара пользователя
Slash
Администратор
Сообщения: 2031
Поблагодарили: 62 раза

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

Сообщение Slash » Сб фев 15, 2014 1:19 pm

На данный момент задачу можно не выбрать, просто нажать кнопку Решить и условие будет сравнивать знак, которого нет. Не найдя подходящего знака, условие выводит то, что содержит в себе 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;     #Выводим результат на экран            
Аватара пользователя
Slash
Администратор
Сообщения: 2031
Поблагодарили: 62 раза

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

Сообщение Slash » Вс фев 16, 2014 12:36 pm

При открытии нашего калькулятора, он сразу пытается решить задачу, то есть срабатывает условие и выдает сообщение из первого 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;          #Выводим результат на экран      

Теперь пока кнопка не будет нажата, калькулятор ни чего делать не будет.
Аватара пользователя
Slash
Администратор
Сообщения: 2031
Поблагодарили: 62 раза

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

Сообщение Slash » Пн фев 17, 2014 11:29 am

Если в поля нашего калькулятора вставить вместо цифр буквы, то они будут считаться, как ноль (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 = 'В поле можно вставить только цифры.';
    }

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

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

Сообщение Slash » Вт фев 18, 2014 5:01 pm

Хочу предложить еще один вариант выбора задачи с цифрами. Этот вариант с ниспадающим меню, занимает чуть меньше места на странице. Для установки ниспадающего выбора задачи, просто замените 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>

Вернуться в «PHP»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость