Неккоректное отрабатывание if(isset($var) and isset($var2))

Делаю поиск по дате есть форма

<form action="" id="sDateEnd" method="post">
        <input type="date" name="search-start-date">
        <input type="date" name="search-end-date">
        <button type="submit" id="subDateStart" name="searchDateStart">
        <span>Пошук</span>
        </button>
        <button type="button" id="clearDateStart" name="clearDateStart">
        <span>Відміна</span>
        </button>
        </form>

при тыке на поиск аяксом летят на сервер значения POST и происходит следующее: Проблема 1. - я никак не попадаю сюда. При сабмите формы я всегда попадаю в else.

if ((isset($_POST['search-start-date']) === false) and (isset($_POST['search-end-date']) === false)):
//проверяю есть ли тут что либо вообще, если нет - выходим.
    return false;
else:

Далее то что находится в else: Проблема 2. - При поиске какого-то одного значения - у меня отрабатывает нужное мне условие но также почему-то всегда отрабатывает условие для поиска интервала.

if ((isset($_POST['search-start-date']) === true) and (isset($_POST['search-end-date']) === true)):
        echo "interval";
//Проверяю вдруг у нас ищется интервал дат от и до.
        $tasks = getSearchIntervalDate($_POST['search-start-date'], $_POST['search-end-date']);
    endif;

То что дальше в else:

if (isset($_POST['search-end-date']) === false):
        if (isset($_POST['search-start-date']) === true):
            echo "posle";
            $tasks = getSearchAfterDate($_POST['search-start-date']);
        endif;
    endif;

Весь код полностью:

if (($_POST['search-start-date'] == "") and ($_POST['search-end-date']) == ""):
    return false;
else:
    if ((isset($_POST['search-start-date']) !== "" and (isset($_POST['search-end-date']) !== ""))):
        echo "interval";
        $tasks = getSearchIntervalDate($_POST['search-start-date'], $_POST['search-end-date']);
    endif;
    if ($_POST['search-start-date'] == ""):
        if ($_POST['search-end-date'] !== ""):
            echo "do";
        $tasks = getSearchBeforeDate($_POST['search-end-date']);
        endif;
    endif;
    if ($_POST['search-end-date'] == ""):
        if ($_POST['search-start-date'] !== ""):
            echo "posle";
            $tasks = getSearchAfterDate($_POST['search-start-date']);
        endif;
    endif;
    renderTaskList($tasks);
endif;

Очевидно ошибка в логике условий, но никак не могу вкурить где именно.


Ответы (1 шт):

Автор решения: Мелкий

isset и с одним заполненнным инпутом - вещи не пересекающиеся. isset проверяет, что переменная (или в частности элемент массива) существует и не NULL. Незаполненный элемент формы input type="date" всё равно отправляется в теле запроса в виде пустой строки. Пустая строка прилетающая с формы - это не отсутствие элемента и не NULL, это пустая строка.

→ Ссылка