检查在PHP / jQuery中更新了哪些表单字段

时间:2013-11-27 21:21:22

标签: javascript php jquery mysql sql

我有一个包含约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);
            }
        });

  });    

最好的方法是什么?任何帮助表示赞赏:)如果需要,我可以澄清这个问题。

2 个答案:

答案 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