2015-11-13 2 views
1

Я пытаюсь удалить строки из моей базы данных sql, используя checkbox. Это работает нормально, пока отмечен только один checkbox. Но я также хочу, чтобы было возможно удалить несколько строк. Я видел много примеров, но я не могу заставить его работать. Надеюсь, кто-нибудь здесь может мне помочь.Удалите несколько строк с помощью JQuery

Так первый файл result.php (здесь все строки/таблица создана):

while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_BOTH)) { 
     echo "<tr>"; 
     echo "<td><input type='checkbox' name='id[]' class='toedit' value='" . $row[0] . "'></td>"; 
     echo "<td>" . $row[1] . "</td>"; 
     echo "<td>" . $row[2] . "</td>"; 
     echo "</tr>"; 
    } 

    echo "</table>"; 

Этот файл включен в мой основной файл HTML (main.html), вот Jquery, а также ,

Jquery переменные отправки chechbox в delete.php файл:

<script type="text/javascript"> 
    $(".deletelogg").on('click', function(){ 
      $.ajax({ 
       type: 'POST', 
       url: "php/delete.php", 
       data: {id:$('.toedit:checked:first').val()}, 
       success: function(data) { 
        alert(data); 
        $("p").text(data); 
       } 
      }); 
    }); 
    </script> 

Последнее в моем файле delete.php:

include 'connect-database.php'; 

for ($i = 0; $i < count($_POST['id']); $i++) { 
    if ($_POST['id'][$i] != "") { 
     echo $_POST['id'] ; 
     $sql = "DELETE FROM Logg Where LoggID LIKE '".$_POST['id']."'"; 
     $stmt = sqlsrv_query($conn, $sql); 
     if ($stmt == false) { 
      die(print_r(sqlsrv_errors(), true)); 
     } 
    } 
} 

Я пытался сделать массив, содержащий все id от checkbox, но это не сработало ... какие-либо просьбы о помощи?

+0

Вы не можете сделать это совсем так. Вам нужно проанализировать ваши значения в запросе, если вы передаете несколько значений. Кроме того, вам необходимо параметризовать ваши запросы. То, что вы здесь, представляет собой пример учебника для SQL-инъекции. –

ответ

2

Рабочий пример: http://jsfiddle.net/Twisty/1y4zy5mn/

Вы должны перебрать свои флажки и собирать значения. С учетом следующего HTML:

<table> 
    <tr> 
     <td> 
      <input type="checkbox" name="id[]" class="toedit" value="1" /> 
     </td> 
     <td>One</td> 
     <td>Fish</td> 
    </tr> 
    <tr> 
     <td> 
      <input type="checkbox" name="id[]" class="toedit" value="2" /> 
     </td> 
     <td>Two</td> 
     <td>Fish</td> 
    </tr> 
    <tr> 
     <td> 
      <input type="checkbox" name="id[]" class="toedit" value="3" /> 
     </td> 
     <td>Red</td> 
     <td>Fish</td> 
    </tr> 
    <tr> 
     <td> 
      <input type="checkbox" name="id[]" class="toedit" value="4" /> 
     </td> 
     <td>Blue</td> 
     <td>Fish</td> 
    </tr> 
</table> 
<button class="deletelogg">Delete</button> 
<p></p> 

Ваш JQuery должен будет немного поработать. Это должно работать на 1 или много:

$(".deletelogg").on('click', function() { 
    var ids = []; 
    $(".toedit").each(function() { 
     if ($(this).is(":checked")) { 
      ids.push($(this).val()); 
     } 
    }); 
    if (ids.length) { 
     $.ajax({ 
      type: 'POST', 
      url: "php/delete.php", 
      data: { 
       id: ids 
      }, 
      success: function (data) { 
       alert(data); 
       $("p").text(data); 
      } 
     }); 
    } else { 
     alert("Please select items."); 
    } 
}); 

С этим, вы можете переключиться на foreach() петли тоже:

include 'connect-database.php'; 

foreach ($_POST['id'] as $id) { 
    echo $id; 
    $sql = "DELETE FROM Logg Where LoggID = $id"; 
    $stmt = sqlsrv_query($conn, $sql); 
    if ($stmt == false) { 
     die(print_r(sqlsrv_errors(), true)); 
    } 
} 
0

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

<div id="content"></div> 

<input type="checkbox" id="checkAll"> 

//get all the rows from db here, or make them manually 
<input type="checkbox" class="check" name="checkbox" value="<?php echo $row->id;?>"> 
//... 

Затем с этим куском JS кода, вы можете проверить их все, или некоторые из них, и «отправить» их на стороне сервера скрипт, который будет захватывать их и удалять их из БД.

var checkBoxes = document.getElementsByTagName('input'); 
var param = ""; 
var params = []; 
for (var counter=0; counter < checkBoxes.length; counter++) { 
    if (checkBoxes[counter].type.toUpperCase()=='CHECKBOX' && checkBoxes[counter].checked == true) { 
     param += checkBoxes[counter].value+' '; 
     params = param; 
    } 
} 
$.ajax({ 
    type: "POST", 
    url: "path/to/server/side/script", 
    data: { params:params }, 
    success: function(resp){ 
     $('#content').html(resp); 
    } 
}); 

И для проверки их все:

$("#checkAll").click(function(){ 
    $(".check").prop('checked', $(this).prop('checked')); 
}); 

Я не знаю, если это лучший способ, но это точка, чтобы начать. Кроме того, не забудьте защитить ваше приложение.

Смежные вопросы