Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在多个页面上继续事务_Php_Mysql_Laravel 4 - Fatal编程技术网

Php 如何在多个页面上继续事务

Php 如何在多个页面上继续事务,php,mysql,laravel-4,Php,Mysql,Laravel 4,我在3个不同的PHP页面上有3个HTML表单,用于在3个不同的表中插入数据 目前的进程如下: 用户填写第一个表单并单击“下一步”(数据插入数据库的第一个表中) 用户填写第二个表单并单击“下一步”(数据存储在数据库的第二个表中) 用户填写第三个表单并单击“完成”(数据存储在数据库的第三个表中) 我想: 只有在用户填写所有3个表单并单击“完成”时,才必须发出提交。如果用户在填写所有三个表单之前退出/退出任何阶段,则应回滚存储在表中的所有数据 我可以使用LaravelDB::Transaction

我在3个不同的PHP页面上有3个HTML表单,用于在3个不同的表中插入数据

目前的进程如下:

  • 用户填写第一个表单并单击“下一步”(数据插入数据库的第一个表中)
  • 用户填写第二个表单并单击“下一步”(数据存储在数据库的第二个表中)
  • 用户填写第三个表单并单击“完成”(数据存储在数据库的第三个表中)
我想:

只有在用户填写所有3个表单并单击“完成”时,才必须发出提交。如果用户在填写所有三个表单之前退出/退出任何阶段,则应回滚存储在表中的所有数据

我可以使用Laravel
DB::Transaction
吗?或者我有其他选择吗?请给出任何建议

实际上,在每个步骤中,用户可以在一个表中添加多条记录。例如,在第三步中,用户可以根据需要在
subjects
表中添加任意数量的记录。我使用以下代码将这些多条记录保存在表
subjects
中:

for($i=1; $i<=Input::get('total_subjects'); $i++){
    if(Input::get('sub_'.$i) != null){
    $sd = new Subject;
    $sd->class_detail_id = Input::get('class_detail_id');
    $sd->subject_id = Input::get('sub_'.$i);
    $sd->status = 'ACTIVE';
    $sd->save();
}
for($i=1;$iclass\u detail\u id=Input::get('class\u detail\u id');
$sd->subject_id=Input::get('sub_'.$i);
$sd->status='ACTIVE';
$sd->save();
}
现在的问题是: 如何存储对
主题的所有模型的引用?

我想到的唯一解决方案是只在第3步后进行事务处理,然后提交,否则事务将回滚。

为什么不将表单数据放入临时会话变量,并且只在完成第3步后将所有数据从会话插入数据库

为什么要使用这种方法呢

1) 数据库中没有垃圾。
2) 用户离开您的网页后,会话自动清理自身(自愿或意外)。
3) 您可以在步骤之间自由移动,所有信息将自动填写或返回。
4) 只有一个数据库连接-更快的网站。

5) 允许您使用事务。

我被分配了相同的任务,我选择了下面的解决方案。虽然从技术上讲,在几个HTTP请求期间保持PHP进程处于活动状态是可能的,但这样做既不明智也不实用。如果您详细介绍几种解决方案的优缺点,这将是一个很好的答案。在此之前,这只是一个评论。