2012-06-07 2 views
0

PHP와 MySQL을 사용하여 웹 응용 프로그램을 만들었습니다. 일부 사용자 데이터 추적을 구현하는 좋은 방법을 찾고 있습니다. 사용자가 필드를 변경하면 "John Doe가 2012 년 6 월 5 일에서 2012 년 6 월 13 일까지 닫기 날짜를 변경했습니다"와 같은 변경 사항을 표시 할 수있게하려고합니다.사용자 데이터 개정 추적 구현

' 이것을하기위한 좋은, 쉬운 방법을 생각해 보라. 누구든지 어떤 제안이 있습니까?

+0

글쎄, 기본 프로세스는 비교적 간단합니다. 변경 사항을 저장할 때 이전 필드 값과 새 필드 값을 비교하십시오. 다른 필드의 경우 변경 사항을 로그에 기록하십시오. 당신이 갇혀있는 곳을 좀더 구체적으로 할 수 있습니까? –

+0

테이블을 업데이트 할 때이 메시지에 플래그를 지정할 수 있습니다. – swapnesh

+0

어떤 필드가 업데이트되고 있는지 알지 못하기 때문에 막혔습니다. 업데이트 직전에 쿼리를 실행하여 원래 필드를 선택한 다음 모든 필드를 비교하고 다른 필드가 있는지 확인해야합니까? 그들을 비교하는 가장 좋은 방법은 무엇입니까? – Keith

답변

0

이 작업은 사용자가 원하는 작업을 수행 할 것이므로 데이터베이스 연결을 사용하지 않았으므로이 작업을 사용자에게 정확하게 표시 할 수 있지만 데이터베이스 연결의 하위 집합과 데이터는 어떻게 보이는지 쉽게 볼 수 있어야합니다 작동 할 것이다. 누군가에게 "통지"하지 않고 데이터를 변경할 수있는 혜택을 누릴 사람들과 함께 작업하는 경우에만 암호화에 추가했습니다 (Simple encryption in PHP에서 가져옴). 필요하지 않은 경우 완전히 생략 할 수 있습니다. 기본적으로 페이지의 숨겨진 필드에 데이터를 저장하고 제출 후 비교하여 변경된 내용을 확인합니다. HTH

<?php 
function ecrypt($str){ 
    $key = "something simple"; 
    for($i=0; $i<strlen($str); $i++) { 
    $char = substr($str, $i, 1); 
    $keychar = substr($key, ($i % strlen($key))-1, 1); 
    $char = chr(ord($char)+ord($keychar)); 
    $result.=$char; 
    } 
    return urlencode(base64_encode($result)); 
} 


function decrypt($str){ 
    $str = base64_decode(urldecode($str)); 
    $result = ''; 
    $key = "something simple"; 
    for($i=0; $i<strlen($str); $i++) { 
    $char = substr($str, $i, 1); 
    $keychar = substr($key, ($i % strlen($key))-1, 1); 
    $char = chr(ord($char)-ord($keychar)); 
    $result.=$char; 
    } 
return $result; 
} 



if (isset($_POST['update']) && $_POST['update']!='') { 
    $data1=$_POST['data1']; 
    $data2=$_POST['data2']; 
    $data3=$_POST['data3']; 

    $datahide1=decrypt($_POST['datahide1']); 
    $datahide2=decrypt($_POST['datahide2']); 
    $datahide3=decrypt($_POST['datahide3']); 

    $msg=''; 
    if ($data1!=$datahide1) { 
     $msg.="John Doe has change name from ".$datahide1." to ".$data1."<br>"; 
    } 
    if ($data2!=$datahide2) { 
     $msg.="John Doe has change price from ".$datahide2." to ".$data2."<br>"; 
    } 
    if ($data3!=$datahide3) { 
     $msg.="John Doe has change date from ".$datahide3." to ".$data3."<br>"; 
    } 

    // do your database update here 

    // do your results here 
    if ($msg!="") { 
     echo $msg; 
    } else { 
     echo "No changes"; 
    } 
    die(); 
} 

// Database recordset here 

// Junk data 
$data1="John Doe"; 
$data2="25.00"; 
$data3="6/5/2012"; 

// encypted data 
$datahide1=ecrypt($data1); 
$datahide2=ecrypt($data2); 
$datahide3=ecrypt($data3); 

?> 
<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Untitled Document</title> 
</head> 

<body> 
<form name="form1" method="post" action="revisiontrack.php"> 
    <label for="data1">Name:</label> 
    <input type="text" name="data1" id="data1"><input name="datahide1" type="hidden" value="<?php echo $datahide1;?>"> 
    <label for="data2">Price:</label> 
    <input type="text" name="data2" id="data2"><input name="datahide2" type="hidden" value="<?php echo $datahide2;?>"> 
    <label for="data3">Date:</label> 
    <input type="text" name="data3" id="data3"><input name="datahide3" type="hidden" value="<?php echo $datahide3;?>"> 
    <input name="update" type="hidden" id="update" value="y"> 
<input type="submit" name="submit" id="submit" value="Submit"> 
</form> 
</body> 
</html> 
+0

예, 나는 이렇게 할 수 있다고 생각합니다. 이렇게 많은 양식 필드를 필요로하지 않는 쉬운 방법이 있는지 궁금합니다. – Keith