表单提交期间处理值必须提交两次

时间:2019-01-03 19:06:40

标签: php forms variables

我在这里看到了类似的问题,但这是基于JavaScript的,而我的是纯PHP。处理具有动态生成的变量的表单,我发现必须将其提交两次才能保存值。一个名为 Start 的字段包含一个MySQL日期时间,并且该表单仅使用文本表单字段上的日期选择器来提交日期(我单击该字段,然后弹出日期选择器向上),而另一个字段(称为 Time 的选项列表)正在选择时间。提交表单后,它将日期和时间重新放回正确的格式,并按期望的完整值填充“开始”字段,但随后我需要再次提交以将值实际保存到数据库。 $ 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;

作为临时的解决方法,我向时间选择器添加了一个onchange,它可以工作,但并不是理想的解决方法,特别是因为它假定必须按时间选择器的最后一个顺序输入字段。任何关于更直接事物的想法将不胜感激。

0 个答案:

没有答案