Обработка значений во время отправки формы должна быть отправлена ​​дважды - PullRequest
0 голосов
/ 03 января 2019

Я видел подобный вопрос здесь, но он был основан на JavaScript, но мой - чистый PHP.Обрабатывая форму с динамически генерируемыми переменными, я обнаружил, что она должна быть передана дважды для сохранения значений.Одно поле, называемое Start , содержит дату и время MySQL, и форма отправляет только дату с помощью средства выбора даты в поле текстовой формы (я щелкаю поле, и появляется средство выбора даты)в то время как другое поле, список параметров с именем Время , выбирает время.Отправляя форму, она возвращает дату и время обратно в правильный формат и заполняет поле Start полным значением, как и ожидалось, но затем мне нужно отправить снова, чтобы фактически сохранить значения в базе данных.$ FieldNames - это массив имен столбцов из таблицы базы данных.

Это мой оригинальный код, который без условного запуска Start хорошо работает на всех других формах, которым не нужно объединять два поля формы:

foreach ($FieldNames as $val) :
    $$val = (isset($_POST[$val])) ?  safeData($_POST[$val])  : addslashes($row[$val]);
    // Set date and time as separate elements concatenated together
    if ($val === "Start") :
        $rawStart = ($Start) ? $Start : date('Y-m-d H:i:00');
        $Time = (isset($_POST['Time'])) ? $_POST['Time'] : roundTime($rawStart, 15, 'auto');
        $Start = (isset($_POST['Start']) && isset($_POST['Time'])) ? date('Y-m-d', strtotime($_POST['Start'])) . " $Time" : $rawStart;
    endif;
    echo $row[$val];
endforeach;

, пытаясь заставить его извлекать поля формы, если они были отправлены, я добавил условное выражение, но его тоже нужно отправить дважды, поэтому он был идентичен по функциональности моему другому коду выше со многими другими строками кода:

if (!isset($_POST) || isset($_POST['SearchID'])) :
    // Dynamically declare variables for empty form
    foreach ($FieldNames as $val) :
        $$val = (isset($_POST[$val])) ?  safeData($_POST[$val])  : addslashes($row[$val]);
    endforeach;
else :
    // Dynamically declare values from post to populate form
    foreach ($_POST as $row => $values) :
        if (trim($row) && is_string($row)) :
            if ($row === "Start") :
                $rawStart = ($_POST['Start']) ? $_POST['Start'] : date('Y-m-d H:i:00');
                $Time = (isset($_POST['Time'])) ? $_POST['Time'] : roundTime($rawStart, 15, 'auto');
                $values = (isset($_POST['Start']) && isset($_POST['Time'])) ? date('Y-m-d', strtotime($_POST['Start'])) . " $Time" : $rawStart;
            endif;
            $$row = $values;
        endif;
    endforeach;
endif;

В качестве временного обходного пути я добавил изменение к селектору времени, которое работает, но это не идеальное исправление, особенно если учесть, что поля вводятся в порядке с последним селектором времени.Будем очень благодарны за любые идеи о чем-то более прямом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...