'查看更多'在数据库中显示的每100条帖子的php页面中链接

时间:2017-09-25 07:42:22

标签: javascript php mysqli

我有一个PHP页面,它从数据库表中提取数据并回显。但是当表格列大小为1000到5000或更多时,页面加载速度太慢,需要几分钟。

我正在尝试在页面底部添加一个视图更多链接,每100个帖子中显示更多链接,一旦点击就会查看另外100个帖子。

我知道由于某些原因我不想采用的分页。

希望我能清楚地解释我的情况。

我的代码到目前为止:

   <html>
<head>
<?php include('db.php'); ?>

</head>
<body>

<?php 
$page = 0;

if(isset($_GET["Page"])){
   $page = $_GET["Page"];
}
    $sql2 = "SELECT * FROM smf_log_digest WHERE note_type = 'topic' ORDER BY id_msg DESC";
    $result2 = $conn->query($sql2);
    if ($result2->num_rows > 0) { 
    while($row2 = $result2->fetch_assoc()) { 
        $number = $row2["id_msg"];
?>
<?php 
    $sql3 = "SELECT * FROM smf_messages WHERE id_msg = $number AND id_board = 4 LIMIT 100 OFFSET " . $page * 100;
    $result3 = $conn->query($sql3);
    if ($result3->num_rows > 0) { 
        while($row3 = $result3->fetch_assoc()) { 
        $member = $row3["id_member"];
        $replies = $row3["id_topic"];
?>
<script>
var page = 0;

function GetData(){
    page++;

    var xhr = new XMLHttpRequest();
    xhr.open('GET', "/getData?page="+page, true);
    xhr.send();

    xhr.onreadystatechange = processRequest;

    function processRequest(e) {
        if (xhr.readyState == 4) {
             <?php echo substr($row3['body'], 0, 150); ?>
        }
    }
}
</script>


<?php     }
    } else {
        echo "";
    }
?>
<?php     }
    } else {
        echo "";
    }
?>
<div onclick="GetData()">Show More</div>
</body>
</html>

正如我所提到的那样,查询可以很好地从表中提取所有数据,但是我想将其限制为100并给出一个&#34;查看更多&#34;每100个帖子底部的按钮显示。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

修改您的查询以包含“页面”计数器,该计数器将作为“显示更多”的点击次数来计算查询的偏移量。

$page = 0;

if(isset($_GET["Page"])){
   $page = $_GET["Page"];
}

"SELECT * FROM smf_messages WHERE id_msg = $number AND id_board = 4 LIMIT 100 OFFSET " . $page * 100; 

现在,JavaScript,向你的php页面发出请求,我称之为'getData',并在计数器中包含Get参数。

var page = 0;

function GetData(){
    page++;

    var xhr = new XMLHttpRequest();
    xhr.open('GET', "/getData?page="+page, true);
    xhr.send();

    xhr.onreadystatechange = processRequest;

    function processRequest(e) {
        if (xhr.readyState == 4 && xhr.status == 200) {
            // Append the results here.
        }
    }
}

您希望在每次点击DOM时运行此功能。

<div onclick="GetData()">Show More</div>

请注意,这是一个示例,您需要进行一些修改以满足您的目的。因为你没有提供任何html,所以你不可能编写完整的代码而且我不想为你编写整个代码(HTML等):),所以你去吧。

编辑:使用JQuery可以简化Ajax调用以及附加结果,但是当您将其标记为JavaScript时,我提供了一个没有它的解决方案。

编辑:

将您的PHP代码放到一个名为getData.php的新文件中,并将其保留在root上(例如用途)

<?php 
$page = 0;

if(isset($_GET["Page"])){
   $page = $_GET["Page"];
}
    $sql2 = "SELECT * FROM smf_log_digest WHERE note_type = 'topic' ORDER BY id_msg DESC";
    $result2 = $conn->query($sql2);
    if ($result2->num_rows > 0) { 
    while($row2 = $result2->fetch_assoc()) { 
        $number = $row2["id_msg"];
    }
    }

    $sql3 = "SELECT * FROM smf_messages WHERE id_msg = $number AND id_board = 4 LIMIT 100 OFFSET " . $page * 100;
    $result3 = $conn->query($sql3);
    if ($result3->num_rows > 0) { 
        while($row3 = $result3->fetch_assoc()) { 
        $member = $row3["id_member"];
        $replies = $row3["id_topic"];
       }
    }
?>

修改您的Ajax请求,URL现在将变为“/getData.php?page =”+ page,

现在,一旦获得了返回的数据,就可以追加它。

看看这个功能

function processRequest(e) {
    if (xhr.readyState == 4 && xhr.status == 200) {
        // Append the results here.
    }
}

您可以使用document.body.innerHTML +=

附加到正文

所以你的最终功能现在将成为

function processRequest(e) {
    if (xhr.readyState == 4 && xhr.status == 200) {
        document.body.innerHTML += xhr.responseText;
    }
}

我在你的php文件中添加了结束括号以关闭while循环和if语句。 如果你不想使用括号,你需要确保你从来没有打开它们以避免语法错误,如果你没有放括号但是只有下一行将对应loop / if语句,如果你是不知道。

快乐学习。