如果数据库失败,如何保留动态创建的输入字段值?

时间:2013-01-01 20:02:21

标签: php jquery forms validation

我有大约70个输入字段的大表单,并且在表单中有可以创建其他输入字段的按钮。我的问题是如果服务器上的某些内容在提交表单时出错,如何保留这些输入字段及其值,如数据库插入失败?我有动态验证,但如果在提交时出现问题怎么办?

4 个答案:

答案 0 :(得分:4)

你有很多选择。

  1. 您可以使用ajax发布您的表单,然后在成功时重定向到新页面,或者如果没有则提醒用户(最简单!)
  2. 您可以从帖子变量(使用复杂表单更难)重新创建服务器端的from
  3. 服务器可以在失败时发回表单值,您可以编写JS来重新创建表单(如果您已经有JS来管理表单,可能很容易)。
  4. 您可以传递表单的实际HTML以及表单值,并让服务器使用它来重新创建表单(您可能会丢失JS事件,具体取决于您如何连接它们,而不是一般的最佳选项)。
  5. 还有更多不太有用的选项。我建议#1。

答案 1 :(得分:1)

对于一个非常简单的解决方案:

您可以将值存储在对象中,并且只有在确认的数据库插入清除后才能存储。如果插入失败,您可以重试几次,如果重复失败,您可以将值写入CSV日志文件以手动处理。

更复杂的解决方案

队列。让所有插入请求使用Zend Jobserver,RabbitMQ或Gearman进入作业队列。然后创建一个工作进程以在队列的另一端运行插入。这将允许您重新运行/重试失败的作业。

答案 2 :(得分:0)

为什么单个页面上有这么多字段?我会重新考虑这样做。无论如何,如果你有服务器端验证但它失败了你可以设置页面让每个字段根据发送到服务器的post值使用默认值...所以只需将它们发送回同一页面并将输入字段值设置为post值。

这是一个例子。

$username = array(
                            'name'        => 'username',
                            'id'          => 'username',
                            'maxlength'   => '255',
                            'size'        => '28',
                            'title'             => 'username is required.',
                            'class'       => 'form-text required',
                            'value' => $this->input->post('username'),
                          );
<?php echo form_input($username); ?>

答案 3 :(得分:0)

这里有一些函数可用于在表单中存储表单值:

    //save form inputs
    function Hold_Form_Input()
        {
        $FormPost = array();
            foreach ($_POST as $key => $entry)
                {
                    $FormPost[''.$key.'']= $entry;
                }
         $_SESSION['post_form']= $FormPost;           
        }
    //Clear form values upon success
     function Clear_Form_Input()
        {
           if (isset($_SESSION['post_form']))
               {
                   unset($_SESSION['post_form']);
                 return true;
                }
           return false;
        }

//Reprint form values as needed
    function Keep_on_error($fieldname)
        {
            if(isset($_SESSION['post_form']) && strlen($_SESSION['post_form'][$fieldname]) > 0)
                {
                    $fill = $_SESSION['post_form'][$fieldname];
                    return $fill;
                }
            return false;
        }