Начнем с того, что "if isset" не проверяет, "пустая ли переменная". Она только проверяет, было ли переменной присвоено какое-то значение.
Что, в свою очередь, очень забавно смотрится после того как буквально
строчкой выше каждой переменной уже
было присвоено значение.
Ну то есть это условие сработает, если в запросе вообще не было такого поля, но во-первых, мне кажется не это имелось в виду, а во-вторых, если поля не было, то уже при присвоении будет ошибка, и после этого делать isset уже как-то глупо.
И, как правильно заметил
Кирилл Николаевич, наверное имеется в виду
размер строки с данными. Если он нулевой, то мы можем считать поле пустым. Плюс, как он опять же, правильно заметил, возможно имеет смысл отрезать концевые пробелы, правда непонятно, каким местом для этого регулярки.
В общем, после такой эпичной борьбы с переменными, даже не знаю, стоит ли переходить к гибельному вопросу добавления в БД только не пустых значений. Сколько пользователей похапешечки на нем сложило голову и не смогли его осилить - не счесть. А из тех, кто смогли, потом многие начали заговариваться и слышать потусторонние голоса.
Так что ты хорошенько подумай - а надо ли оно тебе вообще.
В общем случае нам надо список полей, которые мы можем добавить в БД. Чтобы не колупаться с отдельными переменными. А дальше все просто - цикл, который проверяет на пустоту и формирует сам запрос плюс массив с данными для него.
$fields = ['phrase','secret','custom1', ...];
$conditions = [];
$params = [];
foreach($fields as $key) {
if (strlen($val = trim(filter_input(INPUT_POST,$key)))) {
$conditions[] = "`$key` =?";
$params[] = $val;
}
}
if ($params) {
$sql = "INSERT INTO table SET ".implode(",",$conditions);
$pdo->prepare($sql)->execute($params);
}