代码之家  ›  专栏  ›  技术社区  ›  John Beasley

每次单击后查询重复

  •  0
  • John Beasley  · 技术社区  · 5 年前

    我有一个附加功能,可以运行插入查询(使用PDO)。

    第一个插件相应地工作。这是第二次运行,之后的每次运行都会导致查询重复2次。

    我不知道为什么会发生这种情况。

    用户进行选择,这将填充一个数据表(示例1)。然后,他们可以选择一条记录(或通道)来填充另一个数据表(示例2)。

    以下是首次点击事件:

    $('#example1').on('click', 'tr > .laneClick', function(e){
      e.preventDefault();
      const dataTable = $('#example1').DataTable();
      const rowData = dataTable.row($(this).closest('tr')).data();
    
      let partnerCode = rowData['partner_code'];
      let partnerName = rowData['partner_name'];
      let groupName = rowData['groupname'];
    
      let lanecriteria = {
        partnerCode: partnerCode,
        partnerName: partnerName,
        groupName: groupName
      }
    
      displayLaneRecords(lanecriteria); 
    });
    

    这是函数displayLaneRecords,它在.lane单击单击事件后显示名为“example2”的第二个数据表:

    function displayLaneRecords(lanecriteria){
      
      if(lanecriteria == ""){
        let data = '';
      }
      else{ 
        let data = {
            lanecriteria: {
                partnerCode: lanecriteria.partnerCode,
                vesselProfile: lanecriteria.vesselProfile,
                salesRep: lanecriteria.salesRep
            }
        }
      }
    
      $.ajax({
        url: 'api/getLaneData.php',
        type: 'POST',
        data: data,
        dataType: 'html',
        success: function(data, textStatus, jqXHR){
          var jsonObject = JSON.parse(data);    
          var table = $('#example2').DataTable({    
            "data": jsonObject,
            "columns": [  
              // data columns
            ],
            "dom": 'Bfrtip',
            "buttons": [
              {
                text: '<i class="fa fa-plus"></i> Add Lane',
                className: 'addLane btn btn-primary btn-sm',
                action: function (e, dt, node, config){
                  // opens the form for processing
                  $('#addLaneModal').modal('show'); 
                }
              }
            ]
          });
        },
        error: function(jqHHR, textStatus, errorThrown){
         console.log('fail: '+ errorThrown);
         return false;
        }
      }); // end ajaxcall
      
      // here is where the form process will occur      
    
    } // end displayLaneRecords();
    

    正如您将看到的,表单过程将在displayLaneRecords()函数中发生。我必须这样做,这样当过程完成时,我就可以在不刷新的情况下重新填充数据表。

    以下是表单流程:

    $('#addLaneSubmit').on('click', function(e){
      e.preventDefault();
    
      let partnerCode = $('#addlanepartnercode').val();
      let partnerName = $('#addlanepartnername').val();
      let groupName = $('#addlanegroupname').val();
    
      let addlanecriteria = {
        partnerCode: partnerCode,
        partnerName: partnerName,
        groupName: groupName
      }
    
      $.post('api/editLane.php', {addlanecriteria:addlanecriteria}, function(data){
        if(data.indexOf('Error') > 1){
            $('.message').text(data);
            $('#errorModal').modal('show');
            return false();
        }
        else{
            $('.message').text(data);
            $('#messageModal').modal('show');
            $('#messageModal').on('hidden.bs.modal', function(){
                $("#addLaneModal").modal('hide');                   
                displayLaneRecords(lanecriteria); // call displayLaneRecords to refresh the table
            });
        } 
      });
    });
    

    实际的PHP进程editLane.PHP看起来像这样:

    <?php
      if(isset($_POST['addlanecriteria'])){
        $value = $_POST['addlanecriteria'];
    
        $partnerCode = isset($value['partnerCode']) ? $value['partnerCode'] : '';
        $partnerName = isset($value['partnerName']) ? $value['partnerName'] : '';
        $groupName = isset($value['groupName']) ? $value['groupName'] : '';
    
        try{
          $dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
          $insert = $dbc->prepare("INSERT INTO table (`partner_code`, `partner_name`, `group_name`) VALUES (:newpartnercode, :newpartnername, :newgroupname)");
    
          $insert->execute([
            'newpartnercode' => $partnerCode ,
            'newpartnername' => $partnerName ,
            'newgroupname' => $groupName
          ]);
    
          if($insert){
            echo "Success: New Lane has been added.";
          }
        }
        catch(PDOException $e){
          echo "Error: " . $e->getMessage();
        }
      }
    ?>
    

    我尽量减少代码。

    以上所有操作均无任何可见错误。提交表单时,一条新记录将插入表中,数据表将刷新,而页面不会刷新。

    当用户添加另一条记录时,就会出现问题——查询重复,并且插入了2条记录,而不是插入1条记录。如果他们添加另一条记录,查询将插入4条记录。

    接下来我可以尝试什么?

    0 回复  |  直到 5 年前
    推荐文章