Большая оговорка для начала: Я все еще супер новичок в php & js, так что, пожалуйста, будьте нежны... хаха

.

В общем, я пытаюсь создать простую бесконечную прокрутку, которая получает сообщения из таблицы mysql. Я собрал код из различных интернет-учебников, чтобы создать что-то, что получает доступ и извлекает информацию нормально. Проблема в количестве постов и в том, какие из них он извлекает.

При значении "$perpage" в PHP-файле, равном 10, загружаются первые 20 постов, затем каждый раз, когда загружаются "новые посты", загружаются посты 11-20 снова и снова. Я представляю, что это, вероятно, что-то простое, но мой уровень php & js действительно только на том уровне, где я могу понять это, чтобы прочитать, но не могу написать.

Я пробовал добавлять LIMIT в конец строки $sql, но это, похоже, полностью ломает код.

Любая помощь будет очень признательна!

Если вы хотите увидеть это в действии в реальной жизни, (очень) проект сайта находится здесь: сайт

$(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);
      }
    }
  }); 
});


runQuery($query);

if(empty($_GET["rowcount"])) {
  $_GET["rowcount"] = $db_handle->numRows($sql);
}
$pages  = ceil($_GET["rowcount"]/$perPage);
$output = '';
if(!empty($faq)) {
  $output .= '';
  foreach($faq as $k=>$v) {
    $output .= '

' . nl2br($faq[$k]["letter"]) . '


- This story took place on ' . $faq[$k]["dayfield"] . '/' . $faq[$k]["monthfield"] . '/' . $faq[$k]["yearfield"] . '. Posted by ' . $faq[$k]["nickname"] . ' from ' . $faq[$k]["country"] .'




'; } } print $output; ?>

Ответы (1)

Вы немного запутались в использовании $start и $perPage в вашем запросе.

В MySQL следующий запрос получает первые 15 результатов, начиная с 11-й строки (OFFSET 10) в этом наборе результатов:

SELECT * FROM BestWorst LIMIT 15, 10    

что является тем же самым, что и

SELECT * FROM BestWorst LIMIT 15 OFFSET 10

Использование $start в вашем случае должно соответствовать OFFSET запроса, тогда как $perPage - это буквально LIMIT в терминах MySQL.

Таким образом, замена двух упомянутых переменных в вашем запросе должна решить проблему.

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

Сейчас, когда вы прокручиваете страницу вниз и получаете значение pagenum (отправленное через AJAX в ваш PHP-скрипт) в переменной $page, $start умножается соответствующим образом, давая вам значения (0, 10, 20, ...) для части OFFSET вашего запроса - что вполне соответствует вашим ожиданиям.

2022 WebDevInsider