3

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

4

4 回答 4

5

你有很多选择。

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

还有更多不太有用的选项。我会推荐#1。

于 2013-01-01T20:06:12.320 回答
1

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

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

更复杂的解决方案

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

于 2013-01-01T20:04:36.823 回答
0

为什么一个页面上有这么多字段?我会重新考虑这样做。无论如何,如果您有服务器端验证并且它失败了,您可以设置页面让每个字段使用基于发送到服务器的帖子值的默认值......所以只需将它们发送回同一页面并将输入字段值设置为 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); ?>
于 2013-01-01T20:07:26.723 回答
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;
        }
于 2013-01-01T20:12:45.393 回答