我有一个多部分表单,按“后退”或“下一步”将导致该部分被提交并存储到数据库中(MySQL);唯一的区别是它是否转到下一个或上一个形式。
请注意,后续部分(第二部分以后)是第一部分表的子表。他们将'ePARno'作为外键。
第一部分执行此代码段:
if( isset( $_SESSION[ 'eparno' ] ) ) { //if it's an edit, replace
$eparno = $_SESSION[ 'eparno' ];
$insert_query_0 = mysql_query ("
REPLACE INTO form
(ePARno, caseno, accomplishedby)
VALUES
('$eparno', '$caseno', '$accomplishedby')
");
}
else { //otherwise, it's a fresh insert
$insert_query_0 = mysql_query ("
INSERT INTO form
(caseno, accomplishedby)
VALUES
('$caseno', '$accomplishedby')
");
$eparno = mysql_insert_id();
}
当我回到第二张表格上时,我的问题就出现了,把我带到了第一张表格,然后通过点击接下来回到它。当我这样做时会发生第二种形式的插入行被插入(由于按下Back)但当我从第一种形式按Next时它会从表中消失。 (我通过phpmyadmin同时按下后退和下一步查看数据库)
我怀疑这与替换父行的第一个表单有关。如果它执行REPLACE,我怀疑已经存在的子行(例如第二种形式的子行)将被删除。
我还必须说,如果我不回去,事情就会顺利进行。没有行消失。
我的怀疑是否有任何优点?如果是这样,我该如何解决这个问题?如果没有,那可能是什么问题?
答案 0 :(得分:1)
REPLACE
执行DELETE
和INSERT
。我猜想DELETE
正在级联到子表。
请尝试INSERT...ON DUPLICATE KEY
。
'caseno'是你的主键吗?如果是这样,也许就是这样:
INSERT into form (caseno, accomplishedby) values (?,?)
ON DUPLICATE KEY UPDATE eparno = values(eparno), accomplishedby = values(accomplishedby)