我有大约70个输入字段的大表单,并且在表单中有可以创建其他输入字段的按钮。我的问题是如果服务器上的某些内容在提交表单时出错,如何保留这些输入字段及其值,如数据库插入失败?我有动态验证,但如果在提交时出现问题怎么办?
答案 0 :(得分:4)
你有很多选择。
还有更多不太有用的选项。我建议#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;
}