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

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

  • bowser499

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

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

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

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

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

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


    ?>

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

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

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

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

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

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

  • bowser499

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

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

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

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

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

    $elements = $row['counter'];

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


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


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

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

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

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

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

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

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




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

    $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 ' <a href="?page=1">начало</a> … <a href="?page=' . ($page-1) . '">&#8592;сюда</a> ';
    }

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

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




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

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

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

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

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

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

    убери запрос query, а в свой $r после DESC добавь LIMIT {$start}, {$nums}

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