#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. Эта проблема связана с параметрами привязки к выполняемому запросу.