За последние 24 часа нас посетили 24279 программистов и 1717 роботов. Сейчас ищут 2025 программистов ...

Калькулятор с одним полем

Тема в разделе "PHP для новичков", создана пользователем Insonicum, 31 июл 2009.

  1. Insonicum

    Insonicum Активный пользователь

    С нами с:
    6 июл 2009
    Сообщения:
    12
    Симпатии:
    0
    Хочу написать калькулятор с одним текстовым полем, так
    как наличие двух текстовых полей и кнопки не должно вызывать
    трудностей у начинающего программиста. А вот с одним уже посложнее.

    Предварительная логика: записывать вводимое число в форму - в файл,
    потом обновлять форму (тут проблемка), вводить второе число в форму,
    и далее в зависимости от нажатой кнопки ("+", "-", ":", "х" )
    читать число из файла и складывать или вычитать в зависимости от нажатой кнопки
    с вторым числом формы и выводить результат.

    Второй вариант: значения переменных в БД. но для калькулятора это имхо слишком круто)

    Третий вариант: использовать сессии, и хранить в них переменные.

    Хочется разобрать пока третий вариант, так как он самый простой. Поможете?


    тут какие мысли: сделать три файла: 1.php,2.php, 3.php в третьем выдавать результат,
    а значения переменных хранить в сессии. только вот как передать в другой файл, то какая
    кнопка была нажата. ...что-то тут туплю.

    и ещё один момент. лучше сделать калькулятор одним файлом, для этого нам понадобится $_SERVER['PHP_SELF']
    и скрытые поля. вот тут опять таки нужна помощь. котелок плохо варит. как всё это организовать.


    для начала давайте попробуем сделать с помощью трёх файлов.
     
  2. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Порвать мне сраку, это что за бредятина такая с калькулятор, который промежуточные рассчеты в файл пишет? О_о
    А калькулятор с рассчетом матриц как делать будете?
    Писать каждый элемент массива в файлы? :lol:

    Пишите уж промежуточный результат в БД на другом сервере, тогда звание самого идиотского калькулятора точно заслужите =)
     
  3. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    все делается на стороне клиента JS без участия PHP
    =)
     
  4. Insonicum

    Insonicum Активный пользователь

    С нами с:
    6 июл 2009
    Сообщения:
    12
    Симпатии:
    0
    Ок. Помогите написать калькулятор с одним текстовым полем. и пятью кнопками. где четыре кнопки - это основные действия, а пятая кнопка "=". Буду очень благодарен!
     
  5. Insonicum

    Insonicum Активный пользователь

    С нами с:
    6 июл 2009
    Сообщения:
    12
    Симпатии:
    0
    в php я хоть знаю что-то, а в js вообще ничего)
    хотелось бы попробовать на php.

    подскажите как одним файлом всё сделать с помщью $_SERVER[]
     
  6. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Insonicum
    Аватарку на фото смените или удалите.
     
  7. Insonicum

    Insonicum Активный пользователь

    С нами с:
    6 июл 2009
    Сообщения:
    12
    Симпатии:
    0
    почему, когда прописываешь в экшне $_SERVER['PHP_SELF'] то когда вводишь enter, результат: Not Found?
     
  8. Insonicum

    Insonicum Активный пользователь

    С нами с:
    6 июл 2009
    Сообщения:
    12
    Симпатии:
    0
    вопрос при работе с формой основной. как не делать несколько файлов, а обойтись одним с помощью переменной сервер или header?
     
  9. php-voin

    php-voin Активный пользователь

    С нами с:
    5 дек 2008
    Сообщения:
    10
    Симпатии:
    0
    Адрес:
    Юг России
  10. Insonicum

    Insonicum Активный пользователь

    С нами с:
    6 июл 2009
    Сообщения:
    12
    Симпатии:
    0
    Да не надо мне Js, мне объясните простой механизм работы $_SERVER[''PHP_SELF].
    Гуглю..........ищу........пока не понимаю почему после нажатия на кнопку или enter моя страница не найдена....

    надо путь полностью прописывать7 что-то вот этот момент пока важен.
     
  11. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Чтобы получше понять, что в себе хранит $_SERVER['PHP_SELF'] и остальные элементы массива $_SERVER:
    PHP:
    1. <pre>
    2. <?php
    3.    print_r($_SERVER);
    4. ?>
    5. </pre>
     
  12. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Да ёпт, примитивнейший калькулятор на РНР можно написать за две минуты.
    Вот, например, простейший, который я написал, пока хавал мороженое.
    Кстати, задача была в том, чтобы писать всё в одном текстовом поле.
    Можно написать парсер, разбирающий выражение и с помощью eval считающий.
    Мне лично лень, написал пока простой, ибо и так сойдет.

    PHP:
    1. <form action="?do=calc" method="post">
    2.     <input type="text" name="data" />
    3.     <input type="submit" value="Рассчитать" />
    4. </form>
    5.  
    6. <?php
    7.  
    8. if(isset($_POST['data'])) {
    9.     if(preg_match('/([\d]+)\s*(\+|-|:|x){1}\s*([\d]+)/si', trim($_POST['data']), $nums)) {
    10.         switch($nums[2]) {
    11.             case '+': {
    12.                 echo "$nums[1] + $nums[3] = ".$nums[1] + $nums[3];
    13.             } break;
    14.             case '-': {
    15.                 echo "$nums[1] - $nums[3] = ".$nums[1] - $nums[3];
    16.             } break;
    17.             case ':': {
    18.                 echo "$nums[1] : $nums[3] = ".$nums[1] / $nums[3];
    19.             } break;
    20.             case 'x': {
    21.                 echo "$nums[1] x $nums[3] = ".$nums[1] * $nums[3];
    22.             } break;
    23.         }
    24.     } else {
    25.         echo "Неверный формат данных";
    26.     }
    27. }
    28.  
    29. ?>
    Если делать вообще нех, то это тоже калькулятор в одну строчку:
    PHP:
    1. <?php eval('echo '.$_POST['data'].';'); ?>
    Естественно, такого дерьма писать не надо даже для примеров =)
     
  13. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    А вот вообще практически полноценный калькулятop, считающий синусы даже =)

    PHP:
    1. Например: cos(2.5) * (2 + (3 + 5) * 5) - M_PI*tan(24)<br><br>
    2. <form action="?do=calc" method="post">
    3.     Пример: <input type="text" name="data" />
    4.     <input type="submit" value="Рассчитать" />
    5. </form>
    6.  
    7. <?php
    8.  
    9. /**
    10.  * Собственно сам калькулятор
    11.  */
    12. if(isset($_POST['data']) && preg_match('#^[a-z\d\s*/+.()_-]+$#si', $_POST['data'])) {
    13.     echo $_POST['data'] . ' = ' . eval('return '.$_POST['data'].';');
    14. } else echo "Не понимаю примера";
    15.  
    16. ?>
    cos(3.1) * M_PI = -3.1388756480419

    Естественно, безопасность под вопросом, хотя оператор окончания инструкции (;) вводить нельзя.
     
  14. Insonicum

    Insonicum Активный пользователь

    С нами с:
    6 июл 2009
    Сообщения:
    12
    Симпатии:
    0
    Спасибо. а можно пояснить код начиная с появления переменной $nums. Откуда она взялась?
    switch($nums[2]) - означает что мы можем сложить только два числа в форме?
     
  15. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Я, вообще-то, не заменяю на форуме документацию, а каким-либо косвенным образом помогаю лучше её понять или дополнить, при этом сам повышая свою квалификацию.
    Будьте добры сначала прочитать документацию по использованным в примере функциям и уже потом задавать вопросы подобного вида.

    Спасибо.

    Нет.
     
  16. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2