在 jquery 中执行 sql 查询,以便从 html 表和数据库中删除数据

Posted

技术标签:

【中文标题】在 jquery 中执行 sql 查询,以便从 html 表和数据库中删除数据【英文标题】:to execute a sql query in jquery so that the data gets removed from html table as well as database 【发布时间】:2016-04-17 02:45:13 【问题描述】:

我有一个 html 表格,其中显示列 - 客户姓名、员工姓名、事项和删除。我的删除列仅包含每一行的按钮。我的数据库包含列 id、日期、客户名称、员工姓名和事项。我的数据库不包含删除列,它只是显示在我的 html 表中。现在我想删除单击该行中相应删除按钮的特定行。只需检查我的 jquery 代码和 sql 代码,让我知道为什么它不起作用? jquery代码-

 $(document).ready(function()

    $('input[type=button]').click(function()
    
        if (confirm("Are you sure you want to delete this row?"))
        
            var id = $(this).parent().parent().attr('id');
            var data = 'id=' + id ;
            var parent = $(this).parent().parent();

            $.ajax(
            
                   type: "POST",
                   url: "delete.php",
                   data: data,
                   cache: false,

                   success: function()
                   
                    parent.fadeOut('slow', function() $(this).remove(););
                   
             );
        
    );


);

我的sql代码-

<?php
include 'db.php' // DB Connection
if($_POST['id'])

    $ID = mysql_escape_string($_POST['id']);

    $sql = "DELETE FROM `newdata` WHERE id = '$ID'";
    mysql_query($sql);


?>

我的html是这样的-

   <table class="footable" data-filter="#filter" id="tableresult">
                               <thead>

                                <th>Client name</th>
                                 <th>Staff name</th>
                                 <th>Matter</th>
                                 <th> Delete</th>
                              </thead>
<tr id="<?php echo $id; ?>" class="edit_tr">

<td class="edit_td" >
<span id="client_<?php echo $id; ?>" class="text"><?php echo $clientname; ?></span>
<input type="text" value="<?php echo $clientname; ?>" class="editbox" id="client_input_<?php echo $id; ?>" /&gt;
</td>

<td class="edit_td">
<span id="staff_<?php echo $id; ?>" class="text"><?php echo $staff; ?></span> 
<input type="text" value="<?php echo $staff; ?>" class="editbox" id="staff_input_<?php echo $id; ?>"/>
</td>

<td class="edit_td">
<span id="matter_<?php echo $id; ?>" class="text"><?php echo $matter; ?></span> 
<input type="text" value="<?php echo $matter; ?>" class="editbox" id="matter_input_<?php echo $id; ?>"/>
</td>
<div id ="delete_btn">
<td class="delete_td"><input type="button" id="del" class="btn btn-danger" value="&times;"></input></td>
</div>
</tr>

【问题讨论】:

检查错误和你的控制台 请不要使用 mysql_ 数据库扩展,它已被弃用(在 PHP7 中永远消失了)特别是如果您只是学习 PHP,请花精力学习 PDOmysqli_ 数据库扩展, and here is some help to decide which to use Your script is at risk for SQL Injection Attacks. 请stop using mysql_* functions。 These extensions 已在 PHP 7 中删除。了解 PDO 和 MySQLi 的 prepared 语句并考虑使用 PDO,it's really pretty easy。 您的$.ajax() 中有语法错误,因为您在type: "POST";url: 'delete.php'; 的末尾有一个分号;,它应该是一个逗号-type: "POST", 和@ 987654341@。另外,$('#tableresult').removeRow(ID); ; 中有一个额外的分号 【参考方案1】:

HTML

我已经删除了 &lt;div&gt; 你包裹在你最终的 &lt;td&gt; 周围,因为那是不好的标记。依靠按钮本身,它也从&lt;input&gt; 更改为&lt;button&gt;。我还为按钮添加了data-id 属性,因此您可以更轻松地访问行ID。最后,我删除了id="del" 属性,因为我想这是一个循环,然后你的所有按钮都将具有相同的id,这对你没有好处。类已添加btn-delete 以定位点击事件。

