2013-10-18 2 views
0

그래서 인벤토리 정보를 보유하고있는 데이터베이스가 있습니다. 직원들은 온라인 정보가 변경되면 번호가 변경되는 마지막 사람이 번호를 업데이트하고 모든 값에 사용하기 때문에 정보를 업데이트합니다.데이터베이스 - 업데이트시 충돌 정보를 업데이트하는 PHP와 PHP

예 : Joe는 크랜베리가 3 개 남아 있고 아직 3 개가 아닌 샐러드를 만지지 않습니다.하지만 John은 샐러드가 0 인 것을 업데이트했습니다. Joe가 업데이트를 업데이트하면 샐러드의 가치는 시스템이 생각하기 때문에 다시 3으로 설정됩니다. 업데이트도.

이 문제를 해결할 수있는 방법은 없습니까?

+0

몇 가지 코드와 자세한 설명을 게시 할 수 있습니까? 크랜베리 샐러드는 좋게 들린다. – dudemanbearpig

+0

사용중인 SQL 문을 게시 할 수 있으며 올바른 where 문을 사용하지 않았을 수 있습니다. –

답변

1

모두 사용자가 (저장 버튼을 눌러 예) 두 값 (크랜베리와 샐러드가) 한 번에 변경 될 수 있습니다 같은 GUI를 사용하는 경우가 있습니다 숨겨진 필드에 정보를 저장하는

  1. 를 사용하여 자바 스크립트 그 값이 사용자에 의해 변경된 후 변경되지 않은 값으로 PHP에 데이터를 저장할 때이 값을 사용합니다.
  2. 숨겨진 필드에 각 속성의 원래 값을 저장하고 변경된 값을 저장하지 않고 저장시 사용자의 새 값과 비교하는 데 사용합니다.
  3. GUI 수정 (예 : 값을 변경할 입력의 잠금을 해제하는 확인란 추가)
  4. 두 번째 사용자가이 사용자에게 표시 한 이후로 변경된 레코드를 변경하지 못하도록 레코드 버전을 사용하십시오. 죄송합니다,이 기록이 표시 이후 변경되었습니다 "와 같은 메시지가. 페이지 이전 결정의 변화를 새로 고침하세요.

을 당신이 가장 좋아하는 하나를 선택.

+0

와우. 그것을 사랑해. 나는 그것을 시도하고 그것이 어떻게되는지 보게 될 것이다. –

+0

즐기십시오 :). 개인적으로 나는 최고의 4 번을 좋아한다. – Rafi

+0

나는 최선의 해결책이 될 것이라고 동의하지만 그 사용법이 너무 많아서 매번 그 시간이 갑자기 나타나면 즉시 제거하지 않을 것을 요청할 것입니다. lol –

0

이것은 일반적인 문제입니다. 당신이 할 수있는

:

+0

나는 이것에 처음으로 달려 들지는 않는다고 생각했다. 나는 즉시 LOCK을 생각했으나 너무 자주 사용되어 언제든지 아무도 잠글 수 없다. 나는 당신의 "수량 = 수량 -2"와 숨겨진 값의 조합이 문제를 해결할 수 있는지를 점검 할 것이라고 생각합니다. –

1

소리는 동시성 문제와 유사하지만 어쩌면 우리가 두 개의 다른 필드에 대해 이야기하고 있기 때문에 아닙니다. http://dev.mysql.com/doc/refman/5.0/en/internal-locking.html

조가 자신의 정보를 얻는 방법을 살펴 보길 원할 것입니다. 아직 3 개의 샐러드로 설정되어 있고 John이 가져 가면 Joe의 견해는 3 개의 샐러드가 사라 졌음을 알 수 없으며 그는 업데이트를 클릭합니다 (자신의 모든 정보가 DB로 전송되었다고 가정 할 때). 실수로 샐러드를 되돌립니다.

0

문제의 일부는 방법 당신의 SQL로 나타납니다 사용자가 레코드의 값을 변경하지 않으면 새 레코드가 없어야합니다. t 기록.

트랜잭션을 사용하여 프로세스가 시작된 이후 값이 변경되었는지 확인할 수 있습니다. 이렇게하면 결과에 따라 트랜잭션을 커밋하거나 롤백 할 수 있습니다.

MySQL Transactions

예를 들어, 사용자 A는 5 사용 가능한 샐러드의 3을 확인하고 있습니다.사용자 A가이 프로세스를 완료하기 전에 사용자 B는 5 개의 사용 가능한 샐러드 중 3 개를 체크 아웃하려고 시도합니다. 트랜잭션을 사용하면 트랜잭션을 커밋하기 전에 트랜잭션을 수행 할 충분한 양의 샐러드가 있는지 확인하는 논리를 제공 할 수 있습니다. 검사가 실패하면 트랜잭션을 롤백 할 수 있습니다. 이렇게하면 트랜잭션이 시작될 때 5 명이 사용 가능하다는 표시가있을 수 있지만 사용자 B가 사용 가능한 것보다 많은 샐러드를 체크 아웃 할 수 없습니다.

+0

정말 내 시스템이 어떻게 만들어 졌는지는 알지만 시도해 보겠습니다. 감사합니다! –

관련 문제