2017-12-15 13 views
1

私は、ユーザーがテーブルの行を編集/保存できるHTMLテーブルを持っています。表の行にある<td>の1つには、ドロップダウンだけが含まれ、他のすべての列と同様に実際のテキストは含まれません。私がsaveを押すたびに、私のAJAXリクエストは<td>を除いてすべてのデータをupdate.phpに送信します。私はAJAXの成功関数のドロップダウンの値を取得していますが、PHPのエラーログを確認すると、ドロップダウンの値を保持する変数checkeredは定義されていません。

私のコードを修正して、checkered変数のwhatsも読み込み、それを私のAJAXリクエストでも送信できるようにするにはどうすればいいですか?

はJavaScript(私の機能の開始後最初の2行は、ドロップダウン選択の値を取得するものです):

$(document).on("click", "#table .edit", function() { 

    var $row = $(this).parents('tr'); 
    var checkered = $row.find($(".selected")).val(); 

    var $this = $(this); 

    $this.closest('tr').find('select').attr("disabled", false); 

    var tds = $this.closest('tr').find('td').filter(function() { 
    return $(this).find('.edit').length === 0; 
    }); 
    if ($this.val() === 'Edit') { 
    $this.val('Save'); 

    tds.not('.dropdown-select').prop('contenteditable', true); 

    } else { 
    var isValid = true; 
    var errors = ''; 
    var elements = tds; 
    var dict = {}; 
    elements.each(function (index, element) { 
     var type = $(this).attr('class'); 
     var value = (element.tagName == 'INPUT') ? $(this).val() : $(this).text(); 

     // ----- Switch statement that provides validation for each table cell ----- 
     switch (type) { 
     case "species": 
      if (value) { 
       dict["Species"] = value; 
       break; 
      } 
      else { 
      isValid = false; 
      errors += "Please enter a valid Species\n"; 
      } 
      break; 
     case "container": 
      if (value) { 
       dict["Container"] = value; 
       break; 
      } 
      else { 
      isValid = false; 
      errors += "Please enter Yes or No\n"; 
      } 
      break; 
     case "supp-name": 
      if (value) { 
       dict["Supplier-Name"] = value; 
      break; 
      } 
      else { 
      isValid = false; 
      errors += "Please enter a valid Supplier Name\n"; 
      } 
      break; 
     case "supp-sku": 
      if (value) { 
       dict["Supplier-SKU"] = value; 
       break; 
      } 
      else { 
      isValid = false; 
      errors += "Please enter a valid Supplier SKU\n"; 
      } 
      break; 
     case "newsku": 
      if (value) { 
       dict["Current-SKU"] = value; 
      break; 
      } 
      else { 
      isValid = false; 
      errors += "Please enter a valid Current SKU\n"; 
      } 
      break; 
     case "mill": 
      if (value) { 
       dict["Mill"] = value; 
       break; 
      } 
      else { 
      isValid = false; 
      errors += "Please enter a valid Mill\n"; 
      } 
      break; 
     case "lead-time": 
      if (value) { 
       dict["Lead-Time"] = value; 
       break; 
      } 
      else { 
      isValid = false; 
      errors += "Please enter a valid Lead Time\n"; 
      } 
      break; 
     case "less-than-unit-cost": 
      if (value) { 
       dict["Less-Than-Unit-Cost"] = value; 
       break; 
      } 
      else { 
      isValid = false; 
      errors += "Please enter a valid Less Than Unit Cost\n"; 
      } 
      break; 
     case "unit-cost": 
      if (value) { 
       dict["Unit-Cost"] = value; 
       break; 
      } 
      else { 
      isValid = false; 
      errors += "Please enter a valid Unit Cost\n"; 
      } 
      break; 
     case "mill-direct-cost": 
      if (value) { 
       dict["Mill-Direct-Cost"] = value; 
      break; 
      } 
      else { 
      isValid = false; 
      errors += "Please enter a valid Mill Direct Cost\n"; 
      } 
      break; 
     case "unit-quantity": 
      if (value) { 
       dict["Unit-Quantity"] = value; 
      break; 
      } 
      else { 
      isValid = false; 
      errors += "Please enter a valid Unit Quantity\n"; 
      } 
      break; 
     case "bundle-cost": 
      if (value) { 
       dict["Bundle-Cost"] = value; 
       break; 
      } 
      else { 
      isValid = false; 
      errors += "Please enter a valid number\n"; 
      } 
      break; 
     case "mixed-unit-price": 
      if (value) { 
       dict["6+-Mixed-Unit-Price"] = value; 
      break; 
      } 
      else { 
      isValid = false; 
      errors += "Please enter a valid number\n"; 
      } 
      break; 
     case "uom": 
      if (value) { 
       dict["UOM"] = value; 
       break; 
      } 
      else { 
      isValid = false; 
      errors += "Please enter a valid UOM\n"; 
      } 
      break; 
     case "mill-loc": 
      if (value) { 
       dict["Mill-Location"] = value; 
       break; 
      } 
      else { 
      isValid = false; 
      errors += "Please enter a valid Mill Location\n"; 
      } 
      break; 
     case "id": 
       dict["ID"] = value; 
       break; 

     } 
    }) 
    if (isValid) { 
     console.log(dict); 
     console.log(checkered); 
     $this.val('Edit'); 
     tds.prop('contenteditable', false); 
     $this.closest('tr').find('select').attr("disabled", true); 
     var request = $.ajax({ 
      type: "POST", 
      url: "update.php", 
      data: dict, checkered, 
      success: function(data){ 
       console.log(dict); 
       console.log(checkered); 
      } 
     }); 

     request.done(function (response, textStatus, jqXHR){ 
      if(JSON.parse(response) == true){ 
      console.log("row updated"); 
      } else { 
      console.log("row failed to updated"); 
      console.log(response); 
      console.log(textStatus); 
      console.log(jqXHR); 
      } 
     }); 
     } 
    } 
}); 