<tr id="<?php echo $id; ?>" class="edit_tr">

    <td class="edit_td" >
        <span id="client_<?php echo $id; ?>" class="text">
        <?php echo $clientname; ?>
        </span>
        <input type="text" value="<?php echo $clientname; ?>" class="editbox" id="client_input_<?php echo $id; ?>" /&gt;
    </td>

    <td class="edit_td">
        <span id="staff_<?php echo $id; ?>" class="text">
        <?php echo $staff; ?>
        </span> 
        <input type="text" value="<?php echo $staff; ?>" class="editbox" id="staff_input_<?php echo $id; ?>"/>
    </td>

    <td class="edit_td">
        <span id="matter_<?php echo $id; ?>" class="text">
        <?php echo $matter; ?>
        </span> 
        <input type="text" value="<?php echo $matter; ?>" class="editbox" id="matter_input_<?php echo $id; ?>"/>
    </td>

    <td class="delete_td">
        <button data-id="<?php echo $id; ?>" class="btn btn-danger btn-delete" value="&times;" />
    </td>
</tr>

javascript / jQuery

jQuery 相当简单。我们为 .btn-delete 类创建了一个 eventListener,它位于您的删除按钮上。然后它获取被点击按钮的data-id 属性,并通过$.ajax() 调用调用您的PHP。调用成功后,我们运行一个名为 removeRow() 的回调函数,它将删除前端的 &lt;tr&gt; 元素。在该回调函数中,有一个简单的var time 控制删除行的转换时间,这是一个两步过程。首先,它向上滑动行,然后从DOM 中删除元素。

<script type="text/javascript">
    $( document ).ready( function() 

        // A Delete Button Was Clicked
        $( document ).on( 'click', '.btn-delete', function() 

            // Get the ID we're going to delete
            var delID = $( this ).attr('data-id');

            // Run Our Ajax
            $.ajax(
                url: "delete.php",
                type: "POST",
                data: "?id=" + delID,
                success: function() 
                    removeRow(delID);
                ,
                error: function() 
                    alert('Something went wrong');
                
            );

         );

        // Callback function to remove row
        function removeRow( id ) 
            var time = 500;
            $( 'tr#' + id ).slideUp(time);
            setTimeout( function()  $( 'tr#' + id ).remove(); , time );
        

     );
</script>

PHP

我将假设您的 php 已经正确删除了该行,因此它可能会保持不变。

【讨论】:

【参考方案2】:

大家终于明白了,感谢您的帮助和支持-

我的 jquery 代码-

$(document).ready(function()

    $('input[type=button]').click(function()
    
        if (confirm("Are you sure you want to delete this row?"))
        
            var ID = $(this).parent().parent().attr('id');
            var data = 'id=' + ID ;
            var parent = $(this).parent().parent();

            $.ajax(
            
                   type: "POST",
                   url: "delete.php",
                   data: data,
                   cache: false,

                   success: function()
                   
                    parent.fadeOut('slow', function() $(this).remove(););
                   
             );
        
    );


);

我的sql代码-

<?php
include("db.php");
if($_POST['id'])

    $id = mysql_escape_string($_POST['id']);

    $sql = "DELETE FROM newdata WHERE id = '$id'";
    mysql_query($sql);


?>

【讨论】:

以上是关于在 jquery 中执行 sql 查询,以便从 html 表和数据库中删除数据的主要内容,如果未能解决你的问题,请参考以下文章

Django:有没有办法从单元测试中计算 SQL 查询?

Linq2Sql - 存储复杂的Linq查询以便将来动态执行 - 原始文本 - 可能吗?

SQL临时表使用

对从多个 SQL 查询返回的 Ajax 数据执行某些操作

Sql 直接从 DataReader 中选择

如何在 Azure 数据工厂中执行 SQL 查询