计数器无法正常工作

时间:2018-08-17 16:24:47

标签: javascript php jquery

我试图从数据库中获取一些注释。我创建了一个设置为2的计数器

var limit=2;

一旦用户单击它,则注释计数设置为4,第二次计数器值设置为6 ..... etc

问题是,当我第一次单击该按钮时,显示的是6条记录而不是4条记录

$(document).ready(function(){
        var limit=2;
        $(document).on('click','.more',function(){
            limit=limit+2;
            $('#comments').load("loadComments.php",{
                limit:limit
            });
        });
    });

这是loadComment.php

 $limit=$_POST["limit"];
        $sql = "SELECT * FROM comments order by id desc limit  $limit ";  

1 个答案:

答案 0 :(得分:2)

您非常亲密

$(document).ready(function(){
    var limit=2;
    $(document).on('click','.more',function(){
        limit=limit+2;
        $('#comments').load("loadComments.php?limit="+limit);
    });
});

$limit = (int)$_GET["limit"];
//$limit = intval($_GET["limit"]); //if you like functions better they are basically the same.
$sql = "SELECT * FROM comments order by id desc limit $limit"; 

load是第一个$_GET请求,因此您可以通过URL中的查询字符串传递限制。

然后,将限制强制转换为整数。许多准备好的语句不能很好地处理限制或order by子句。更不用说我不知道​​您正在使用哪个数据库或库。但是投射它应该解决大多数问题。

现在,如果load可以满足您的要求(将html加载到容器中),则可以使用(int),但这被认为是Get类型请求。有些人出于某种原因认为POST比GET更安全,但事实并非如此。因此,如果这样会使您的代码更易于阅读和实现,那就好了。

  

说明:从服务器加载数据并将返回的HTML放入匹配的元素中。

http://api.jquery.com/load/

最后我要提一下的是SQLInjection:

What is SQL injection?

最好总是让您的查询准备好语句。查询中的ORDER BY和LIMIT子句有点棘手。但是由于limit只接受一个数字,我们可以将其强制转换为int intval(),或使用creation_time

干杯。