Как не выводить пустой get в url строку?
if (!empty($_GET)) {
            $new_get = array_filter($_GET);
            if (count($new_get) < count($_GET)) {
                $request_uri = parse_url('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], PHP_URL_PATH);
                header('Location: ' . $request_uri . '?' . http_build_query($new_get));
                exit;
            }
        }
Где-нибудь в самом начале страницы или точки входа вставьте, будет чистить любые пустые GET-параметры, и не надо в каждой форме что-то мудрить.
Как вариант при отправке формы формируй url, точнее get самостоятельно с помощью js.
Пустые переменные в get потому-что при сабмите формы все поля находящиеся в форме формируют  запрос, не зависимо от того пустое поле или скрытое, оно все равно попадет в get.
Просто отловите отправку формы тем же jquery, переберите все поля внутри формы в цикле и из не пустых полей сформируйте запрос (url). А потом просто сделайте редирект на этот url (document.location.href = url).
Или как вариант удалить jsом перед отправкой формы все пустые поля, эффект будет тот который вы хотите.