Я хочу удалить несколько строк из базы данных с помощью флажков. У меня есть рабочий скрипт для «Проверить все», но когда я хочу удалить один или два, ничего не происходит.
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>
УДАЛЕНИЕ СКРИПТА
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."; } }}
Так что его работа для проверки всех, но когда я проверяю один или два объекта, ничего не случилось, может быть, кто-то мог бы помочь?
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.")" ); } ?>
Посмотрите, как просто 🙂 Не так ли?