删除行和排序php mysql

时间:2015-09-15 01:15:49

标签: jquery

我目前有一个表可以按列使用带有订单变量的页面刷新进行排序:

$orderBy = array('PTS', '3PT');
$order = $_GET['orderBy'];
$query="SELECT * FROM `temps` ORDER BY ".$order." ASC" ;

然后,您可以通过单击该行中使用jquery的按钮来删除行:

$('input[type="button"]').click(function(e){
$(this).closest('tr').remove()
}   )

但是,由于它正在删除HTML行,因此排序会再次带回所有已删除的行。最好的方法是什么,以便每个用户可以删除行然后对自己的表进行排序?

1 个答案:

答案 0 :(得分:1)

您可以使用AJAX

首先,我们必须为您的数据设置一个值。让我们将您的数据封装在<a>实体中,并在其上设置data-artid标记,并在其上指定主键值。

让我们假设你像这样获取所有数据:

<div id="result"></div> <!-- WE CAN USE THIS LATER TO SHOW THE STATUS OF THE DELETED DATA -->
<table>
    <tr>
        <td><a data-artid="1">Data 1</a></td><td><input type="button" value="Delete">
    </tr>
    <tr>
        <td><a data-artid="2">Data 2</a></td><td><input type="button" value="Delete">
    </tr>
    <tr>
        <td><a data-artid="3">Data 3</a></td><td><input type="button" value="Delete">
    </tr>
</table>

然后让我们创建一个脚本,该脚本将获取所点击的Delete button的最接近数据的值。然后使用AJAX将其传递到单独的文件上以执行删除查询。

$(document).ready(function(){ /* PREPARE THE SCRIPT */
   $('input[type="button"]').click(function(e){ /* WHEN A DELETE BUTTON IS CLICKED */

      e.preventDefault(); /* PREVENT THE DEFAULT ACTION */
      var deleteid = $(this).closest('tr').find('a').attr('data-artid'); /* GET THE VALUE OF THE NEAREST DATA OF THE CLICKED DELETE BUTTON */
      var dataString = "delete-id=" + deleteid; /* STORE IT IN A DATA STRING */
      $(this).closest('tr').remove(); /* REMOVE THE ROW */

      $.ajax({ /* START AJAX */
        type: "POST", /* METHOD TO USE TO PASS THE DATA */
        url: "delete.php", /* FILE WHERE WE WILL PASS THE DATA */
        data: dataString, /* THE DATA WE WILL BE PASSING TO delete.php */
        success: function(result){ /* WHEN ACTION IS SUCCESS */
          $("#result").html(result); /* SHOW TO THIS DIV THE RESULT */
        }
      }) /* END OF AJAX */

   });
});

您可以查看jsfiddle,但不要使用ajax部分。

您会注意到我们将数据传递给delete.php。我们必须在此文件中创建删除查询(请注意,这将永久删除此记录)。

delete.php:

<?php

  /* INCLUDE YOUR DATABASE CONNECTION HERE */    

  if(!empty($_POST["delete-id"])){
    $stmt = $con->prepare("DELETE FROM temps WHERE id = ?");
    $stmt->bind_result("i",$_POST["delete-id"]);
    $stmt->execute();
  }

  else {
    echo "You have not selected a data to delete.";
  }

?>

但是如果你想保留数据,我们可以为你的表结构添加一个方案。

我们可以创建一个表,让它命名为preference-tb。该表将存储以下内容

  • 主键(pre-id
  • 用户的ID(users-id
  • 用户喜欢隐藏的数据的ID(data-id
  • 以及用户想要隐藏数据的排序类型(order

因此,我们的delete.php不会完全是删除查询,而是更新/插入查询。