2013-06-26 3 views
0

Я хочу удалить несколько строк из базы данных с помощью флажков. У меня есть рабочий скрипт для «Проверить все», но когда я хочу удалить один или два, ничего не происходит.Удаление нескольких строк из базы данных с помощью флажков

JavaScript

<script type="text/javascript"> 
jQuery(function($) { 
    $("form input[id='check_all']").click(function() { // triggred check 

     var inputs = $("form input[type='checkbox']"); // get the checkbox 

     for(var i = 0; i < inputs.length; i++) { // count input tag in the form 
      var type = inputs[i].getAttribute("type"); // get the type attribute 
       if(type == "checkbox") { 
        if(this.checked) { 
         inputs[i].checked = true; // checked 
        } else { 
         inputs[i].checked = false; // unchecked 
        } 
       } 
     } 
    }); 

    $("form input[id='submit']").click(function() { // triggred submit 

     var count_checked = $("[name='data[]']:checked").length; // count the checked 
     if(count_checked == 0) { 
      alert("Please select a comment(s) to delete."); 
      return false; 
     } 
     if(count_checked == 1) { 
      return confirm("Are you sure you want to delete these comment?"); 
     } else { 
      return confirm("Are you sure you want to delete these comments?"); 
      } 
    }); 
}); 
</script> 
<script type="text/javascript"> 

    $(document).ready(function(){ 
     $('.submit').click(function(){ 
      var checkValues = $('input[name=data[]]:checked').map(function() 
      { 
       return $(this).val(); 
      }).get(); 

      $.ajax({ 
       url: 'resources/ajax/ajax_delete_comment.php', 
       type: 'post', 
       data: { data: checkValues }, 
       success:function(data){ 

       } 
      }); 
     }); 
    }); 

</script> 

HTML/PHP

<form method="post" id="form"> 
Check All <input type="checkbox" id="check_all" value=""> 

Here im displaying record from database and <input name=\"data[]\" type=\"checkbox\" id=\"data\" value=" . $row['id'] . "> 

<input name="submit" class="submit" type="submit" value="Delete" id="submit"> 
</form> 

УДАЛЕНИЕ SCRIPT

if(isset($_POST['data'])) { 
    $id_array = $_POST['data']; // return array 
    $id_count = count($_POST['data']); // count array 

    for($i=0; $i < $id_count; $i++) { 
     $id = $id_array[$i]; 
     $sql = $db->query("DELETE FROM comments WHERE `id` = '$id'"); 
     if ($sql) 
      { 
       echo "success"; 
      } 
      else 
      { 
       echo "Failed to delete the comment."; 
      } 
    }} 

Таким образом, его работа для проверки всех, но Whe n проверять один или два объекта, ничего не случилось, может быть, кто-то мог бы помочь?

+0

Если вы посмотрите на консоль. вы видите, что запрос на отправку сообщений происходит в тех случаях, когда он «не работает»? (другими словами - что не работает? PHP или JavaScript?) Похоже, что это сработает, и если вы скажете, что оно работает со многими, то оно должно работать с одним. –

ответ

1

Javascript
Поскольку вы используете JQuery есть лучший способ :)

<script type="text/javascript"> 
    var is_activate = true; // we will track which input button was clicked :) 

    jQuery(function($) { 
    $("#form input#check_all").change(function() { 
     var inputs = $("#form input[type='checkbox']"); 
     if ($(this).is(":checked")) { 
     inputs.prop("checked", true); 
     // inputs.attr("checked", true); // if its not working 
     } 
     else { 
     inputs.removeAttr("checked"); 
     } 
    }); 

    // Track clicked button 
    $("#form input[type=submit]").on("click",function(e) { 
     is_activate = ($(this).hasClass("activate_btn")) ? true : false; 
    }); 

    $("#form").submit(function(e) { 
     e.preventDefault(); 
     var string = (is_activate) ? 'activate' : 'delete'; 
     var data = $(this).serialize(); 
     var checked = $(this).find("input[name='data[]']:checked").length; 
     if (checked == 0) { 
     alert("Please select a comment(s) to "+string+"."); 
     return false; 
     } 
     var text = "Are you sure you want to "+string+" these comment"+((checked == 1) ? "?" : "s?"); 
     if (confirm(text)) { 
     $.ajax({ 
      url: 'resources/ajax/'+((is_activate) ? 'ajax_activate_comment.php' : 'ajax_delete_comment.php'), 
      type: 'post', 
      data: data, 
      success: function(data) { 

      } 
     }); 
     } 
    }); 
}); 
</script> 

HTML

<form method="post" id="form"> 
    <label>Check All</label> 
    <input type="checkbox" id="check_all" value=""> 

    <label>Here im displaying record from database and</label> 
    <input name="data[]" type="checkbox" id="data1" value="1"> 
    <input name="data[]" type="checkbox" id="data2" value="2"> 

    <!-- Activate Button --> 
    <input class="activate_btn" type="submit" name="activate" value="Activate" id="submit"> 
    <!-- Delete Button --> 
    <input class="delete_btn" type="submit" name="delete" value="Delete" id="submit"> 
</form> 

PHP
Один запрос достаточно :)

<?php 
    if (isset($_POST['data'])) { 
    $id_array = $_POST['data']; 
    if (!empty($id_array)) { 
     $id_array = implode(",", $_POST['data']); // dont forget to sanitize 
     $sql = $db->query("DELETE FROM comments WHERE `id` IN (".$id_array.")"); 
    } 
    } 
?> 

И помните, что это нехорошо, что все это делается на стороне клиента.
Вы можете сделать POST запрос к одному файлу, так как ваша кнопка input имеет уникальное имя.
Итак, в вашем коде PHP вы можете найти, какая кнопка была нажата так.

<?php 
    if (isset($_POST["activate"])) { 
    $sql = $db->query("UPDATE comments SET status = '1' WHERE `id` IN (".$id_array.")"); 
    } 
    else { 
    $sql = $db->query("DELETE FROM comments WHERE `id` IN (".$id_array.")"); 
    } 
?> 

Посмотрите, как просто :) Не так ли?

+0

Вау, ты быстрый человек, он работает :). Можно добавить, другой submit, как активировать комментарий и присоединиться к нему вместе с этим скриптом удаления с URL-адресом для ajax_update_comment.php? –

+0

не могли бы вы показать мне образец? :) – bystwn22

+0

Я имею в виду добавление другого ввода в ту же форму с теми же флажками, но когда я нажимаю «Активировать», он должен отправлять данные в ajax_activate_comment.php. Кнопка Avtivate должна быть отделена от сценария удаления ajax, но я не знаю, возможно ли это, или я должен сделать другой javascript. Новая кнопка: <имя входного = "представить" класс = "активировать" Тип = "отправить" значение = "Активировать" ID = "отправить"> Update: $ SQL = $ db-> запрос («UPDATE comments SET status = '1» WHERE 'id' IN (". $ Id_array. ")"); –