mysql — AJAX для успешного php :: delete проверенный список таблиц :: использование гиперссылки НЕ вводится

Фокус проекта: Удалить список проверенных таблиц из формы.
Технические характеристики:
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>

Фрагмент кода PHP:

Этот код в настоящее время включен в нижней части формы. Позже я хотел бы переместить его как функцию на отдельную страницу 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

// 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

deleteRecord.php

<?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
?>

0

Решение

Копая множество закладок, я нашел пример того, чего я надеялся достичь. После игры с фрагментами кодов я, наконец, заставил работать ajax, как я надеялся достичь на этом этапе проекта.

Чтобы помочь другим в их поиске, ниже, я предоставил все кодирование для ajax / jq / js & PHP, который работал безупречно в моих тестах.

Как работает этот код

  • Кнопка (гиперссылка outside of the form, NOT an input button) связан с deletedRecord.php, но скрипт переопределяет ссылку с e.preventDefault()
  • JQ используется для построения массива проверенные идентификаторы строк & отправить их deletedRecord.php через AJAX
  • deleteRecord.php взрывает массив, счетчики общее количество проверенных идентификаторов, и, наконец, проходит по запросу, чтобы удалить каждый.
  • После успешного завершения ответ 1 echo’d назад, чтобы вызвать успешное действие

Надеюсь, это поможет кому-то там. Если кто-то видит какие-либо другие недостатки, которые я мог пропустить, пожалуйста, не стесняйтесь делиться ими для большего блага. Приветствия.

ajaxDelete.js

Заметки:
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

deleteRecord.php

<?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
?>
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]