Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当多个用户插入新注释时,增加sql查询中的无限滚动分页偏移量_Php_Jquery_Mysql_Ajax - Fatal编程技术网

Php 当多个用户插入新注释时,增加sql查询中的无限滚动分页偏移量

Php 当多个用户插入新注释时,增加sql查询中的无限滚动分页偏移量,php,jquery,mysql,ajax,Php,Jquery,Mysql,Ajax,Ajax无限滚动从PHP脚本加载注释。PHP脚本为每个注释增加一个变量$load++。然后在sqlOFFSET$load中使用,并在success函数中以div的形式将其发送回AJAX,用户再次滚动变量的值,然后再次发送到PHP,它检索下一组注释,这是可行的,但是: 如果多个用户对该帖子发表评论,则偏移量变量$load不会增加,如果用户现在滚动并触发AJAX脚本,则不会加载新的评论,而是复制最后一条评论,因为偏移量没有改变 有没有更好的方法来设置偏移量变量,还是我做错了?这种分页的更好方法是什么

Ajax无限滚动从PHP脚本加载注释。PHP脚本为每个注释增加一个变量
$load++
。然后在sql
OFFSET$load
中使用,并在success函数中以div的形式将其发送回AJAX,用户再次滚动变量的值,然后再次发送到PHP,它检索下一组注释,这是可行的,但是:

如果多个用户对该帖子发表评论,则偏移量变量
$load
不会增加,如果用户现在滚动并触发AJAX脚本,则不会加载新的评论,而是复制最后一条评论,因为
偏移量
没有改变


有没有更好的方法来设置
偏移量
变量,还是我做错了?这种分页的更好方法是什么?我应该使用什么方法才能让脚本加载下一个新的注释(如果有)?

我不确定我是否正确理解您当前的方法,但是,我在上一个项目中做了什么,并且成功了,我在页面中维护了一个名为call_seq initialize with zero的is变量。每次调用分页时,原因都会增加,并随Ajax调用一起发送


在php上,每次调用都会加载10条注释,因此在sql查询中,偏移量是使用值10*call_seq设置的。

我不确定我是否正确理解您当前的方法,但是,我在上一个项目中做了些什么,这起到了作用,我在我的页面中维护了一个名为call_seq的is变量,并用零初始化。每次调用分页时,原因都会增加,并随Ajax调用一起发送


在php上,每次调用都会加载10条注释,因此在sql查询中,偏移量是使用值10*call_seq设置的。

因为您没有发布任何代码,所以我将仅介绍我使用的方法

我假设您的数据库中有一些唯一的注释标识符,最好是一个自动递增的ID。这给了您的是,每个新注释的ID都比前一个注释的ID大。因此,当从数据库获取注释时,可以将最后一条注释的ID存储在javascript代码中。然后在到达页面末尾后获取更多注释时,将该ID发送到PHP页面。您可以使用该ID选择所有比上次选择的邮件“旧”的邮件,或者换言之,具有较小ID号的邮件

一个小小的示范:

id    |    comment    |  ....
1            test1
2            test2
3            test3
4            test4
5            test5
6            test6
请记住,ID为6的注释是最新添加的注释

假设您在页面上显示了注释5、4和3,并将ID 3作为最后一条注释存储在javascript中。现在,ID为6的注释被添加到数据库中。您尝试获取新评论并发送存储的ID,ID 3。在PHP脚本中,选择下面五条ID小于3的注释。在这种情况下,将是2和1

SELECT id, comment, .... FROM comments WHERE post = ... AND id < 3
选择id、注释等。。。。来自post=。。。id<3
即使添加了一条新评论,这也没有任何区别,因为您保存了上一条评论的ID,并且知道接下来会出现什么评论。如您所见,此代码不使用偏移量

您可以存储注释的时间戳而不是ID

由于ID存储在客户端,用户可以篡改存储最后一条评论ID/时间戳的变量,但如果在PHP中正确使用该数据,则不会发生任何事情


当然,这可能不是最好的方法,也许还有更好的例子。我使用了这个,它对我很有用。

因为您没有发布任何代码,所以我只告诉您我使用的方法的想法

我假设您的数据库中有一些唯一的注释标识符,最好是一个自动递增的ID。这给了您的是,每个新注释的ID都比前一个注释的ID大。因此,当从数据库获取注释时,可以将最后一条注释的ID存储在javascript代码中。然后在到达页面末尾后获取更多注释时,将该ID发送到PHP页面。您可以使用该ID选择所有比上次选择的邮件“旧”的邮件,或者换言之,具有较小ID号的邮件

一个小小的示范:

id    |    comment    |  ....
1            test1
2            test2
3            test3
4            test4
5            test5
6            test6
请记住,ID为6的注释是最新添加的注释

假设您在页面上显示了注释5、4和3,并将ID 3作为最后一条注释存储在javascript中。现在,ID为6的注释被添加到数据库中。您尝试获取新评论并发送存储的ID,ID 3。在PHP脚本中,选择下面五条ID小于3的注释。在这种情况下,将是2和1

SELECT id, comment, .... FROM comments WHERE post = ... AND id < 3
选择id、注释等。。。。来自post=。。。id<3
即使添加了一条新评论,这也没有任何区别,因为您保存了上一条评论的ID,并且知道接下来会出现什么评论。如您所见,此代码不使用偏移量

您可以存储注释的时间戳而不是ID

由于ID存储在客户端,用户可以篡改存储最后一条评论ID/时间戳的变量,但如果在PHP中正确使用该数据,则不会发生任何事情


当然,这可能不是最好的方法,也许还有更好的例子。我使用了这个方法,效果很好。

这是我在一些网站上发现的方法,目前看来是最好的。这是我在一些网站上发现的方法,目前看来是最好的。