1

我有一个多部分表单,按“返回”或“下一步”将导致该部分被提交并存储到数据库(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查看数据库,同时按back和next,一步一步)

我怀疑这与替换父行的第一个表单有关。如果它执行 REPLACE,我怀疑已经存在的子行(例如第二种形式的子行)被删除。

我还必须说,如果我不回去,事情就会顺利进行。没有行消失。

我的怀疑有任何依据吗?如果是这样,我该如何补救?如果不是,可能是什么问题?

4

1 回答 1

1

REPLACE做一个DELETEINSERT。我猜想DELETE是级联到子表的。

试试INSERT...ON DUPLICATE KEY吧。

'caseno' 是你的主键吗?如果是这样,也许是这样的:

INSERT into form (caseno, accomplishedby) values (?,?)
ON DUPLICATE KEY UPDATE eparno = values(eparno), accomplishedby = values(accomplishedby)
于 2012-09-17T16:53:34.977 回答