无限滚动(mysql、php & js)循环问题
Infinite Scrolling (mysql, php & js) Loop Issue
首先要声明:我对 php 和 js 还是超级新手,所以请保持温和...哈哈
无论如何,我正在尝试创建一个简单的无限滚动来从 mysql table 检索帖子。我拼凑了各种 Internet 教程中的代码来创建可以访问和检索信息的东西。问题是帖子的数量以及正在检索的帖子。
将 PHP 文件中的“$perpage”设置为 10,加载前 20 个帖子,然后每次加载 "new posts",它只会一遍又一遍地加载帖子 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;
?>
您对查询中 $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;
现在,当您向下滚动页面并在 $page
变量中获取 pagenum
的值(通过 AJAX 发送到您的 PHP 脚本)时, $start
相应地相乘,为您的查询的 OFFSET
部分提供值 (0, 10, 20, ...
) - 这正是您所期望的。
首先要声明:我对 php 和 js 还是超级新手,所以请保持温和...哈哈
无论如何,我正在尝试创建一个简单的无限滚动来从 mysql table 检索帖子。我拼凑了各种 Internet 教程中的代码来创建可以访问和检索信息的东西。问题是帖子的数量以及正在检索的帖子。
将 PHP 文件中的“$perpage”设置为 10,加载前 20 个帖子,然后每次加载 "new posts",它只会一遍又一遍地加载帖子 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;
?>
您对查询中 $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;
现在,当您向下滚动页面并在 $page
变量中获取 pagenum
的值(通过 AJAX 发送到您的 PHP 脚本)时, $start
相应地相乘,为您的查询的 OFFSET
部分提供值 (0, 10, 20, ...
) - 这正是您所期望的。