ФорумПрограммированиеPHP для идиотов → Расстраничить гостевую книгу

Расстраничить гостевую книгу

  • bowser499

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 4 июля 2010 г. 8:27

    У меня есть такой скрипт вывода сообщений гостевой:
    <?php
    $c=0;
    $r=mysql_query (&quot;SELECT * FROM gb ORDER BY dt DESC&quot;); // выбор всех записей из БД, отсортированных так, что самая последняя отправленная запись будет всегда первой.
    while ($row=mysql_fetch_array($r)) // для каждой записи организуем вывод.
    {
    if ($c%2)
    $col=&quot;bgcolor=&#39;#25383C&#39;&quot;; // цвет для четных записей
    else
    $col=&quot;bgcolor=&#39;#747170&#39;&quot;; // цвет для нечетных записей

    ?>
    <table border=&quot;0&quot; cellspacing=&quot;3&quot; cellpadding=&quot;0&quot; width=&quot;90%&quot; <? echo $col; ?> style=&quot;margin: 10px 0px;&quot;>
    <tr>
    <td width=&quot;150&quot; style=&quot;color: #FFF8C6;&quot;>Имя пользователя:</td>
    <td><?php echo $row[&#39;username&#39;]; ?></td>
    </tr>
    <tr>
    <td width=&quot;150&quot; style=&quot;color: #FFF8C6;&quot;>Дата опубликования:</td>
    <td><?php echo $row[&#39;dt&#39;]; ?></td>
    </tr>
    <tr>
    <td colspan=&quot;2&quot; style=&quot;color: #FFF8C6;&quot;>—————————————————————</td>
    </tr>
    <tr>
    <td colspan=&quot;2&quot;>
    <?php echo $row[&#39;msg&#39;]; ?>
    <br>
    </td>
    </tr>

    </table>
    <?php
    $c++;
    }

    if ($c==0) // если ни одной записи не встретилось
    echo &quot;Вы - первый, кто оставляет сообщение в этой гостевой книге.<br>&quot;;


    ?>

    Как добавить разграничение постранично? (по 10 записей на страницу, скажем)
  • md5

    Сообщения: 11951 Репутация: N Группа: в ухо

    Spritz 4 июля 2010 г. 8:28, спустя 53 секунды

    в статьях посмотри
    все умрут, а я изумруд
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 4 июля 2010 г. 8:30, спустя 2 минуты 29 секунд

  • bowser499

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 4 июля 2010 г. 8:49, спустя 18 минут 12 секунд

    Прочитал, вроде бы, всё сделал. Но вот мне теперь написало:
    Table &#39;35693.table&#39; doesn&#39;t exist
    Где такое прописало? У меня в той БД таблица gb есть и всё.
    Вот код:
    <?php
    $nums = 10;

    if (isset($_GET[&#39;page&#39;])) {
    $page = intval($_GET[&#39;page&#39;]);
    }
    else {
    $page = 1;
    }

    $query = &quot;SELECT COUNT(*) AS `counter`
    FROM `table`&quot;;
    $sql = mysql_query($query) or die(mysql_error());
    $row = mysql_fetch_assoc($sql);

    $elements = $row[&#39;counter&#39;];

    $pages = ceil($elements/$nums);


    if ($page < 1) {
    $page = 1;
    }
    elseif ($page > $pages) {
    $page = $pages;
    }


    $start = ($page-1)*$nums;

    // когда у нас в таблице нет записей
    if ($start < 0) $start = 0;

    $query = &quot;SELECT *
    FROM `table`
    LIMIT {$start}, {$nums}&quot;;
    $sql = mysql_query($query) or die(mysql_error());

    while ($row = mysql_fetch_assoc($sql)) {
    $c=0;
    $r=mysql_query (&quot;SELECT * FROM gb ORDER BY dt DESC&quot;); // выбор всех записей из БД, отсортированных так, что самая последняя отправленная запись будет всегда первой.
    while ($row=mysql_fetch_array($r)) // для каждой записи организуем вывод.
    {
    if ($c%2)
    $col=&quot;bgcolor=&#39;#25383C&#39;&quot;; // цвет для четных записей
    else
    $col=&quot;bgcolor=&#39;#747170&#39;&quot;; // цвет для нечетных записей

    ?>
    <table border=&quot;0&quot; cellspacing=&quot;3&quot; cellpadding=&quot;0&quot; width=&quot;90%&quot; <? echo $col; ?> style=&quot;margin: 10px 0px;&quot;>
    <tr>
    <td width=&quot;150&quot; style=&quot;color: #FFF8C6;&quot;>Имя пользователя:</td>
    <td><?php echo $row[&#39;username&#39;]; ?></td>
    </tr>
    <tr>
    <td width=&quot;150&quot; style=&quot;color: #FFF8C6;&quot;>Дата опубликования:</td>
    <td><?php echo $row[&#39;dt&#39;]; ?></td>
    </tr>
    <tr>
    <td colspan=&quot;2&quot; style=&quot;color: #FFF8C6;&quot;>—————————————————————</td>
    </tr>
    <tr>
    <td colspan=&quot;2&quot;>
    <?php echo $row[&#39;msg&#39;]; ?>
    <br>
    </td>
    </tr>

    </table>
    <?php
    $c++;
    }

    if ($c==0) // если ни одной записи не встретилось
    echo &quot;Вы - первый, кто оставляет сообщение в этой гостевой книге.<br>&quot;;
    }




    // далее нам надо прицепить листалку

    $neighbours = 6;
    $left_neighbour = $page - $neighbours;
    if ($left_neighbour < 1) $left_neighbour = 1;

    $right_neighbour = $page + $neighbours;
    if ($right_neighbour > $pages) $right_neighbour = $pages;

    if ($page > 1) {
    print &#39; <a href=&quot;?page=1&quot;>начало</a> … <a href=&quot;?page=&#39; . ($page-1) . &#39;&quot;>&amp;#8592;сюда</a> &#39;;
    }

    for ($i=$left_neighbour; $i<=$right_neighbour; $i++) {
    if ($i != $page) {
    print &#39; <a href=&quot;?page=&#39; . $i . &#39;&quot;>&#39; . $i . &#39;</a> &#39;;
    }
    else {
    // выбранная страница
    print &#39; <b>&#39; . $i . &#39;</b> &#39;;
    }
    }

    if ($page < $pages) {
    print &#39; <a href=&quot;?page=&#39; . ($page+1) . &#39;&quot;>туда&amp;#8594;</a> … <a href=&quot;?page=&#39; . $pages . &#39;&quot;>конец</a> &#39;;
    }




    ?>
    {+++234+++} Это я поправил, но у меня теперь куча дублей сообщений в гостевой книге… {+++202+++} Аргх. Теперь порядок вывода постов не тот, какой положено.
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 4 июля 2010 г. 9:12, спустя 23 минуты 21 секунду

    ORDER BY dt DESC перед LIMIT во втором запросе
  • Signum

    Сообщения: 27 Репутация: N Группа: Кто попало

    Spritz 5 июля 2010 г. 1:07, спустя 15 часов 55 минут 14 секунд

    убери запрос query, а в свой $r после DESC добавь LIMIT {$start}, {$nums}
  • 30 января 2017 г. 11:49, спустя 2401 день 11 часов 41 минуту

    Пользователь был удалён, сообщения недоступны


  • 22 июля 2017 г. 8:37, спустя 172 дня 19 часов 48 минут

    Пользователь был удалён, сообщения недоступны


Пожалуйста, авторизуйтесь, чтобы написать комментарий!