LINUX.ORG.RU
ФорумTalks

[PHP] Скажи что не так 2


0

1

Сделать простой калькулятор на четыре арифметических действия. Пользователь водит в строку арифметическое выражение и получает ответ после нажатия на кнопку Calculate. Например: 4+5 или 56-34.

GPL 2+

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
 <title>Simple Calculator</title>
 <script type="text/javascript" src="jquery-1.6.4.js"></script>
 <script type="text/javascript">
       $(document).ready(function() {
        $('#target').submit(function() {
         $.ajax({
             type: "POST",
                 url: 'calc.php',
             data: "send="+encodeURIComponent($('#filed').val()),
             complete: function(data){                    
                     $('#span1').text(data.responseText);
                 }
               });  
         return false;
        });
       });  
 </script>
</head>
<body>
 <p>
   <span>Input simple math expression ex. 5+6 and press Calculation</span>
   <br/>
 </p>
   <form id="target" method="post" action="">
   <p>
     <input id="filed" type="text" name="input_field" />
     <input type="submit" name="submit" value="Calculation" />
   </p>
   </form>
 <p>
   <span id="span1"></span>
 </p>
</body>
</html>

Что не так? Где бардак?

P.S это и другие поделки опубликованы тут: http://code.google.com/p/php-java-test-tasks/source/browse/trunk/calc

★★★★★

if (preg_match("/^[\s]?[0-9]+[\s]?(\*|\+|\-|\/)[\s]?[0-9]+[\s]?$/", $_POST['send'])) { 
 // в выражении разрешим поставить по одному пробелу с каждой стороны.

         preg_match("/\*|\+|\-|\//", $_POST['send'], $matches);
         $return_vals = preg_split("/\*|\+|\-|\//", $_POST['send']);

         $return_vals[0] = trim($return_vals[0]); // уберем пробелы если таковые имеются на таб^Wесть в строке.
         $return_vals[1] = trim($return_vals[1]);

         // что там у нас за арифметический знак?
         switch ($matches[0]) {
         case '+':
             echo $return_vals[0] + $return_vals[1];
             break;
         case '-':
             echo $return_vals[0] - $return_vals[1];
             break;
         case '*':
             echo $return_vals[0] * $return_vals[1];
             break;
         case '/':
             echo $return_vals[0] / $return_vals[1];
             break;
         }

 }
 else 
 {
         echo 'bad string'; // очень плохая строка, возможно пытаются подсунуть какую-нибудь гадость...
 }
?>
sniper21 ★★★★★ ()

Что не так? Где бардак?

В PHP. Вот прямо в js и надо было это делать.

iBliss ()

Что хотел-то? PHP - нормальный язык программирования.

VirRaa ★★★ ()

Что не так? Где бардак?

Зависит прежде всего от того, какое в будущем возможно развитие «калькулятора». Первым ограничением этого развития является неотделимость разбора выражения от его исполнения.

anonymfus ★★★★ ()

Даже для того, что бы добавить новую операцию, тебе придётся изменить код минимум в четырёх местах.

anonymfus ★★★★ ()
Ответ на: комментарий от sniper21

А по самому PHP коду претензии есть?

Ну разве что заменить switch-case на один eval()

iBliss ()
Ответ на: комментарий от anonymfus

Даже для того, что бы добавить новую операцию, тебе придётся изменить код минимум в четырёх местах.

А как этого можно избежать к примеру?

Что хотел-то? PHP - нормальный язык программирования.

Хотел чтобы мне подсказали, где я делаю явные ляпы.

Первым ограничением этого развития является неотделимость разбора выражения от его исполнения.

Как отделить одно от другого?

sniper21 ★★★★★ ()

Вообще я обычно такие калькуляторы в школе делал преобразованием в обратную польскую нотацию и последующим последовательным вычислением с помощью стека.

Tark ★★ ()

Что не так? Где бардак?

В твоей голове. Для начала Pastebin осиль какой-нибудь.

flareguner ()
Ответ на: комментарий от Tark

Ну это не совсем такие калькуляторы правда, это в процессе написания интерпретатора дело было.

Tark ★★ ()

Скажи что не так

Калькулятор на js пишется.

shahid ★★★★★ ()
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

xhtml для слабаков. Слава html5!

Breton ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.