0

Есть вот такая функция (Пытаюсь прикрутить пагинацию к выводу). Но на выходе она выдаёт ошибкой синтаксиса SQL, то есть первое значение LIMIT (Из переменной $start) прилетает отрицательным, и зеркальным значению $num. В данном случае это -2, 2. И из-за этого всё ломается. Как я понял, значение $total = 0 по итогам операций, что и приводит к такому итогу. Вот я и не понимаю, то ли количество из бд не приходит, то ли ещё что. Но если бы записи считались правильно, то как я понимаю, скрипт бы работал исправно. Битый час ломаю голову над этим вопросом, укажите мне на ошибку.

 function articles_all($link){

    $num = 2;
    $page = $_GET['page'];
    db_connect();
    $result00 = mysql_query("SELECT COUNT(*) FROM articles");
    $temp = mysql_fetch_array($result00);
    $posts = $temp[0];
    $total = (($posts - 1) / $num) + 1;
    $total =  intval($total);
    $page = intval($page);
    if(empty($page) or $page < 0) $page = 1;
    if($page > $total) $page = $total;
    $start = $page * $num - $num;       

    //Запрос
    $query = "SELECT * FROM articles ORDER by id DESC LIMIT $start, $num";
    $result = mysqli_query($link, $query);
    if (!$result)
        die(mysqli_error($link));

    // Извлечение из бд

    $n = mysqli_num_rows($result);
    $articles = array();

    for ($i = 0; $i < $n; $i++)
    {
        $row = mysqli_fetch_assoc($result);
        $articles[] = $row;
    }

    return $articles;

}

Новый код, по-прежнему нерабочий.

function articles_all($link){

        $num = 2;
        $page = $_GET['page'];
        if(empty($page) or $page < 0) $page = 1;
        $link;
        $res = mysql_query("SELECT COUNT(*) FROM articles");
        $rowz = mysql_fetch_row($res);
        $posts = $rowz[0]; // всего записей
        $total =  intval((($posts - 1) / $num) + 1);
        $page = intval($page);
        if($page > $total) $page = $total;
        $start = $page * $num - $num;       

        //Запрос
        $query = "SELECT * FROM articles ORDER by id DESC LIMIT $start, $num";
        $result = mysqli_query($link, $query);
        if (!$result)
            die(mysqli_error($link));

        // Извлечение из бд

        $n = mysqli_num_rows($result);
        $articles = array();

        for ($i = 0; $i < $n; $i++)
        {
            $row = mysqli_fetch_assoc($result);
            $articles[] = $row;
        }

        return $articles;

    }

Проверял так: Загружал без проверки if($page > $total) $page = $total; и страница стартовала, отображала количество записей указанных в $num. Но навигация не отображалась, так как в ней проверка. Но если к примеру писать просто в строку /index.php?page=2, то страница отображает следующие 2 записи.

0 Answers0