2012-09-17 2 views
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을 통해 데이터베이스를 처음부터 다시 읽는 것과 동시에 볼 수 있습니다.)

나는 이것이 부모 행을 대체하는 첫번째 형태와 관련이 있다고 생각합니다. REPLACE를 실행하면 두 번째 형식의 자식 행과 같은 이미있는 자식 행이 삭제 된 것으로 판단됩니다.

내가 돌아 가지 않으면 일이 순조롭게 진행된다고 말해야합니다. 행이 사라지지 않습니다.

나의 의혹에는 어떤 공로가 있습니까? 그렇다면 어떻게 해결할 수 있습니까? 그렇지 않다면 무엇이 문제가 될 수 있습니까?

답변

1

REPLACEDELETEINSERT입니다. 나는 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) –

관련 문제