无限滚动(mysql,php& js)循环问题

时间:2016-01-01 02:48:55

标签: javascript php mysql scroll infinite

开始时的大免责声明:我仍然是php&的新手。 js,所以请温柔......哈哈

无论如何,我试图创建一个简单的无限滚动来检索mysql表中的帖子。我将来自各种互联网教程的代码拼凑在一起,创建了一些正在访问和检索信息的东西。问题是帖子的数量以及它检索的内容。

使用" $ perpage"在PHP文件设置为10,前20个帖子加载,然后每次加载"新帖子",它只是一遍又一遍地加载帖子11-20。我想它可能很简单,但是我的PHP& js实际上只是在我可以理解它阅读的水平,但不能写它。

我尝试将LIMIT添加到$ sql行的末尾,但这似乎完全破坏了代码。

任何帮助将不胜感激!

如果您想在现实生活中看到这一点,那么(非常)草稿网站就在这里:site

$(document).ready(function(){
  function getresult(url) {
    $.ajax({
      url: url,
      type: "GET",
      data:  {rowcount:$("#rowcount").val()},
      beforeSend: function(){
        $('#loader-icon').show();
      },
      complete: function(){
        $('#loader-icon').hide();
      },
      success: function(data){
        $("#faq-result").append(data);
      },
      error: function(){}             
    });
  }
  $(window).scroll(function(){
    if ($(window).scrollTop() == $(document).height() - $(window).height()){
      if($(".pagenum:last").val() <= $(".total-page").val()) {
        var pagenum = parseInt($(".pagenum:last").val()) + 1;
          getresult('../php/best_result.php?page='+pagenum);
      }
    }
  }); 
});


<?php
require_once("login.php");
$db_handle = new DBController();
$perPage = 10;

mysql_query("SET NAMES utf8");

$sql = '
  SELECT letter, dayfield, monthfield, yearfield, nickname, country
  FROM BestWorst
  WHERE `lettertype` = "best" ORDER BY `ID` DESC';



$page = 1;
if(!empty($_GET["page"])) {
$page = $_GET["page"];
}

$start = ($page-1)*$perPage;
if($start < 0) $start = 0;

$query =  $sql . " limit " . $start . "," . $perPage; 
$faq = $db_handle->runQuery($query);

if(empty($_GET["rowcount"])) {
  $_GET["rowcount"] = $db_handle->numRows($sql);
}
$pages  = ceil($_GET["rowcount"]/$perPage);
$output = '';
if(!empty($faq)) {
  $output .= '<input type="hidden" class="pagenum" value="' . $page . '" /><input type="hidden" class="total-page" value="' . $pages . '" />';
  foreach($faq as $k=>$v) {
    $output .= '<div class="entry wow fadeInUp lefttext"><br/><p>'
      . nl2br($faq[$k]["letter"])
      . '</p><br/><p class="small" align="right">- This story took place on '
      . $faq[$k]["dayfield"] . '/'
      . $faq[$k]["monthfield"] . '/'
      . $faq[$k]["yearfield"]
      . '. Posted by ' . $faq[$k]["nickname"]
      . ' from ' . $faq[$k]["country"]
      .'<p></div><br/><br/><br/>';
  }
}
print $output;
?>

1 个答案:

答案 0 :(得分:1)

您对查询中$start$perPage的使用有点疑惑。

在MySQL中,以下查询获得前15个结果,从该组结果中的第11行(OFFSET 10)开始:

SELECT * FROM BestWorst LIMIT 15, 10    

相同
SELECT * FROM BestWorst LIMIT 15 OFFSET 10

您的案例中$start的使用应该映射到查询的OFFSET,而$perPage在MySQL术语中实际上是LIMIT

因此,在查询中交换两个提到的变量应该可以解决问题。

$query =  $sql . " limit " . $perPage . "," . $start; 

现在,当您向下滚动页面,并在pagenum变量中获取$page(通过AJAX发送到PHP脚本)的值时,$start会相应地相乘,您查询的0, 10, 20, ...部分的值(OFFSET) - 这正是您所期望的。