2017-09-25 20 views
-1

我有一個PHP頁面,從數據庫表中拉出數據並回顯出來。但是當表格列是1000到5000或更多時,頁面加載速度太慢,需要幾分鐘。'查看更多'在PHP頁面中顯示從數據庫中顯示的每100個帖子的鏈接

我嘗試在頁面底部添加一個查看更多鏈接,對於每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,並給予「查看更多」按鈕在每100個帖子的底部顯示。

任何幫助表示讚賞。

+0

如果您使用關鍵字「分頁」,您應該能夠找到足夠的原則解釋。如果你不想去結果的不同「頁面」,而是在當前頁面的現有頁面下添加新的條目,那麼將AJAX放入組合中。 – CBroe

回答

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」,包括獲取與計數器參數。

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等):),所以您就去了。

編輯:Ajax調用和附加結果可以通過使用JQuery來簡化,但是因爲您將它標記爲JavaScript,所以我沒有提供解決方案。

編輯:

把你的PHP代碼到一個名爲訪問getdata.php新文件,例如,讓它在根目錄(例如用途)

<?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請求,該網址將現成爲「/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語句,不知道。

快樂學習。

+0

嘿,謝謝你的時間。我嘗試了你的方法,但似乎我錯過了什麼......請檢查更新後的問題。謝謝..等待你的回覆。 –

+0

@HarishKolliparat是的,你錯過了將數據附加到頁面本身...看看評論「//在這裏追加結果。」你還需要將你的php分成單獨的文件,否則你會將整個HTML文檔附加到文檔中。你甚至沒有改變Ajax網址。正如我所說,我不會向您提供完整的代碼,請付出一些努力。你必須做一點改變。 – Adriani6

+0

我很抱歉打擾你,基本上,我是一名化學工程師。這有點個人興趣。請看看最新的問題。到目前爲止,這就是我所理解的。再次感謝您的時間。 –

相關問題