2013-11-27 32 views
0

我有一个带有20个字段的表单来更新记录。当用户提交表格时,我想记录我的update_log表中更新(更改)的字段以及更新后的值,用户名和时间。 (例如:“Andrew在11月22日下午3点将'供应商'更新为'Acme Inc.')检查哪些表单字段在PHP/jQuery中更新

以前,我在单场自动保存的情况下取得了成功,因为只要单现场更新我可以登录,但是对于具有20个字段的表单,这会更困难,因为我一次更新整个表单并且不希望记录没有更改的字段

这里是JavaScript I “M使用到POST升级到PHP文件,运行使用$_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

在PHP中:http://php.net/array_diff_assoc –

回答

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

+0

你应该检查一下,收集你的输入值与JQuery,而不是一个一个地去做。 [链接](http://api.jquery.com/serializeArray/) –

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现在包含一个列表Ø f用空格分隔的更改的字段。请注意,您的帖子中和您的表格中的字段要求使用相同的名称,否则将无法进行比较。