За последние 24 часа нас посетили 52367 программистов и 1796 роботов. Сейчас ищут 779 программистов ...

Постраничная навигация

Тема в разделе "PHP для новичков", создана пользователем Andrey5555, 5 янв 2008.

  1. Andrey5555

    Andrey5555 Активный пользователь

    С нами с:
    29 ноя 2007
    Сообщения:
    486
    Симпатии:
    0
    Адрес:
    Киев
    Мне надо сделать так что бы на странице выводилось 1 сообщение (скрипт называеться show_announcement.php). Сообщений много.

    Вот то что у меня получилось, но здесь что то не такю Исправьте пожалуйста.

    <?php
    include ("mysql.php");
    $section_id = $_GET['id'];
    $section_id = mysql_real_escape_string($section_id);
    $section_id = (int)$section_id;
    $query = mysql_query ("SELECT id, section, type, text, name, email, date FROM announcements WHERE section = '$section_id' ORDER BY date desc");
    while (list ($id, $section, $type, $text, $name, $email, $date) = mysql_fetch_array ($query))
    {
    echo "<table width='300' border ='1' >";
    echo "<tr>";
    echo "<td width='150'>$type</td><td><div align='right'>$date</div></td>";
    echo "</tr>";
    echo "</table>";
    echo "<table width='300' border ='1'>";
    echo "<tr>";
    echo "<td>$text</td>";
    echo "</tr>";
    echo "</table>";
    echo "<table width='300' border ='1'>";
    echo "<tr>";
    echo "<td width='150'>$name</td><td><div align='right'><a href='mailto:$email'>$email</div></td>";
    echo "</table>";
    echo "<br>";
    }
    $num = mysql_num_rows ($query);
    $page = "0";
    if ($num > 0)
    {
    $page = $page + 1;
    echo "<a href='show_announcement?page=$page'>$page </a>";
    }
    ?>
     
  2. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    phpfaq.ru/paginator
     
  3. Andrey5555

    Andrey5555 Активный пользователь

    С нами с:
    29 ноя 2007
    Сообщения:
    486
    Симпатии:
    0
    Адрес:
    Киев
    Понял.
    А как сделать так что бы данные выводились через list


    // количество записей, выводимых на странице
    $per_page=10;
    // получаем номер страницы
    if (isset($_GET['page'])) $page=($_GET['page']-1); else $page=0;
    // вычисляем первый оператор для LIMIT
    $start=abs($page*$per_page);
    // составляем запрос и выводим записи
    // переменную $start используем, как нумератор записей.
    $q="SELECT * FROM `table` ORDER BY field LIMIT $start,$per_page";
    $res=mysql_query($q);
    while($row=mysql_fetch_array($res)) {
    echo ++$start.". ".$row['field']."<br>\n";
    }

    // дальше выводим ссылки на страницы:
    $q="SELECT count(*) FROM `table`";
    $res=mysql_query($q);
    $row=mysql_fetch_row($res);
    $total_rows=$row[0];

    $num_pages=ceil($total_rows/$per_page);

    for($i=1;$i<=$num_pages;$i++) {
    if ($i-1 == $page) {
    echo $i." ";
    } else {
    echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i."</a> ";
    }
    }


    И не было .$_SERVER['PHP_SELF']. и тп.

    Измените пожалуйста
     
  4. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Тут нет ничего сложного.
    Подумай сам и попробуй еще раз.
    Не получится - пиши и покажи, что именно не получается.
    З.ы
    форматируй код тегами [ php ] [/ php ]
     
  5. Andrey5555

    Andrey5555 Активный пользователь

    С нами с:
    29 ноя 2007
    Сообщения:
    486
    Симпатии:
    0
    Адрес:
    Киев
    PHP:
    1. <?php
    2. include ("mysql.php");
    3. $query = mysql_query ("SELECT id, image, title FROM sections");
    4. echo "<table border='0'>";
    5. while (list ($id, $image, $title) = mysql_fetch_array($query))
    6. {
    7. echo "<tr>";
    8. echo "<td width='60'><div align='center'><img src =$image></td><td><a href=http://localhost/show_announcement?id=$id>$title</a></td>";
    9. echo "</tr>";
    10. }
    11. echo "</table>";
    12. $per_page=2;
    13. if (isset($_GET['page'])) $page=($_GET['page']-1); else $page=0;
    14. $start=abs($page*$per_page);
    15. $q="SELECT count(*) FROM sections";
    16. $res=mysql_query($q);
    17. $row=mysql_fetch_row($res);
    18. $total_rows=$row[0];
    19. $num_pages=ceil($total_rows/$per_page);
    20. for($id=1;$id<=$num_pages;$id++) {
    21. if ($id-1 == $page) {
    22. echo "$id ";
    23. } else {
    24. echo "<a href=".$_SERVER['PHP_SELF']."?page=$id>$id</a>";
    25. }
    26. }
    27. ?>

    Вот что у меня получилось. Но скрипт не переносит данніе на след. страницу. Он выводит все данные на одной странице. Страниц несколько и на каждой из них все данные, а должно отображаться на странице - 2 сообщения.
    Люди помогите!! Исправь пожалуйста.
     
  6. Professor

    Professor Активный пользователь

    С нами с:
    2 янв 2008
    Сообщения:
    121
    Симпатии:
    0
    Адрес:
    г. Одесса, Украина
    Ты же первую выборку из базы делаешь без условий. Конечно у тебя всё будет выводиться. Сделай как ты сам раньше написал: посчитай в зависимости от введённой странички сколько записей выбрать из базы.
    Только ты тут в запросе вроде перепутал местами $start и $per_page. После LIMIT сначала идёт кол-во выборок, а потом - от куда отсчитывать.
     
  7. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    LIMIT $start,$per_page

    или

    LIMIT $per_page OFFSET $start

    второй вариант предпочтительнее
     
  8. Andrey5555

    Andrey5555 Активный пользователь

    С нами с:
    29 ноя 2007
    Сообщения:
    486
    Симпатии:
    0
    Адрес:
    Киев
    Я все сделал. Все работате. Спасибо всем кто пытался помочь))). Можно закрывать