我有一個用PHP/HTML編寫的表單。該表格由文本框,下拉框和複選框組成。我想要實現的是,我想從文本框,下拉框和複選框中跟蹤表單上的所有更改,並將其存儲在數據庫中用於審覈目的。我不需要知道以前的數據和更新內容,但是我想知道用戶是否更改了textbox1,下拉框和複選框。如何跟蹤表單中的更改和存儲在數據庫中
在PHP上這樣做最有效的方法是什麼?我讀過一些觸發器在MySQL中,但我只想在PHP中做到這一點。
非常感謝。
我有一個用PHP/HTML編寫的表單。該表格由文本框,下拉框和複選框組成。我想要實現的是,我想從文本框,下拉框和複選框中跟蹤表單上的所有更改,並將其存儲在數據庫中用於審覈目的。我不需要知道以前的數據和更新內容,但是我想知道用戶是否更改了textbox1,下拉框和複選框。如何跟蹤表單中的更改和存儲在數據庫中
在PHP上這樣做最有效的方法是什麼?我讀過一些觸發器在MySQL中,但我只想在PHP中做到這一點。
非常感謝。
如果我正確解釋您的請求,當您繪製表單時,您知道這些字段的值。在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
}
?>
我認爲這裏不會發生ajaxy魔法?如果沒有,那麼也許這樣?
當用戶提交表單時,獲取所有值並將它們中的每一個與數據庫中當前保存的值進行比較,如果它們已更改,則寫入數據庫,如果不是則不做任何事情。 在數據庫中有一個更新觸發器,以便更新行時,它會在寫入新數據之前將舊行復制到另一個表(可能是存檔表)。不知道你的數據是什麼樣的,或者你的表結構是什麼,它很難提供比這更多的東西。
基於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();
}
也許告訴我們你已經擁有了什麼?如果不知道我們需要什麼,我們很難提出建議。 –
其實我還沒有追蹤變化的代碼,但是我只有這樣一種形式,它是一種基本的形式,但由所提到的構成。我之所以問,是因爲我不能想出實現這一目標的最佳方法。但我有一些想法,比如將所有字段的隱藏值都隱藏起來,然後將隱藏存儲的數據與字段的當前數據進行比較,如果不匹配,則將其視爲更改。你怎麼看? –