Чат Telegram
Группа ВКонтакте
Новый комментарий


Timurik Patron 19.04.2020 в 20:11

Я вот так сделал

<?php

if (empty($_GET)) {
    return 'Ничего не передано';
}

if (empty($_GET['operation'])) {
    return 'Операция не передана';
}

$operations = $_GET['operation'];

$x1 = (float)filter_input(INPUT_GET, 'x1');
$x2 = (float)filter_input(INPUT_GET, 'x2');

switch ($operations) {
    case '+':
        $result = $x1 + $x2;
        break;
    case  '-':
        $result = $x1 - $x2;
        break;
    case  '/':
        $result = $x2 !== 0 ? ($x1 / $x2) : 'На ноль делить нельзя';
        break;
    case  '*':
        $result = $x1 * $x2;
        break;

    default:
        return 'Операция не поддерживается';
}

$expression = $x1 . ' ' . $operations . ' ' . $x2 . ' = ';

return $expression . $result;

единственное теперь при неправильном вводе не будет сообщений, а аргумент будет принимать значение 0.0

ivashkevich 19.04.2020 в 20:27

Как-то не очень хорошо ознакомились с функцией. У неё ещё 2 аргумента есть.

единственное теперь при неправильном вводе не будет сообщений, а аргумент будет принимать значение 0.0

Такие решения не принимаются. Должен быть полностью рабочий код.

Timurik Patron 19.04.2020 в 20:54

Исправил:

$x1 = filter_input(INPUT_GET, 'x1', FILTER_VALIDATE_FLOAT);
$x2 = filter_input(INPUT_GET, 'x2', FILTER_VALIDATE_FLOAT);

if ($x1 === false || $x2 === false) {
    return 'Аргументы 1 и/или 2 не переданы или не являются числами';
}

или необходимо разделить сообщения?

ivashkevich 20.04.2020 в 04:44

Можно разделить, будет дополнительнвм плюсом. Но в целом, это именно то, что я хотел увидеть)

Timurik Patron 20.04.2020 в 08:02

Спасибо.

titelivus Patron 02.05.2020 в 18:52
<?php

if (empty($_GET)) {
    return 'Ничего не передано';
}

if (empty($_GET['operation'])) {
    return 'Операция не передана';
}

$x1 = filter_input(INPUT_GET, 'x1', FILTER_VALIDATE_FLOAT);
$x2 = filter_input(INPUT_GET, 'x2', FILTER_VALIDATE_FLOAT);

if ($x1 === null || $x2 === null) {
    return 'Аргументы 1 или 2 не переданы';
}

if ($x1 === false || $x2 === false) {
    return 'Введите число!';
}

$operations = $_GET['operation'];

switch ($operations) {
    case '+':
        $result = $x1 + $x2;
        break;
    case  '-':
        $result = $x1 - $x2;
        break;
    case  '/':
        $result = $x2 !== 0 ? ($x1 / $x2) : 'На ноль делить нельзя';
        break;
    case  '*':
        $result = $x1 * $x2;
        break;

    default:
        return 'Операция не поддерживается';
}

$expression = $x1 . ' ' . $operations . ' ' . $x2 . ' = ';

return $expression . $result;

Если в любом аргументе ничего не передать и нажать на "Посчитать": Выведется сообщение: "Введите число!". Но логично было бы: "Аргументы 1 или 2 не переданы". Хотя мы ничего не передавали, но на самом деле мы передали пустую строку, а функция filter_input() обработала ее и вернула false. Тем самым выражение:

if ($x1 === null || $x2 === null) {
    return 'Аргументы 1 или 2 не переданы';
}

не сработает =*(

но можно сделать так:

<?php

if (empty($_GET)) {
    return 'Ничего не передано';
}

if (empty($_GET['operation'])) {
    return 'Операция не передана';
}

if ($_GET['x1'] === "" || $_GET['x2'] === "") {
    return 'Аргументы 1 или 2 не переданы';
}

$x1 = filter_input(INPUT_GET, 'x1', FILTER_VALIDATE_FLOAT);
$x2 = filter_input(INPUT_GET, 'x2', FILTER_VALIDATE_FLOAT);

if ($x1 === NULL || $x2 === null) {
    return 'Аргументы 1 или 2 не переданы';
}

if ($x1 === false || $x2 === false) {
    return 'Введите число!';
}

$operations = $_GET['operation'];

switch ($operations) {
    case '+':
        $result = $x1 + $x2;
        break;
    case  '-':
        $result = $x1 - $x2;
        break;
    case  '/':
        $result = $x2 !== 0 ? ($x1 / $x2) : 'На ноль делить нельзя';
        break;
    case  '*':
        $result = $x1 * $x2;
        break;

    default:
        return 'Операция не поддерживается';
}

$expression = $x1 . ' ' . $operations . ' ' . $x2 . ' = ';

return $expression . $result;

Хотя я уверен что есть способ поделикатнее, но это не точно =)

ivashkevich 03.05.2020 в 20:48
if ($_GET['x1'] === "" || $_GET['x2'] === "") {
    return 'Аргументы 1 или 2 не переданы';
}

Бум! И снова ошибка!

titelivus Patron 04.05.2020 в 04:46

А в чем ошибка, если отправить пустую строку, то есть ничего не писать просто нажать на кнопку посчитать, выведет Аргументы 1 или 2 не преданы. Все верно же.

ivashkevich 06.05.2020 в 13:05

Упс, видимо вам я еще не скидывал) Пройдите дополнительный урок Обработка форм в PHP и исправьте ошибки

desperatik@mail.ru Patron 06.05.2020 в 23:02
if (empty($_GET)) {
    return 'Ничего не передано';
}

if (empty($_GET['operation'])) {
    return 'Операция не передана';
}

$x1 = filter_input(INPUT_GET, 'x1', FILTER_VALIDATE_FLOAT);
$x2 = filter_input(INPUT_GET, 'x2', FILTER_VALIDATE_FLOAT);

$operations = $_GET['operation'];

if (!is_numeric($x1) || !is_numeric($x2)) {
    return 'Введите число';
}

switch ($operations) {
    case '+':
        $result = $x1 + $x2;
        break;
    case  '-':
        $result = $x1 - $x2;
        break;
    case  '/':
        $result = $x2 != 0 ? ($x1 / $x2) : 'На ноль делить нельзя';
        break;
    case  '*':
        $result = $x1 * $x2;
        break;

    default:
        return 'Операция не поддерживается';
}

$expression = $x1 . ' ' . $operations . ' ' . $x2 . ' = ';

return $expression . $result;
ivashkevich 08.05.2020 в 19:49

Отлично!

Логические задачи с собеседований