HTML — очень простой PHP-калькулятор, который не будет выполнять математические операции :(

Я пытаюсь создать простой калькулятор (это, вероятно, суперррр просто, но не смог найти ошибку 🙁 вздох *), поэтому, когда я нажимаю, подтвердите, что число 1 и номер 2 выполнят операцию, выбранную пользователем. Но ответ не будет отображаться при отправке 🙁 В чем проблема? Спасибо большое!

<?php
if ($_POST['subBtn']) {
$number1 = $_POST['number1'];
$number2 = $_POST['number2'];

if($_POST['group1'] == 'add') {
echo $number1 + $number2 = $answer;
}
else if($_POST['group1'] == 'subtract') {
echo $number1 - $number2 = $answer;
}
else if($_POST['group1'] == 'times') {
echo $number1 * $num2ber = $answer;
}
else if($_POST['group1'] == 'divide') {
echo $number2 / $number2 = $answer;

echo "<p>" . $answer . " </p>";
}
}
?>

<form name="number1" action="activity-2-4.php" method="post">
number1:<select name="number1">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select><br>

number2:<select name="number2">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select><br>
<input type="radio" name="group1" id="add" value="add">+<br/>
<input type="radio" name="group1" id="subtract" value="subtract">-<br/>
<input type="radio" name="group1" id="times" value="times">x<br/>
<input type="radio" name="group1" id="divide" value="divide">/<br/>
<button type="submit" name="subBtn" id="answer" value="answer">Calculate</button>
</form>

-1

Решение

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

Попробуйте это вместо этого:

<?php
if (isset($_POST['subBtn']) && isset($_POST['group1'])) {
$number1 = isset($_POST['number1']) ? $_POST['number1'] : 0;
$number2 = isset($_POST['number2']) ? $_POST['number2'] : 0;

switch ($_POST['group1']) {
case 'add':
$answer = $number1 + $number2;
break;
case 'subtract':
$answer = $number1 - $number2;
break;
case 'times':
$answer = $number1 * $number2;
break;
case 'divide':
$answer = $number2 / $number2;
break;
default:
$answer = 'No operation method selected.';
break;
}

echo "<p>" . $answer . " </p>";
}
?>
0

Другие решения

Я считаю, что это ваша проблема

echo $number2 / $number2 = $answer

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

$answer = $number2 / $number2

И то же самое на каждой математической операции.

Вы пытаетесь отобразить что-то одновременно с сохранением данных, но в неправильном порядке.

У вас уже есть эхо ответа после математической части.

0

Вам нужно проверить, существует ли переменная POST или нет.

Расчеты, переменные и эхо вы используете неправильно echo $number1 + $number2 = $answer; Я предполагаю, что ваш ожидаемый результат 4+1=5 в этом формате.

<?php
if (isset($_POST['subBtn']))
{
$number1 = isset($_POST['number1']) ? $_POST['number1'] : '';
$number2 = isset($_POST['number2']) ? $_POST['number2'] : '';
$group1  = isset($_POST['group1']) ? $_POST['group1'] : '';

$answer  = '';
$stmt    = '';

switch ($group1)
{
case 'add':
$stmt   = $number1.'+'.$number2.'= ';
$answer = $number1 + $number2;
break;

case 'subtract':
$stmt   = $number1.'-'.$number2.'= ';
$answer = $number1 - $number2;
break;

case 'times':
$stmt   = $number1.'*'.$number2.'= ';
$answer = $number1 * $number2;
break;

case 'divide':
$stmt   = $number1.'/'.$number2.'= ';
$answer = $number1 / $number2;
break;
}

echo "<p>" . $stmt.$answer . " </p>";
}
?>

<form name="number1" action="activity-2-4.php" method="post">
number1:<select name="number1">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select><br>

number2:<select name="number2">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select><br>
<input type="radio" name="group1" id="add" value="add">+<br/>
<input type="radio" name="group1" id="subtract" value="subtract">-<br/>
<input type="radio" name="group1" id="times" value="times">x<br/>
<input type="radio" name="group1" id="divide" value="divide">/<br/>
<button type="submit" name="subBtn" id="answer" value="answer">Calculate</button>
</form>
0

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

$number1 = (float)$_POST['number1'];
$number2 = (float)$_POST['number2'];

если вы знаете, что получаете Int, вы могли бы сделать

$number1 = (int)$_POST['number1'];
$number2 = (int)$_POST['number2'];

Однако я думаю, что ваша проблема с group1.

print_r($_POST);

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

Затем следующим шагом будет распечатать что-то на экране и убедиться, что вы в начале, если

echo "i'm in the add case";

и так далее

0

Измените способ назначения значений. менять

  $number1 + $number2 = $answer;

к

  $answer = $number1 + $number2;
-1
По вопросам рекламы [email protected]