【问题标题】:table row delete in database without reloading the page在数据库中删除表行而不重新加载页面
【发布时间】:2016-06-19 11:37:46
【问题描述】:

我想删除数据库中的行而不重新加载页面。我写了以下代码。它确实删除了页面中的行,但没有删除数据库中的行。这意味着连接不会去 ajax。请帮忙。

    <?php  


$advances_result= mysqli_query($conn, "SELECT * FROM advances") or die("error");
?>

        <table border>
            <caption>ADVANCES</caption>
        <tr>
            <th>Date</th>
            <th>EmpName</th>
            <th>EmpCode</th>
            <th>Amount</th>
            <th>Comment</th>
            <th>Action</th>
        </tr>

<?php
while($row = mysqli_fetch_array($advances_result)){
?>    
    <tr>
    <td><?php echo $row['date'];?></td>
    <td><?php echo $row['empname'];?></td>
    <td><?php echo $row['empcode'];?></td>
    <td style='text-align:right'><?php echo $row['amount'];?></td>
    <td><?php echo $row['comment'];?></td>
    <td><button class="delete" id="<?php echo $row['id']; ?>" > Delete</button></td>
    </tr>


<?php    
}
?>
        </table>

'jquery 部分'

                        <script>
                        $(document).ready(function(){                
                        $(".delete").click(function() {


                         if (confirm("Do you want to delete this row?"))
                                        {
                                            var row = $(this).parents('tr');
                                            var id = row.attr("id");
                                            var data = 'id=' + id ;

                        $.post({
                           type: "post",
                           url: "deleteadvances.php",
                            data: data,
                           cache: false,
                           success: function(){ 
                            row.slideUp('slow', function() {$(row).remove();});

                          }
                         });
                         }
                        return false;
                            });
                        });
                        </script>

'deleteadvances.php' 页面:

<?php
include("connection.php");

$id = $_POST['id'];
mysqli_query($conn,"INSERT INTO advancehistory SELECT * FROM advances WHERE ID='".$id."'");
mysqli_query($conn,"DELETE FROM advances WHERE ID='".$id."'");



?> 

【问题讨论】:

  • 首先您可以检查您的mysqli_query() 的返回以查看它返回的内容。其次,您必须保护您的查询免受 SQL 注入(通过准备和 bind_param 您的参数)
  • 在使用$.post()-方法时,您实际上并不需要type: 'post'

标签: php jquery sql ajax delete-row


【解决方案1】:

您需要在 deleteadvances.php 中测试 mysqli_query 的输出,如果一切正常,它会显示 JSON Ok 消息,可以在 jQuery 端使用 $.post 轻松解析。

例如:{"deleted":"id"} 表示成功或{"error":404} 表示未找到错误。

【讨论】:

  • 如何测试它...我是初学者,只有基本的编码知识..
  • 添加响应代码here,您需要将jQuery.parseJSON()添加到您的jQuery部分,如here所述
【解决方案2】:

我认为您从 javascript 传递到 ajax 的 id 不正确。

var data = 'id=' + id;

正在将 id 附加到字符串 'id=' 中,现在它最终变成了一个字符串。当它被传递给 ajax 时,只有一个值,而不是一个 [key, value] 对。因此,当您在 php 中访问它时,您会得到错误的 id 或 Null 值。

试试:

$.post({
    type: "post",
    url: "deleteadvances.php",
    datatype : 'json',
    data: {
      id : id
    },
    cache: false,
    contentType : 'application/x-www-form-urlencoded; charset=utf-8'
});

【讨论】:

  • 我在 ajax 请求中添加了内容类型和数据类型。我希望它对你有用。
  • 对不起,还是不行:(
  • 在您发出 post 请求后,您是否在 PHP 中获得了所需的 id?使用原始代码在 PHP 中获得的 id 是什么?
【解决方案3】:

更改“deleteadvances.php”页面:

<?php

    include ('connection.php');

    $id=$_POST['id'];
    $delete = "DELETE FROM table_name WHERE id=$id";
    $result = mysqli_query($db,$delete) or die("Bad SQL: $delete");

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 2021-01-07
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    相关资源
    最近更新 更多