使用Jquery

时间:2015-11-13 22:09:06

标签: php jquery sql-server

我正在尝试使用checkbox从我的sql数据库中删除行。只要只标记了一个checkbox,这样就可以正常工作。但我也希望它可以删除多行。我见过许多例子,但我无法让它发挥作用。希望这里的任何人都可以帮助我。

首先是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的数组,但它不起作用..任何帮助请求?

2 个答案:

答案 0 :(得分: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) );
    }  
}

答案 1 :(得分:0)

我是这样做的:先做一个&#34; checkAll&#34;复选框,选中时,选中所有复选框。然后在表单的最后,输入&#34; delete&#34;按钮。按下此按钮后,将删除所有选中的复选框。我认为即使对于某些复选框也是如此(如果您只检查其中一些复选框,而不是所有复选框)。

<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代码,你可以检查它们或其中一些,并且&#34;发送&#34;它们是服务器端脚本,它将抓取它们,并从数据库中删除它们。

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'));
});

我不知道这是否是最好的方式,但这是一个重点。此外,请不要忘记保护您的应用。