Фокус проекта: Удалить список проверенных таблиц из формы.
Технические характеристики:
1.) Удалить действие с помощью <a href>
гиперссылка (НЕ <input type="submit"
2.) Я хотел бы действовать с AJAX, в том числе подтвердить & ошибка / успех ответы.
Состояние действия удаления: Наконец-то у меня работает код для удаления нескольких флажков. Посмотрите успешный фрагмент кода PHP ниже.
Замечания: успешное кодирование $ _POST в настоящее время обрабатывается на той же странице с помощью <input type="submit" name="delete>"
,
Я пытался заставить его работать, но не повезло. Может кто-нибудь, пожалуйста, посмотрите через кодирование & скрипт, чтобы увидеть, если вы можете обнаружить какие-либо ошибки?
Мои мысли (но неуверенные):
1) Аякс var formData
неправильно написано, чтобы добиться получения обоих $delete = $_POST['delete'];
а также $chkbx = $_POST['chkbx'];
2) вместо .click
за <a href"#" id="#btn_del"
может стоит попробовать .post
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" name="recordsForm" id="recordsForm">
ОБНОВЛЕНО (для спецификации # 1) обновил href
в href="deleteRecord.php"
<li class="button" id="toolbar-del">
<a href="#" title="Delete" id="btn_del">
<span class="icon-16-delete dead"></span>
Delete
</a>
</li>
Этот код в настоящее время включен в нижней части формы. Позже я хотел бы переместить его как функцию на отдельную страницу actions.php, которая будет включать дополнительные действия кнопок (редактирование, дублирование, архивирование и т. Д.). Сейчас я буду рад просто перенести его в deleteRecord.php страница & назовите это с этим AJAX.
<?
// Check if DELETE button active, start this
$delete = $_POST['delete'];
$chkbx = $_POST['chkbx'];
if($delete){
for($i=0;$i<$count;$i++){
$del_id = $chkbx[$i];
$sql = "DELETE FROM ".ID_TABLE." WHERE unit_id='".$del_id."'";
$result = mysqli_query($dbc,$sql);
}
// if successful redirect to delete_multiple.php
if($result){
echo "<meta http-equiv=\"refresh\" content=\"0;URL=records_manager.php\">";
}else{
echo "Error: No luck";
}
}
mysqli_close($dbc);
?>
// ajaxDelete.js
$(document).ready(function() {
// When TRASH button is clicked...
$('#btn_del').click(function(event) {
e.preventDefault(); // stop the form submitting the normal way
// and refreshing the page
// Get the form data // there are many ways to get this data using jQuery
// ---------------------------------- // (you can use the class or id also)
var formData = {
'chkbx' : $('input[name=chkbx]').val(),
'count' : $count[0]
// Process the form
// ================
$.ajax({
type : 'POST', // define the type of HTTP verb we want to use
url : 'deleteRecord.php', // the url where we want to POST
data : formData, // our data object
dataType : 'json', // what type of data do we expect back from the server
encode : true
})
// using the .done(),
// promise callback
.done(function(data) {
window.console.log(data); // log data to the console so we can see
// Handle ERRORS
if ( ! data.success) {
if (data.errors.chkbx) {
$('.Records_Found').addClass('has-error');
$('.Records_Found').append('<div class="help-block">'+ data.errors.chkbx + '</div>');
}
} // end if ERRORS
else {
$('.Records_Found').append('<div class="alert alert-success" id="valid_success">'+ data.message + '</div>');
// After form submission,
// redirect a user to another page
window.location = 'records_manager.php';
}
})
.fail(function(data) { // promise callback
window.console.log(data); }); // show any errors in console
// NOTE: it's best to remove for production
event.preventDefault(); // stop the form from submitting the normal way
// and refreshing the page
}); // end submit button
}); // end document ready
<?php
// FUNCTION to DELETE
// ===========================
// :checked existing unit data
$errors = array(); // array to hold validation errors
$data = array(); // array to pass back data
if ( empty($_POST['chkbx'])) // if empty, populate error
$errors['chkbx'] = 'No items have been checked yet.';
// ERROR! Return a response
if ( ! empty($errors)) {
$data['success'] = false; // any errors = return a success boolean of FALSE
$data['errors'] = $errors; // return those errors
} else {
// NO ERROR... Carry on // Process the form data
require_once('config.php'); // Connect to the database
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
or die ('Error connecting to MySQL server.'.$dbc);
// Check if DELETE
$delete = $_POST['delete'];
$chkbx = $_POST['chkbx'];
$count = $_POST['count'];
if($delete){
for($i=0;$i<$count;$i++){
$del_id = $chkbx[$i];
$sql = "DELETE FROM ".ID_TABLE." WHERE unit_id='".$del_id."'";
$result = mysqli_query($dbc,$sql);
}
// if successful redirect
if($result){
echo "<meta http-equiv=\"refresh\" content=\"0;URL=records_manager.php\">";
}else{
echo "Error: No luck";
}
}
mysqli_close($dbc); // close DB connection
}
$data['success'] = true; // show a message of success
$data['message'] = 'Success!'; // and provide a true success variable
}
echo json_encode($data); // return all our data to an AJAX call
} // end else NO ERRORS, process form
?>
Копая множество закладок, я нашел пример того, чего я надеялся достичь. После игры с фрагментами кодов я, наконец, заставил работать ajax, как я надеялся достичь на этом этапе проекта.
Чтобы помочь другим в их поиске, ниже, я предоставил все кодирование для ajax / jq / js & PHP, который работал безупречно в моих тестах.
outside of the form
, NOT an input button
) связан с deletedRecord.php
, но скрипт переопределяет ссылку с e.preventDefault()
deletedRecord.php
через AJAXdeleteRecord.php
взрывает массив, счетчики общее количество проверенных идентификаторов, и, наконец, проходит по запросу, чтобы удалить каждый.1
echo’d назад, чтобы вызвать успешное действиеНадеюсь, это поможет кому-то там. Если кто-то видит какие-либо другие недостатки, которые я мог пропустить, пожалуйста, не стесняйтесь делиться ими для большего блага. Приветствия.
Заметки:
1.) Обновил изображение (кнопка) href
в href="deleteRecord.php"
2.) Исследовал & нашел лучше подход это уменьшило число только проверенных (я думал, что это будет более эффективно (быстрее), если таблица увеличится до большого числа строк.
$(document).ready(function() {
$('#btn_del').click(function(e) {
e.preventDefault();
page = $(this).attr("href");
ids = new Array()
a = 0;
$(".chk:checked").each(function(){
ids[a] = $(this).val();
a++;
})
// alert(ids);
if (confirm("Are you sure you want to delete these courses?")) {
$.ajax({
url : page,
type : "POST",
data : "id="+ids,
dataType : 'json',
success : function(res) {
if ( res == 1 ) {
$(".chk:checked").each(function() {
$(this).parent().parent().remove();
}) // end if then remove table row
} // end if res ==1
} // end success response function
}) // end ajax
} // end confirmed
return false;
}); // end button click function
}); // end doc ready
<?php
require_once('config.php'); // Connect to the database
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
or die ('Error connecting to MySQL server.'.$dbc);
$del_id = explode(",",$_POST['id']);
$count = count($del_id);
if (count($count) > 0) {
foreach ($del_id as $id) {
$sql = "DELETE FROM ".ID_TABLE."WHERE unit_id='" . $id . "'";
$result = mysqli_query($dbc,$sql)
or die(mysqli_error($dbc));
} // end for each as
mysqli_close($dbc); // close MySQL
echo json_encode(1); // Return json res == 1
// this is used for the SUCCESS action
} // end if count > 0
?>
Других решений пока нет …