PHP AJAX — обновление/редактирование данных вставляет как новые данные вместо обновления

#php #jquery #ajax #bootstrap-4 #datatable

Вопрос:

Вставка и удаление данных работает нормально. Однако edit это не обновляет данные. Вместо этого он вставляет новый..

У меня есть INSERT amp; UPDATE в одном файле, сделанном с if conditions :

 lt;?php  include ("./backend/config/connection.php"); include ("./backend/config/function.php");  if (isset($_POST["traffic_operation"])) {  if (isset($_POST["traffic_operation"]) == "Add") {  $traffic_doc = "";   if ($_FILES["traffic_doc"]["name"] != "") {  $traffic_doc = upload_image();  }  $statement = $connection-gt;prepare('INSERT INTO traffic_violations (  plateNumber,  carModel,  carColor,  violationType,  ownerGender,  violationDateTime,  violationLocation,  workingShift,  violationAction,  violationStatement,  cccEmployee  ) VALUES (  :plate_number,  :car_model,  :car_color,  :violation_type,  :owner_gender,  :violation_date,  :violation_location,  :working_shift,  :violation_action,  :traffic_doc,  :ccc_employee  )  ');  $result = $statement-gt;execute([  ":plate_number" =gt; $_POST["plate_number"],  ":car_model" =gt; $_POST["car_model"],  ":car_color" =gt; $_POST["car_color"],  ":violation_type" =gt; $_POST["violation_type"],  ":owner_gender" =gt; $_POST["owner_gender"],  ":violation_date" =gt; $_POST["violation_date"],  ":violation_location" =gt; $_POST["violation_location"],  ":working_shift" =gt; $_POST["working_shift"],  ":violation_action" =gt; $_POST["violation_action"],  ":traffic_doc" =gt; $traffic_doc,  ":ccc_employee" =gt; $_POST["ccc_employee"],  ]);  if (!empty($result)) {  echo 'Traffic Violation Added';  }  }   if ($_POST["traffic_operation"] == "Edit") {  $traffic_doc = "";   if ($_FILES["traffic_doc"]["name"] != "") {  $traffic_doc = upload_image();  }   $statement = $connection-gt;prepare('UPDATE traffic_violations SET  plateNumber = :plate_number,  carModel = car_model,  carColor = car_color,  violationType = violation_type,  ownerGender = owner_gender,  violationDateTime = violation_date,  violationLocation = violation_location,  workingShift = working_shift,  violationAction = violation_action,  violationStatement = traffic_doc,  cccEmployee = ccc_employee,  WHERE id = :id');  $result = $statement-gt;execute([  ":id" =gt; $_POST["violation_id"],  ":plate_number" =gt; $_POST["plate_number"],  ":car_model" =gt; $_POST["car_model"],  ":car_color" =gt; $_POST["car_color"],  ":violation_type" =gt; $_POST["violation_type"],  ":owner_gender" =gt; $_POST["owner_gender"],  ":violation_date" =gt; $_POST["violation_date"],  ":violation_location" =gt; $_POST["violation_location"],  ":working_shift" =gt; $_POST["working_shift"],  ":violation_action" =gt; $_POST["violation_action"],  ":traffic_doc" =gt; $traffic_doc,  ":ccc_employee" =gt; $_POST["ccc_employee"],  ]);  if (!empty($result)) {  echo "Traffic Violation Updated";  }  } } ?gt;  

