如何在不更改显示的屏幕数据的情况下更新表格

时间:2016-09-12 11:21:25

标签: javascript php jquery html

我需要显示MySQL桌面上数百个项目的简单列表,查看屏幕上的列表,然后单击每个不需要的项目旁边的链接,将其从表格中删除。这是一个内部管理程序;没有涉及外部用户。我不需要立即从列表中消失该项目;我会定期刷新列表,因此不再列出从表中删除的项目。我不需要任何消息来确认该项目已被删除。重要的是,每次删除某个项目时我都不想忽略该列表,并且必须单击“退回”#34;按钮返回列表。

该表使用MySQL。到目前为止,我所有的编码都是用PHP编写的。所以我使用php在非html屏幕上显示项目列表。这是每个项目的代码:

echo $item." <a href='item_delete.php?id=".$item."'>Delete item</a><br />";

这是item_delete.php的代码:

<?php
require ('connect.php');    //  To define connection $con
$id = $_POST['id'];
mysqli_query($con, "DELETE FROM `items_table` WHERE `id` = $id");
?>

正确删除该项目,但显示空白屏幕(可理解)。

我已经做了很多搜索但是大多数需要帮助的人想要做更高级的事情 - 因为我到目前为止设法避免学习JavaScript,jQuery和AJAX - 我甚至无法解决哪些问题我需要在不更改屏幕的情况下更新表格。

我得到的印象是每个PHP脚本总是需要&#34;焦点&#34;有了它,所以也许我需要一个小的JavaScript脚本来做到这一点? 如果是这样: - 我可以将item_delete.php更改为item_delete.js,还是必须将非html列表定义为html列表? - item_delete.js中需要什么js代码?

我读过有关使用:header(&#34; location:javascript://history.go(-1)&#34;); 或:标题(&#39;位置:&#39;。$ _SERVER [&#39; HTTP_REFERER&#39;]); 但他们不会回到屏幕列表。

我不认为我希望js脚本执行虚拟&#34;返回&#34;因为列表最初是使用(大约20个)$ _POST参数生成的,所以我似乎每次都要刷新它。

所以我想要一个留在列表中的解决方案 - 而不是留下它并返回它。感谢。

3 个答案:

答案 0 :(得分:0)

使用javascript进行异步删除会很有意义。然而,实现你想要的最简单和最简单的方法是添加target =&#34; _blank&#34;到链接,(这将为您提供每个删除请求的空白选项卡。)

echo $item." <a href='item_delete.php?id=".$item."'       target='_blank'>Delete item</a><br />";

或者您可以通过在每个项目前添加复选框来解决此问题,检查要删除的项目并将其作为表单参数提交到删除脚本。

答案 1 :(得分:0)

如果要在实际运行PHP代码后删除屏幕表中的行,可以使用以下实现:

链接的HTML结构需要一个唯一的类名,例如:

echo '<a href="" onclick="return false" class="item-delete" data-item-id="' . $item . '">Delete item</a>'

请注意,商品ID存储在HTML5 data属性中。我还添加了一个onclick事件处理程序,它返回false以避免链接刷新页面。

用于删除项目的javascript使用JQuery AJAX方法并绑定到指定的类,即:item-delete。该实现需要Jquery版本&gt; = 1.9.0

(function(){

    $('.item-delete').click(function(event) {
        var target = $(event.target);
        var id     = target.data('item-id');

        $.ajax({
           url: 'item_delete.php',
           method: 'POST',
           data: {
               id: id
           },
        }).done(function() {
            target.remove();
        }).error(function(err) {
            console.error('Could not delete item with ID: ' + id);
            console.error(err);
        });
    });    

}())

事件侦听器在自执行函数中定义,该函数在页面加载完成时自动执行,并避免对全局命名空间进行规则。

答案 2 :(得分:0)

您可以直接在同一页面上删除该项目,而无需移动到另一个页面 页面通过传递id通过超链接,然后让它最终删除 不需要的物品。检查一下,请告诉我你是否属于你    想要:-)     

 // connection 
 mysql_connect("host", "user", "password");
 mysql_select_db("your database name");


 // select all the items from table.

 $selectQuery = mysql_query("SELECT * FROM table_name" );

 // use while loop to list all the items...

 while( $row = mysql_fetch_array($selectQuery) )
 {
 // list the items as a hyperlink, passing their id through the URL.
 ?>  
    <a href ="?id=<?php echo $row["id"];?>"> <?php echo "delete " .              $row["item_name"];  ?>  </a>

 <?php       
 } 
 // Below is the code to delete the item.

 if( isset( $_GET["id"] ) )
  { 
    $itemId = $_GET["id"]; 

   // query to delete item

   $deleteQuery  = mysql_query("DELETE FROM table_name WHERE id = '$itemId'       "); 
      //-----------THE MOST IMPORTANT PART. >>>
      // redirect if delete is successfull.

     if( $deleteQuery )
      {    
         // reload the page to get the items minus the deleted one...
         // let's say your sript name is delete.php      

             header("Location:delete.php");
          } 
        } 
         ?>

        </code>