Я видел подобный вопрос здесь, но он был основан на 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;
В качестве временного обходного пути я добавил изменение к селектору времени, которое работает, но это не идеальное исправление, особенно если учесть, что поля вводятся в порядке с последним селектором времени.Будем очень благодарны за любые идеи о чем-то более прямом.