Ошибка в пагинации

166
12 декабря 2017, 20:24

Есть вот такая функция (Пытаюсь прикрутить пагинацию к выводу). Но на выходе она выдаёт ошибкой синтаксиса 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 записи.

READ ALSO
SQL запрос, помощь

SQL запрос, помощь

Есть огромная таблица table1:

193
транспонированая матрица - C++

транспонированая матрица - C++

Здравствуйте! В университете начали изучать подпрограммы, пока не могу толком в них разобратьсяЕсть матрица размерностью MxN

240
Помогите решить пример с оператором for [требует правки]

Помогите решить пример с оператором for [требует правки]

Помогите решить этот пример: y=cos(1+cos(2+

196