2012-09-17 79 views
1

我有一個多部分表單,按「Back」或「Next」將導致該部分被提交併存儲到數據庫(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,我懷疑已經存在的子行(如第二種形式)已被刪除。

我還必須說,如果我不回去,事情會順利進行。沒有行消失。

我懷疑有什麼價值嗎?如果是這樣,我該如何補救?如果不是,那可能是什麼問題?

回答

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) 
+0

哦,謝謝,謝謝。我必須嘗試。 –

+0

如何使用這些查詢來實現相同的目標? –

+0

根據[doc](http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html) –