update.php

$species = $_POST['Species']; 
    $container = $_POST['Container']; 
    $supp_name = $_POST['Supplier-Name']; 
    $supp_sku = $_POST['Supplier-SKU']; 
    $current_sku = $_POST['Current-SKU']; 
    $mill = $_POST['Mill']; 
    $lead_time = $_POST['Lead-Time']; 
    $less_than_unit_cost = $_POST['Less-Than-Unit-Cost']; 
    $unit_cost = $_POST['Unit-Cost']; 
    $mill_direct_cost = $_POST['Mill-Direct-Cost']; 
    $unit_quantity = $_POST['Unit-Quantity']; 
    $bundle_cost = $_POST['Bundle-Cost']; 
    $mixed_unit_price = $_POST['6+-Mixed-Unit-Price']; 
    $uom = $_POST['UOM']; 
    $mill_loc = $_POST['Mill-Location']; 
    $id = $_POST['ID']; 
    $selected = $_POST['checkered']; 

    $host="xxxxxxx"; 
    $dbName="xxxx"; 
    $dbUser="xxxxxxxxxxxx"; 
    $dbPass="xxxxxxxxx"; 

    $pdo = new PDO("sqlsrv:Server=$host;Database=$dbName", $dbUser, $dbPass); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $sql = "UPDATE Example_Table SET [Species] = '$species', 
    [Container] = '$container', 
    [Supplier-Name] = '$supp_name', 
    [Supplier-SKU] = '$supp_sku', 
    [Current-SKU] = '$current_sku', 
    [Mill] = '$mill', 
    [Lead-Time] = '$lead_time', 
    [Less-Than-Unit-Cost] = '$less_than_unit_cost', 
    [Unit-Cost] = '$unit_cost', 
    [Mill-Direct-Cost] = '$mill_direct_cost', 
    [Unit-Quantity] = '$unit_quantity', 
    [Bundle-Cost] = '$bundle_cost', 
    [6+-Mixed-Unit-Price] = '$mixed_unit_price', 
    [UOM] = '$uom', 
    [Mill-Location] = '$mill_loc', 
    [Price-Selected] = '$selected' 

WHERE ID = '$id'"; 

    $stmt = $pdo->prepare($sql); 
    $result = $stmt->execute(); 
    echo json_encode($result); 
+0

この行を 'var checkered = $ row.find($(" select ")).val();'で区切ってはいけません。 – claudio

+0

@claudio私はそれに切り替えると動作しません – Rataiczak24

答えて

2

あなたは、あなたの定義ajaxデータが間違っている場合はType: PlainObject or String or Arrayである必要がありますので、dicオブジェクトにchekered値を追加する必要があります:

dict['checkered'] = checkered; 

var request = $.ajax({ 
     type: "POST", 
     url: "update.php", 
     data: dict, 
     success: function(data){ 
      console.log(dict); 
      console.log(checkered); 
     } 
    }); 
関連する問題