Привет всем столкнулся с заморочкой при решении задачи, все вроде бы работает правильно и в то же время при делении на 0 результат выводится двойной, а нужен один, то, что на 0 делить нельзя и точка. Заметил что меняется значение isset($result) на false, но подставить это в условие с оператором if не решает проблему, все равно выводится 2 результата. Если есть мысли как решить эту проблему буду признателен. Спасибо <?php if ($_SERVER['REQUEST_METHOD'] == 'POST'){ $num1=abs((int)$_POST['num1']); $operator=$_POST['operator']; $num2=abs((int)$_POST['num2']); } switch ($operator) { case '+': $result=$num1+$num2; break; case '-': $result=$num1-$num2; break; case '*': $result=$num1*$num2; break; case '/': if ($num2==0){ echo 'На 0 делить нельзя '; } else $result=$num1/$num2; break; default: echo 'Вы ввели неверный оператор '; break; } if (!$num1||!$num2){ echo 'Введите правильное число '; } else echo $result; ?> <!-- Область основного контента --> <form action='<?php $_SERVER['REQUEST_URI']?>' method='POST'> <label>Число 1:</label> <br /> <input name='num1' type='text' /> <br /> <label>Оператор: </label> <br /> <input name='operator' type='text' /> <br /> <label>Число 2: </label> <br /> <input name='num2' type='text' /> <br /> <br /> <input type='submit' value='Считать'> </form> <?= isset($result);?>
Да потому что в других операциях вы присваиваете результат в $result, а при делении и далее выводите через echo Вот он у вас и выводит echo, а потом ещё и result... Присваивайте все в переменную и выводите только в одном месте, ну и результирующую переменнную принято перед расчетами очищать
ПОлностью поддерживаю ADSoft Да я бы просто записал бы $result то что выводится на экран пользователю. Т.е. значение ошибки в $result записывать
нет и что я записал все выводится в одну переменную в конце вывел ее через echo вывел одно условие, но не то которое нужно. проблема в том, что в данном случае оператор !$num2 и $num2==0, на выходе выдают одно и то же значение. Я не могу придумать условие при котором $result на выходе у двух этих переменных принимало бы разные значения
@Alexus Ты хотел проверить в case деление на 0, можно вроде было так сделать но не вариант. Я вынес проверку из цикла, проверяем что попадает и в поле 1 и в поле 2, если не 0 то гуд. Спойлер: Держи поправил код, чуток изменил. PHP: <?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { $num1=(int)$_POST['num1']; $operator=$_POST['operator']; $num2=(int)$_POST['num2']; $error = []; # массив ошибок if(!empty($num1) || !empty($num2)) { # проверяем деление на 0 if(!$num1 == 0 && !$num2 == 0) { # проверяем оператор if(!empty($operator)) { switch ($operator) { case '+': $result = $num1 + $num2; break; case '-': $result = $num1 - $num2; break; case '*': $result = $num1 * $num2; break; case '/': $result = $num1 / $num2; break; } # если ошибки не равняються 0 выводим результат if($error !== 0){ echo '<span style="color:green">Ваш результат: '.$result.'</span><br>'; } }else{ echo $error[] = '<span style="color:red">Введите оператор!</span><br>'; } }else{ echo $error[] = '<span style="color:red">На 0 делить нельзя!</span><br>'; } }else{ echo $error[] = '<span style="color:red">Введите Число 1 и Число 2!</span><br>'; } } ?> <!-- Область основного контента --> <form action='<?php $_SERVER['REQUEST_URI']?>' method='POST'> <label>Число 1:</label> <br /> <input name='num1' type='text' /> <br /> <label>Оператор: (<span style="color: blue;">'*', '/', '+', '-'</span>) </label> <br /> <input name='operator' type='text' /> <br /> <label>Число 2: </label> <br /> <input name='num2' type='text' /> <br /> <br /> <input type='submit' value='Считать'> </form> Палец вверх если помог.
ребят.... и все же надо проверять так PHP: if(!empty($_POST['num1']) && !empty($_POST['num2'])) иначе ваше условие PHP: if(!empty($num1) || !empty($num2)) срабатывает хоть один параметр не пуст или не == 0, что не есть верно ну и сравнение для деления на 0 нужно только для второго числа проводить, сам 0 делить то можно - будет в результате 0 PHP: # проверяем деление на 0 if($num2 != 0)
сейчас протестирую, если писать таким образом то проверка не срабатывает, в моем случае все срабатывает. а на счет одной проверки верно: Спойлер: исправление: PHP: <?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { $num1=(int)$_POST['num1']; $operator=$_POST['operator']; $num2=(int)$_POST['num2']; $error = []; # массив ошибок if(!empty($num1) || !empty($num2)) { # проверяем деление на 0 if(!$num2 == 0) { # проверяем оператор if(!empty($operator)) { switch ($operator) { case '+': $result = $num1 + $num2; break; case '-': $result = $num1 - $num2; break; case '*': $result = $num1 * $num2; break; case '/': $result = $num1 / $num2; break; } # если ошибки не равняються 0 то выводим результат if($error !== 0){ echo '<span style="color:green">Ваш результат: '.$result.'</span><br>'; } }else{ echo $error[] = '<span style="color:red">Введите оператор!</span><br>'; } }else{ echo $error[] = '<span style="color:red">На 0 делить нельзя!</span><br>'; } }else{ echo $error[] = '<span style="color:red">Введите Число 1 и Число 2!</span><br>'; } } ?> <!-- Область основного контента --> <form action='<?php $_SERVER['REQUEST_URI']?>' method='POST'> <label>Число 1:</label> <br /> <input name='num1' type='text' /> <br /> <label>Оператор: (<span style="color: blue;">'*', '/', '+', '-'</span>) </label> <br /> <input name='operator' type='text' /> <br /> <label>Число 2: </label> <br /> <input name='num2' type='text' /> <br /> <br /> <input type='submit' value='Считать'> </form>
Не знаю, чего у вас там не срабатывает - прочтите про empty() - при каких параметрах какие результаты дает, ну и сравнение, не равно " != " это классический оператор php, а вот ваше (!$num2==0) - по сути работа с булевыми значениями, отрицаете результат $num2 и сравниваете с 0 (false)..... если правильно - то уж PHP: if (!($num2==0)) что эквивалентно PHP: $num2 != 0
Спасиб работает ) --- Добавлено --- Единственное не понял зачем массив, может все значения можно было в одну переменную $result записать?