我有一个包含约20个字段的表单来更新记录。当用户提交表单时,我想在我的update_log
表中记录哪些字段已更新(更改)以及更新的值,用户名和时间。 (例如:“Andrew于11月22日下午3点将”供应商“更新为”Acme Inc.“)
以前,我在单个字段自动保存的情况下取得了成功,因为只要单个字段更新,我就可以记录它。但是对于包含20个字段的表单,这更加困难,因为我一次更新整个表单并且不想记录没有更改的字段。
这是我用POST
更新PHP文件的Javascript,它使用$_POST
数据运行更新查询:
$("body").on('click', "#update-shipment-button", function(e){
e.preventDefault();
var shipment_id= $("#update-shipment-button").attr('data-shipment-id');
var clientName = $("#form-client-name").val();
var poNumber = $("#form-po-number").val();
var shipmentStatus = $("#form-shipment-status").val();
var supplier = $("#form-supplier").val();
var shipper = $("#form-shipper").val();
var departureDate = $("#form-departure-date").val();
var arrivalDate = $("#form-arrival-date").val();
var freightForwarder = $("#form-freight-forwarder").val();
var shippingMethod = $("#form-shipping-method").val();
var originCountry = $("#form-origin-country").val();
var data = {
shipment_id: shipment_id,
clientName: clientName,
poNumber: poNumber,
shipmentStatus: shipmentStatus,
supplier: supplier,
shipper: shipper,
departureDate: departureDate,
arrivalDate: arrivalDate,
freightForwarder: freightForwarder,
shippingMethod: shippingMethod,
originCountry: originCountry,
}
// Deliver the payload!
$.ajax({
type: "POST",
url: "st_update_shipment_query.php",
dataType:"JSON",
data: data,
success:function(response){
console.log("Successfully updated.");
},
error:function (xhr, ajaxOptions, thrownError){
console.log(xhr.status);
console.log(ajaxOptions);
console.log(thrownError);
}
});
});
最好的方法是什么?任何帮助表示赞赏:)如果需要,我可以澄清这个问题。
答案 0 :(得分:0)
我知道您想要将现有字段与替换字段进行比较,然后在名为update_log的表中的单个字段中输入已更改的字段
在ajax脚本中,首先运行SELECT以获取数据库中的当前值
$vRow = mysql_query("SELECT * FROM table WHERE shipment_id='$shipment_id'")
然后,foreach $ _POST,比较并添加字符串中的更改字段
foreach ($_POST as $vKey => $vValue)
{$vChangedFields.= ($_POST[$vKey] != $vRow[$vKey] ? ' ' . $vKey : '');}
$ vChangedFields现在包含由空格分隔的已更改字段的列表。请注意,您的帖子和表格中的字段需要具有相同的名称,或者不会比较为真实
答案 1 :(得分:0)
这是你的PHP。 $arr1
包含旧数据(您在数据库中获得的数据),$arr2
包含新数据(在$_POST
var中)。
$arr1 = array(
'fname' => 'John',
'lname' => 'Doe'
);
$arr2 = array(
'fname' => 'Nick',
'lname' => 'Doe'
);
$dif = array_diff_assoc($arr1, $arr2);
现在$dif
仅包含已更改的key=>values
。