Я также использую Ajax:

 $(document).ready(function() {  $("#add_btn").on('click', function() {  $("#traffic_violation_form")[0].reset();  $(".violation-title").text("Add New Violation");  $("#traffic_action").val("Add");  $("#traffic_operation").val("Add");  $("#traffic_doc").html('');  });   var dataTable = $('.violation_data').DataTable({  "processing": true,  "serverSide": true,  "order": [],  "ajax": {  url: "/traffic-fetch",  type: "POST"  },  "columnDefs": [  {  "target": [0, 3, 4],  "orderable": false  }  ]  });   // For Inserting New Violation  $(document).on('submit', '#traffic_violation_form', function(e){  e.preventDefault();   var plateNumber = $("#plate_number").val();  var carModel = $("#car_model").val();  var carColor = $("#car_color").val();  var ownerGender = $("#owner_gender").val();  var violationType = $("#violation_type").val();  var violationLocation = $("#violation_location").val();  var workingShift = $("#working_shift").val();  var violationAction = $("#violation_action").val();  var violationStatement = $("#traffic_doc").val().split('.').pop().toLowerCase();  var cccEmployee = $("#ccc_employee").val();   if(violationStatement != '') {  if( $.inArray(violationStatement, ['jpg', 'jpeg', 'JPG', 'JPEG', 'png', 'PNG', 'webp', 'WEBP']) == -1 ) {  alert('Invalid file type.');  $("#traffic_doc").val();  return false;  }  }  if( plateNumber !='' amp;amp; carModel !='' amp;amp; carColor !='' amp;amp; ownerGender !='' amp;amp; violationType !='' amp;amp; violationLocation !='' amp;amp; workingShift !='' amp;amp; violationAction !='' amp;amp; cccEmployee !='') {  $.ajax({  url: "/traffic-insert",  method: "POST",  data: new FormData(this),  contentType: false,  cache: false,  processData: false,  success: function(data) {  $("#traffic_violation_form")[0].reset();  $("#trafficModal").modal('hide');  dataTable.ajax.reload();  }  });  }  else {  alert('Nothing should left empty!');  }  });   // For Updating Violation  $(document).on('click', '.update', function(){  var violation_id = $(this).attr("id");  $.ajax({  url:"/traffic-edit",  method:"POST",  data:{violation_id:violation_id},  dataType:"json",  success:function(data)  {  $("#trafficModal").modal('show');  $(".violation-title").text("Edit Violation");    $("#violation_id").val(violation_id);   $("#plate_number").val(data.plate_number);  $("#car_model").val(data.car_model);  $("#car_color").val(data.car_color);  $("#owner_gender").val(data.owner_gender);  $("#violation_type").val(data.violation_type);  $("#violation_location").val(data.violation_location);  $("#working_shift").val(data.working_shift);  $("#violation_action").val(data.violation_action);  $("#ccc_employee").val(data.ccc_employee);   $("#user_uploaded_image").html(data.violationStatement);   $("#traffic_action").val("Edit");  $("#traffic_operation").val("Edit");  }  })  });   $(document).on('click', '.delete', function(){  var violation_id = $(this).attr("id");  if(confirm("Are you sure you want to delete this?"))  {  $.ajax({  url:"/traffic-delete",  method:"POST",  data:{violation_id:violation_id},  success:function(data)  {  alert(data);  dataTable.ajax.reload();  }  });  }  else  {  return false;   }  }); });  

И вот HTML форма:

 lt;form name="traffic_violation_form" id="traffic_violation_form" action="/traffic-process" method="POST" enctype="multipart/form-data"gt;  lt;div class="modal-body" id="violation-data"gt;  lt;div class="form-row"gt;  lt;div class="col-md-6 mb-3"gt;  lt;div class="form-group"gt;  lt;label class="form-control-label" for="plate_number"gt;Plate Numberlt;/labelgt;  lt;div class="input-group"gt;  lt;div class="input-group-prepend"gt;  lt;span class="input-group-text"gt;Plate #lt;/spangt;  lt;/divgt;  lt;input type="text" class="form-control" id="plate_number" name="plate_number" gt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;div class="col-md-6 mb-3"gt;  lt;div class="form-group"gt;  lt;label class="form-control-label" for="car_model"gt;Vehicle Modellt;/labelgt;  lt;div class="input-group"gt;  lt;input type="text" class="form-control" id="car_model" name="car_model" gt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;div class="col-md-6 mb-3"gt;  lt;div class="form-group"gt;  lt;label class="form-control-label" for="car_color"gt;Vehicle Colorlt;/labelgt;  lt;div class="input-group"gt;  lt;input type="text" class="form-control" id="car_color" name="car_color" gt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;div class="col-md-6 mb-3"gt;  lt;div class="form-group"gt;  lt;label class="form-control-label" for="owner_gender"gt;Owner Genderlt;/labelgt;  lt;div class="input-group"gt;  lt;select class="form-control" name="owner_gender" id="owner_gender" data-toggle="select" gt;  lt;option value="" disabled selectedgt;Select Genderlt;/optiongt;  lt;option value="Male"gt;Malelt;/optiongt;  lt;option value="Female"gt;Femalelt;/optiongt;  lt;option value="No driver"gt;No Driverlt;/optiongt;  lt;/selectgt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;div class="col-md-6 mb-3"gt;  lt;div class="form-group"gt;  lt;label class="form-control-label" for="violation_type"gt;Violation Typelt;/labelgt;  lt;select data-toggle="select" class="form-control" name="violation_type" id="violation_type" gt;  lt;option value="" disabled selectedgt;Select violation typelt;/optiongt;  lt;option value="Speeding"gt;Speedinglt;/optiongt;  lt;option value="Drifting"gt;Driftinglt;/optiongt;  lt;option value="Pass traffic light"gt;Pass traffic lightlt;/optiongt;  lt;/selectgt;  lt;/divgt;  lt;/divgt;  lt;div class="col-md-6 mb-3"gt;  lt;div class="form-group"gt;  lt;label class="form-control-label" for="violation_location"gt;Violation Locationlt;/labelgt;  lt;select class="form-control" name="violation_location" id="violation_location" data-toggle="select" gt;  lt;option value="" disabled selectedgt;Select Locationlt;/optiongt;  lt;option value="Baylasun"gt;Baylasunlt;/optiongt;  lt;option value="Baylasun Hotel"gt;Baylasun Hotellt;/optiongt;  lt;option value="AL-Waha"gt;AL-Wahalt;/optiongt;  lt;option value="Al-Morooj"gt;Al-Moroojlt;/optiongt;  lt;option value="Royal Green"gt;Royal Greenlt;/optiongt;  lt;option value="Beach Towers"gt;Beach Towerslt;/optiongt;  lt;option value="Emmar Building"gt;Emmar Buildinglt;/optiongt;  lt;option value="Industrial Area (East)"gt;Industrial Area (East)lt;/optiongt;  lt;option value="Industrial Area (West)"gt;Industrial Area (West)lt;/optiongt;  lt;option value="Hejaz Gate"gt;Hejaz Gatelt;/optiongt;  lt;option value="Gate 3"gt;Gate 3lt;/optiongt;  lt;option value="Marina 1"gt;Marina 1lt;/optiongt;  lt;option value="Marina 2"gt;Marina 2lt;/optiongt;  lt;option value="Marina 3"gt;Marina 3lt;/optiongt;  lt;option value="Tala Garden"gt;Tala Gardenlt;/optiongt;  lt;option value="AL-Shorooq"gt;AL-Shorooqlt;/optiongt;  lt;option value="Yam Beach"gt;Yam Beachlt;/optiongt;  lt;option value="Sales Center"gt;Sales Centerlt;/optiongt;  lt;/selectgt;  lt;/divgt;  lt;/divgt;  lt;div class="col-md-6 mb-3"gt;  lt;div class="form-group"gt;  lt;label class="form-control-label" for="violation_date"gt;Violation Created Atlt;/labelgt;  lt;input class="form-control" type="datetime-local" name="violation_date" id="violation_date" gt;  lt;/divgt;  lt;/divgt;  lt;div class="col-md-6 mb-3"gt;  lt;div class="form-group"gt;  lt;label class="form-control-label" for="working_shift"gt;Working Shiftlt;/labelgt;  lt;select class="form-control" name="working_shift" id="working_shift" data-toggle="select" gt;  lt;option value="" disabled selectedgt;Select Shiftlt;/optiongt;  lt;option value="Morning"gt;Morning (A)lt;/optiongt;  lt;option value="Evening"gt;Evening (B)lt;/optiongt;  lt;option value="Night"gt;Night (C)lt;/optiongt;  lt;/selectgt;  lt;/divgt;  lt;/divgt;  lt;div class="col-md-6 mb-3"gt;  lt;div class="form-group"gt;  lt;label class="form-control-label" for="traffic_doc"gt;Violation Statementlt;/labelgt;  lt;input type="file" class="form-control" id="traffic_doc" name="traffic_doc" gt;  lt;span id="user_uploaded_image"gt;lt;/spangt;  lt;/divgt;  lt;/divgt;  lt;div class="col-md-6 mb-3"gt;  lt;div class="form-group"gt;  lt;label class="form-control-label" for="ccc_employee"gt;CCC Employeelt;/labelgt;  lt;input type="text" class="form-control" id="ccc_employee" name="ccc_employee" gt;  lt;/divgt;  lt;/divgt;  lt;div class="col-md-12 mb-3"gt;  lt;div class="form-group"gt;  lt;label class="form-control-label" for="violation_action"gt;Violation Actionlt;/labelgt;  lt;textarea class="form-control" name="violation_action" id="violation_action" gt;lt;/textareagt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;div class="modal-footer"gt;  lt;input type="hidden" name="violation_id" id="violation_id" /gt;  lt;input type="hidden" name="traffic_operation" id="traffic_operation" /gt;  lt;input type="submit" name="traffic_action" id="traffic_action" class="btn btn-primary" value="Add" /gt;   lt;/divgt;  lt;/formgt;  

Комментарии:

1. Я только что заметил, if (isset($_POST["traffic_operation"]) == "Add") что это всегда будет ложно, потому что вы сравниваете результат isset (), который может быть истинным/ложным, только со строкой «Добавить».

Ответ №1:

Проблема в вашем состоянии, которое вы пытаетесь сравнить с «Добавить».

Вывод $_POST[«traffic_operation»]) будет ИСТИННЫМ ИЛИ ЛОЖНЫМ.

Поэтому замените нижеприведенную строку

 if (isset($_POST["traffic_operation"]) == "Add")  

с

 if ( (isset($_POST["traffic_operation"]) AND ($_POST["traffic_operation"] == "Add") )  

Комментарии:

1. Хорошо, но теперь у меня ошибка… SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens on line 91

2. Эта проблема связана с параметрами привязки к выполняемому запросу.