이전 값과 새 값을 나타내는 양식에서 필드가 변경 될 때마다 데이터베이스에 항목을 추가해야합니다.특정 양식 필드의 변경 사항을 감사하는 가장 좋은 방법은 무엇입니까?
어떻게 하시겠습니까 ??
당신은 ...
모든 필드에 숨겨진 필드를 추가 한 후 제출이 켜지지 경우 감사 항목을 추가에 새로운 값과 비교겠습니까?
게시물에 삽입 할 데이터를 선택한 다음 각 속성을 비교하고 감사 항목을 삽입하십시오.
다른 아이디어?
건배.
이전 값과 새 값을 나타내는 양식에서 필드가 변경 될 때마다 데이터베이스에 항목을 추가해야합니다.특정 양식 필드의 변경 사항을 감사하는 가장 좋은 방법은 무엇입니까?
어떻게 하시겠습니까 ??
당신은 ...
모든 필드에 숨겨진 필드를 추가 한 후 제출이 켜지지 경우 감사 항목을 추가에 새로운 값과 비교겠습니까?
게시물에 삽입 할 데이터를 선택한 다음 각 속성을 비교하고 감사 항목을 삽입하십시오.
다른 아이디어?
건배.
처음에는 양식을 문자열로 serialize하여 을 작성하고 최신 문자열 인 과 비교하여 변경 사항이 있는지 확인하십시오. 2 개의 문자열이 당신과 아무 관계가 없다면. 당신이 사용하는 경우
FORM_NAME [ 'FIRST_NAME'] ... FORM_NAME [ 'LAST_NAME'] ...
:
나는 []에 의해 명명 양식의 모든 요소가 같은 것을 가정 PHP는 array_diff_assoc을 사용하여 어떤 변화가 있는지 확인할 수 있습니다.당신이 필요로하는 모든 것은 db 형식의 최신 폼 배열을 저장할 때마다 직렬화 된 문자열로 저장됩니다.
사용중인 데이터베이스를 말하지 마십시오. 현재 값을 가져 와서 데이터베이스에 저장하는 프로 시저를 작성할 수 있습니다. 내가 생각하기에 이것을 제안합니다. 이것은 프론트 엔드가 아닌 데이터베이스 측에서 수행되는 비교 작업입니다.
편집 : 안녕하세요, 오라클을 사용하는 경우 절차를 작성하는 것이 쉽습니다. :)
당신은 포스트 그레스 또는 테이블에 UPDATE 지점 1의
를 수행 될 때마다 트리거 될 수 있습니다 당신은 쉽게 그 동안 그 작업을 수행하는 함수를 작성할 수있는 기능이있는 다른 데이터베이스를 사용하는 경우, 누군가 자신의 POST 문을 쉽게 만들 수 있으므로 양식에 '숨겨진 필드'를 포함시키는 것은 좋은 생각이 아닙니다.포인트 2에 대해, 이것은 충분히 쉽게 작동하고 함수를 작성할 수 없으면 사용할 것입니다.
당신은 싶어 것 같은 것을 할 :
$db_data
에 대한 배열, $form_data
에서 함수 array_diff_assoc
$ differences = array_diff_assoc ($ db_data, $ form_data);
양식과 db 배열 모두 동일한 키가 있어야합니다.
이것을 앱 계층에 보관하려는 경우 로깅을 수행 할 필드 당 속성이있는 모델 레이어를 사용하는 것이 좋습니다. 그러면 모든 데이터 액세스가이 데이터 모델을 거쳐 기능을 추가 할 수 있습니다.
activerecord 기반 예 (VBScript를이) :
class cSomeEntity
public db ' link to a db wrapper
private id, dirty, loaded ' varous flags
private sub class_initialize
dirty = false
loaded = false
end sub
private sub class_terminate
if dirty then
db.execute("update some_table set some_field=? where id=?", array(p_some_field, id))
end if
end sub
public sub load_by_id(value)
dim rs
set rs = db.fetch_rs("select id, some_field from some_table where id=?", array(id))
id = rs("id")
p_some_field = rs("some_field")
loaded = true
end sub
private p_some_field
public property get some_field
some_field = p_some_field
end property
public property let some_field(value)
if not loaded then err.raise 1, , "Entity not yet initialized, call .load_by_id() first!"
if value <> p_some_field then
dirty = true
make_log_entry("some_value", p_some_field, value)
p_some_field = value
end if
end property
private sub make_log_entry(field, old_value, new_value)
db.execute("insert into audit_log (table, field, old_value, new_value) values (?, ?, ?, ?)", _
array("some_table", field, old_value, new_value))
end sub
end class
이 약간 부풀어 보일 수도 있지만, 트리거 기반의 접근 방식보다 더 유연하다. 예를 들어 범위 검사 등을 쉽게 구현할 수 있습니다.
둘째, 여러 엔터티 클래스를 작성해야 할 경우 많은 기능을 대리자 클래스에 푸시하고 코드 템플릿을 사용하여 getter & setter 속성을 작성할 수 있습니다.
당신은 이것을 ASP-Classic, PHP 및 ASP.NET으로 태그 지정했습니다. 어떤거야? –
또한 Javascript 태그가 붙어 있습니다. 정말 나쁜 생각입니다. 이런 일에 클라이언트 측을 사용하지 마십시오. –
고전 ASP에서 서버 측 javascript. – Schotime