AJAX,PHP& MYSQL-限制数据选择和偏移

时间:2016-01-18 08:37:04

标签: php mysql ajax loops

好的,所以这里我的问题我有一个博客,我想在第一页只显示5个帖子的用户,所以我执行此查询

 mysql_query("select * from posts  LIMIT 5");

然后在显示5个帖子之后我做了一个名为的按钮:显示更多帖子

当用户点击该按钮时执行另一个PHP文件(loadmoreposts.php),其中我执行此查询

 mysql_query("select * from posts LIMIT 5 OFFSET 5");

但是我希望每次点击该按钮时都显示用户5帖子,所以我在我的PHP脚本中创建了这个循环loadmoreposts.php

 include('dbConnectClass.php');
 $connect = new doConnect();
 $beforequery = mysql_query('select * from posts ORDER BY id DESC LIMIT 1;');

if (mysql_num_rows($beforequery) > 0) {
    $max_public_id = mysql_fetch_row($beforequery);
    $lastid =  $max_public_id[0]; //Here it is
}else{
    $lastid =  "[0]";
}
echo "Last ID $lastid<br />";
    $m=5; 
    for($n=5; $n<=15; $n++): 

             $afterQuery = mysql_query("select * from posts LIMIT $m OFFSET $m");
            $m = $m+5;

            $result = "";
            while($row = mysql_fetch_assoc($afterQuery)){
            $result .= "<div class='cd-timeline-block'>";
            $result .="<div class='cd-timeline-img cd-warning'>";
            $result .=" <i class='fa fa-pencil-square-o'></i>";
            $result .="</div>";
            $result .="<div class='cd-timeline-content'>";
            $result .= "<h2>{$row['title']}</h2>
                        <p>{$row['content']}</p>
                        <img src='{$row['imagesrc']}' alt=''>
                        <br />
                        <span style='font-size:85%;'' class='label label-primary'>{$row['category']}</span>
                        </div>
                        </div>";
            }
            echo $result;
     endfor;

让我解释一下我在这个脚本中做了什么,首先我通过类连接到数据库然后我通过运行 $ beforequery 然后再一次获取我的帖子的最后一个ID(最后更新的帖子)我执行另一个名为 $ afterquery 的查询,然后我得到我的结果

但我不想只显示一次点击我想要显示他们5个用户点击该按钮就像前五个已经显示但点击按钮会再显示5个点击再次,它将显示接下来的5个帖子。 然后,这个脚本被这个AJAX脚本抓住:

var loadmoreposts = function () {
        $.post('assets/includes/fetchMoreRows.php').done(function( data ) {
            $('#displaymoreposts').html(data);
            }); 
}  

loadmoreposts(); 功能在 onload =“loadmoreposts();”body tag

中运行

任何建议和帮助将不胜感激:)

============================    * ** EDITED    ===========================

我删除了循环并添加了但不能正常工作

include('dbConnectClass.php');
$connect = new doConnect();


$m = $_POST['offset'];




            $afterQuery = mysql_query("select * from posts LIMIT 5 OFFSET $m");

            $result = "";
            while($row = mysql_fetch_assoc($afterQuery)){
            $result .= "<div class='cd-timeline-block'>";
            $result .="<div class='cd-timeline-img cd-warning'>";
            $result .=" <i class='fa fa-pencil-square-o'></i>";
            $result .="</div>";
            $result .="<div class='cd-timeline-content'>";
            $result .= "<h2>{$row['title']}</h2>
                        <p>{$row['content']}</p>
                        <img src='{$row['imagesrc']}' alt=''>
                        <br />
                        <span style='font-size:85%;'' class='label label-primary'>{$row['category']}</span>
                        </div>
                        </div>" ;
            // $result .= "<tr><td> {$row['name']}</td>"."<td> {$row['password']}</td></tr></p>";
            }
            echo $result;

和JS / AJAX脚本现在就是这个

   var offsetValue = 0;
   var loadmoreposts = function () {
  $.post( 'assets/includes/fetchMoreRows.php', { offset: offsetValue} ).done(function( data ) {
    $('#displaymoreposts').html(data);
    offsetValue += 5;
  }); 
} 

3 个答案:

答案 0 :(得分:2)

您的AJAX脚本需要从OFFSET开始发送0的当前值。每当您点击Show more posts链接时,它都会将值增加5

因此,您应该将AJAX脚本更改为:

var offsetValue = 0;
var loadmoreposts = function () {
      $.post( 'assets/includes/fetchMoreRows.php', { offset: offsetValue} ).done(function( data ) {
        $('#displaymoreposts').html(data);
        offsetValue += 5;
      }); 
    } 

在PHP脚本中,您可以像这样获取offset值:

$m = $_POST['offset'];

也不会增加LIMIT 。将您的查询更改为:

mysql_query("select * from posts LIMIT 5 OFFSET $m");

如果你增加LIMIT,脚本每次都会返回+5个帖子。

希望有所帮助。

答案 1 :(得分:1)

您可以简单地在AJAX请求中发送偏移量,并在查询中使用该偏移量,这里有一些简单的步骤:

  1. 加载前5个帖子,使AJAX发送的值“加载更多”按钮为5
  2. 当点击“加载更多”按钮时,取出发送的值(在我们的例子中为5)并将其插入查询中(希望使用准备好的语句进行安全性)并检索接下来的5个帖子并发回5个帖子和新帖子“加载更多”按钮的值现在为10(可以通过将AJAX请求中的值加5来计算
  3. 重复,点击“加载更多”按钮时发送10,从数字/偏移10开始检索接下来的5个帖子,返回5个帖子和“加载更多”按钮的新值15(10 + 5)
  4. 依旧......

答案 2 :(得分:0)

试试这个..

//用于保存偏移的变量

var offSet = 5; //初始值

//在您的帖子请求中发送此内容

$.post('url', {aOffset : offset }, function(returnedData) {
    // do something here

    //update the offset value
    offset+=5; });