2011-12-01 34 views
1

我有一個用PHP/HTML編寫的表單。該表格由文本框,下拉框和複選框組成。我想要實現的是,我想從文本框,下拉框和複選框中跟蹤表單上的所有更改,並將其存儲在數據庫中用於審覈目的。我不需要知道以前的數據和更新內容,但是我想知道用戶是否更改了textbox1,下拉框和複選框。如何跟蹤表單中的更改和存儲在數據庫中

在PHP上這樣做最有效的方法是什麼?我讀過一些觸發器在MySQL中,但我只想在PHP中做到這一點。

非常感謝。

+0

也許告訴我們你已經擁有了什麼?如果不知道我們需要什麼,我們很難提出建議。 –

+0

其實我還沒有追蹤變化的代碼,但是我只有這樣一種形式,它是一種基本的形式,但由所提到的構成。我之所以問,是因爲我不能想出實現這一目標的最佳方法。但我有一些想法,比如將所有字段的隱藏值都隱藏起來,然後將隱藏存儲的數據與字段的當前數據進行比較,如果不匹配,則將其視爲更改。你怎麼看? –

回答

0

如果我正確解釋您的請求,當您繪製表單時,您知道這些字段的值。在submited形式的處理。然後

<?php 
$hash = md5($text . $drop . $check); 
?> 
<input type="hidden" name="values" value="<?php $hash; ?>" /> 

你可以比較兩個值

<?php 
$previous = $_POST['values']; 
$actual = md5($_POST['text'] . $_POST['drop'] . $_POST['check']); 
if ($previous !== $actual) 
    // you know some values are diferent 
} 
?> 
0

我認爲這裏不會發生ajaxy魔法?如果沒有,那麼也許這樣?

當用戶提交表單時,獲取所有值並將它們中的每一個與數據庫中當前保存的值進行比較,如果它們已更改,則寫入數據庫,如果不是則不做任何事情。 在數據庫中有一個更新觸發器,以便更新行時,它會在寫入新數據之前將舊行復制到另一個表(可能是存檔表)。不知道你的數據是什麼樣的,或者你的表結構是什麼,它很難提供比這更多的東西。

0

基於Macjohn解決方案,我想出了這個,但我會:你可以存儲他們的哈希喜歡問什麼是處理這個SQL情況的有效方法。我確信有一個快捷方式可以讓代碼在表單的每個元素上都有if語句時進行比較。

if ($_REQUEST['hidden_value_of_input_box1'] !== $newvalueofinputbox1) { 

    $data = "Input Box 1 has been changed"' 

    $name = $name; 
    $date = $datenow; 

    $stm = $dbh->prepare("INSERT INTO audit SET name=:name, datenow=:datenow, data=:data"); 
    $stm->bindParam(':name', $name); 
    $stm->bindParam(':value', $value); 
    $stm->execute(); 
} 

if ($_REQUEST['hidden_value_of_input_box2'] !== $newvalueofinputbox2) { 

    $data = "Input Box 2 has been changed"' 

    $name = $name; 
    $date = $datenow; 

    $stm = $dbh->prepare("INSERT INTO audit SET name=:name, datenow=:datenow, data=:data"); 
    $stm->bindParam(':name', $name); 
    $stm->bindParam(':value', $value); 
    $stm->execute(); 
} 

if ($_REQUEST['hidden_value_of_dropdown1'] !== $newvalueofdropdown1) { 

    $data = "Drop Down 1 has been changed"' 

    $name = $name; 
    $date = $datenow; 

    $stm = $dbh->prepare("INSERT INTO audit SET name=:name, datenow=:datenow, data=:data"); 
    $stm->bindParam(':name', $name); 
    $stm->bindParam(':value', $value); 
    $stm->execute(); 
} 

if ($_REQUEST['hidden_value_of_dropdown2'] !== $newvalueofdropdown2) { 

    $data = "Drop Down 2 has been changed"' 

    $name = $name; 
    $date = $datenow; 

    $stm = $dbh->prepare("INSERT INTO audit SET name=:name, datenow=:datenow, data=:data"); 
    $stm->bindParam(':name', $name); 
    $stm->bindParam(':value', $value); 
    $stm->execute(); 
} 
相關問題