删除数据库中的上一行,单击按钮显示数据库中的下一行

时间:2018-02-09 14:43:04

标签: javascript php jquery mysql ajax

我需要帮助,基于我已经做过的事情:在输出中,每次单击按钮,它都会显示数据库中的行(注释)。但我希望如果我单击下一个按钮,它将显示数据库中的行(注释),当我再次单击它时,它将删除数据库中的上一行(注释)并显示下一行(注释)。

以下是代码:

<?php
    include 'dbh.php';

    $commentNewCount = $_POST['commentNewCount'];

    $sql = "SELECT * FROM comments LIMIT $commentNewCount";
    $result = mysqli_query($conn, $sql);
    if (mysqli_num_rows($result) > 0) {
        while ($row = mysqli_fetch_assoc($result)) {
            echo $row['id'];
        }
    } else {
        echo "There are number!";
    }
?>

这是按钮:

<script>
//jQuery code here!
$(document).ready(function() {
    var commentCount = 0;
    $("button").click(function() {
        commentCount = commentCount + 1;
        $("#comments").load("load-comments.php", {
            commentNewCount: commentCount
        });
    });
});
</script>

1 个答案:

答案 0 :(得分:0)

你的问题中有AJAX标记,所以我假设你对这个术语有些熟悉。这确实可以通过AJAX完成,但我在代码中没有看到任何AJAX尝试?

另外,当你说 delete 时,你的意思是按字面意思明确删除,或者只是你的评论显示作为一种滑动功能,删除来自显示的先前评论,显示队列中的下一个评论?在我的例子中,我是按照字面意义去做的,因为那是我真正想要的。

您可以做的是拥有一个处理所有评论的文件,并根据您的喜好显示它们。例如,

<?php
$sql="SELECT * FROM comments ORDER BY id DESC";
$result_set=mysqli_query($conn, $sql);
while ($row=mysqli_fetch_assoc($result)) {
   /*
   html construction of displaying comments,
   echo'ing the row value that displays the comments.
   echo $row['comments']; as a guess
   */
}
?>

为了稍后引用,我们称之为PHP文件 comments.php 。另请注意,我选择按降序排列ORDER BY。假设您的评论ID 是自动递增,那么这将始终首先显示最新的评论,因为最高的 id&#39> 将是最新的条目。

然后,在另一个文件 display-comments.php 中作为示例,您可以创建document.ready函数,将您的注释加载到元素<div>元素中,例如

AJAX功能可能如下所示:

$( document ).ready(function() {
    function loadCommentsAjax()
    {   
        $.ajax({
            type : "POST",
            url : "comments.php",
            data : { },
            success: function (html) {
              $("#commentContainer").html(html);                   
            }
        })
    }
});

我在这里做的是,我在一个document.ready函数中封装了一个AJAX函数。这样做的是,当文档准备就绪时,它会激活AJAX函数。

AJAX函数的工作原理是我们声明一种数据类型。最常见的可能是POSTGET。您可以查找不同的数据类型,如何处理它们以及它们的具体含义。例如,POSTGET之间的主要区别在于GET将其值显示为URL中的参数。由于我们没有解析任何数据,我们可以使用GET就好了,因为它没有任何影响。但是,如果您需要解析敏感数据,而不希望用户与数据混合,则应使用POST

然后我们告诉AJAX函数,它应该使用哪个页面/文件。在我们的示例中,它将是我们之前创建的 comments.php 。然后在成功函数中,将html内容粘贴到我们定义的容器中。在这种情况下, commentContainer 。请注意,它是 id 特定定位,这意味着我们的容器元素需要具有特定的 id 。请注意,容器位于我们的主文件中,即 display-comments.php 文件。

容器的示例可能如下:

<div id="commentContainer"></div>

这个div元素将包含我们在 comments.php 文件中创建的注释和html逻辑。

在你的按钮中,你可以拥有另一个AJAX函数,处理注释删除,并在成功时调用我们的 loadCommentsAjax()函数,以适当的方式重新加载我们的评论。

处理删除注释的AJAX函数将再次具有将执行删除的PHP文件。我们在示例中将此称为 delete-comments.php

我们删除AJAX函数的例子:

function deleteNewestComment() {
    $.ajax({
        type : "POST",
        url : "delete-comments.php",
        data : { },
        success: function (html) {
          loadCommentsAjax();                   
        }
    })
}

我们的delete-comments.php将如下所示:

<?php
/*
since you are deleting the latest entry each time, what we could do,
is make an SQL query that deletes the max id from the comments table
*/

$sql="DELETE FROM comments WHERE id=(SELECT max(id) FROM comments)";
$result=mysqli_query($conn, $sql);
?>

然后我们将按钮调用delete函数,如下所示:

<button onclick="deleteNewestComment();">Delete latest comment</button>

让我知道这是否是您正在寻找的,或者您是否真的只想要一种滑动的逻辑,您只需遍历您的评论,一次显示一条。

但是如果您确实意味着删除,那么将删除按钮链接到每个评论会不会更好,这样您就可以单独删除它们,并且可以独立删除?