Очень простой PHP калькулятор: не могу понять, что я делаю неправильно

1

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

Здесь HTML:

<head>
<meta charset="utf-8">
<title>A (Seriously) Simple Calculator</title>
<link rel="stylesheet" type="text/css" href="./calc_css.css">
</head>
<body>
<form method="post" attribute="post" action="calc1.php">

<p>First Value:<br/>
<input type="number" id="first" name="first" step="0.0000000001"></p>
<p>Second Value:<br/>
<input type="number" id="second" name="second" step="0.0000000001"></p>

<p>+<input type="radio" name="operation" id="add" value="add" checked="true"></p><br/>
<p>-<input type="radio" name="operation" id="subtract" value="subtract"></p><br/>
<p>X<input type="radio" name="operation" id="multiply" value="multiply"></p><br/>
<p>/<input type="radio" name="operation" id="divide" value="divide"></p><br/>

<p></p>
<button type="submit" name="answer" id="answer" value="answer">Calculate</button>
</form>
</body>
</html>

И здесь мой PHP:

<html>

<head>
<meta charset="utf-8">
<title>Answer</title>
</head>

<body>
<p>The answer is: 

<?php
$first = floatval($_POST['first']);
$second = floatval($_POST['second']);

if($_POST['operation'] == 'add') {
echo $first + $second;
}
else if($_POST['operation'] == 'subtract') {
echo $first - $second;
}
else if($_POST['operation'] == 'multiply') {
echo $first * $second;
}
else($_POST['operation'] == 'divide') {
echo $first / $second;
}

?>

</p> 
</body>
</html>

Я не думаю, что это связано с моим шагом ввода или типом, и я пробовал все, что я могу придумать, в моем PHP файле. Тем не менее, я очень зелёный новичок. Любая помощь будет принята с благодарностью.

  • 1
    Вы размещаете этот php-файл на сервере или пытаетесь получить к нему локальный доступ (например, из file:// url)? PHP может быть запущен только через сервер. Если нет, потребуется больше подробностей , а не только «мой код не работает» - вы получаете какие-либо сообщения об ошибках?
  • 1
    Пожалуйста, смотрите: meta.stackexchange.com/q/5234
Теги:
calculator

2 ответа

5
Лучший ответ

Проблема заключается в том, что ваш последний условный оператор является else вместо другого else if.

else($_POST['operation'] == 'divide') {
echo $first / $second;
}

Имея отчет об ошибках, установленный для catch и display, вы бы бросили вам что-то вроде этого:

Ошибка анализа: синтаксическая ошибка, неожиданный '{' в /var/usr/you/folder/file.php в строке 24

Измените его на:

else if($_POST['operation'] == 'divide') {
echo $first / $second;
}

Добавьте отчет об ошибках в начало файла (ов), который поможет найти ошибки.

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

Sidenote: Отображение ошибок должно выполняться только в стадии постановки и никогда не производить.

  • Это уведомление будет выбрано независимо от выбранной операции.

  • else{...} используется как выход, если что-то не задано или соответствует критериям в инструкции сравнения, например if и else if:

  • http://php.net/manual/en/control-structures.if.php.

Он полагает, что else($_POST['operation'] == 'divide') всегда будет сравнивать с "divide", а не else { $var=x; } else { $var=x; } является "назначать эту переменную" x ", в свою очередь, выбрасывая вам ошибку.

Из руководства: http://php.net/manual/en/control-structures.elseif.php

<?php
if ($a > $b) {
    echo "a is bigger than b";
} elseif ($a == $b) {
    echo "a is equal to b";
} else {
    echo "a is smaller than b";
}
?>

Другие ссылки:

  • 0
    Спасибо, Фред! Это было очень полезно. Мне удалось исправить ошибки, которые вы упомянули, и выяснить, что я не смог запустить скрипт PHP, потому что я помещал свой проект в ... wamp / www вместо wamp / WinWampUSE / www.
  • 0
    @AnthonyJosephAllgeierIII Пожалуйста, Энтони, рад, что помог, ура
3

В вашем коде произошла ошибка, посмотрите на свой последний оператор "else" в вашем PHP-коде.

<?php
    if($_POST['operation'] == 'add') {
        echo $first + $second;
    }
    else if($_POST['operation'] == 'subtract') {
        echo $first - $second;
    }
    else if($_POST['operation'] == 'multiply') {
        echo $first * $second;
    }
    else if($_POST['operation'] == 'divide') {
        if($second == 0){
            echo 'Cannot divide by 0';
        } else {
            echo $first / $second;
        }
    } else {
        echo 'unknown operator';
    }
?>

Также имейте в виду, что вы не можете делить на 0, так как это создаст предупреждение в PHP.

Поэтому лучше всего включить error_reporting при написании и тестировании кода, показанного в ответе "Fred -ii-".

  • 0
    Хорошая точка на деление на 0.
  • 0
    Я не уверен насчет фатальной ошибки, хотя я использую PHP 7, и он просто показывает предупреждение. Но я помню время, когда это было не так.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню