Создание Постраничной Навигации

Тема в разделе "PHP программирование", создана пользователем TYMON, 4 май 2013.

  1. TYMON

    TYMON Member

    Регистрация:
    19 июн 2010
    Сообщения:
    11
    Симпатии:
    0
    Вот кое-что написал, но чтото не работает, выводит каждую новость по 4 раза, а создает вторую страницу а там каждую новость по 2 раза. Всего новостей 6. Делаю чтобы было по 4 новости на странице (для демонстрации достаточно)

    Исходный код
    Код (Text):
    <?php
    include ("parts/connect.php");
    $base_data=mysql_query("SELECT * FROM statii", $base_connect);
    $page_data=mysql_fetch_array($base_data); //массив данных
    ?>
    <!doctype html>
    <html>
    <head>
    <meta charset="windows_1251">
    <title>Футбольные новости</title>
    <link href="css/mainstylecss.css" rel="stylesheet" type="text/css">
    </head>

    <body>
    <div id="outer_wrapper">
    <!--Header!-->
    <?php
    include ("parts/header.php")
    ?>

    <!--Menu-->
    <?php
    include ("parts/menu.php")
    ?>

    <div id="container" >

    <div id="main" align="center">
    <?php
    do
    // Выводим новости
    {

    // Считаем общее количество новостей
    $resultrows = mysql_query("SELECT `id` FROM `statii`");
    $rows = mysql_num_rows($resultrows);

    // Пишем количество выводимый новостей на страницу, в нашем случае - 10
    $messages_per_page = 4;

    // Условие: если запрос GET не существует или он не является числом, то присваеваем ему значение 0
    if (!isset($_GET['rowstart']) || !preg_match("/^[0-9]+$/", $_GET['rowstart']))
    {
    $_GET['rowstart'] = 0;
    }

    // Выводим по 4 новости на страницу, где начальной точкой отсчета будет считаться запрос GET
    $result = mysql_query("SELECT * FROM `statii` ORDER BY `id` DESC LIMIT ".$_GET['rowstart'].",".$messages_per_page);
    while ($data = mysql_fetch_assoc($result))
    {
    //связываем с id материала
    printf("<div id='blog'>
    <table>
    <tr >
    <td colspan=5><a href='podrobnee.php?id=%s'>%s</a><br></td>
    </tr>
    <tr>
    <td colspan=5> %s<br></td>
    </tr>
    <tr>
    <td align=center>%s  &nbsp %s  &nbspПросмотров%s </td>
    <td> <a href='podrobnee.php?id=%s'>Подробнее</a></td>
    </tr>
    </table>
    <hr />
    </div>", $page_data["id"], $page_data["title"], $page_data["introtext"],
    $page_data["author"], $page_data["date_sozd"], $page_data["views"], $page_data["id"]);

    }

    // Условие: если общее количество страниц больше, чем нам надо вывести (т.е. больше 10), то выводим список страниц
    if ($rows > $messages_per_page)
    {
    echo makepagenav($_GET['rowstart'], $messages_per_page, $rows, 3, $PHP_SELF."?&amp;");
    }

    }
    while ($page_data=mysql_fetch_array($base_data));  
    ?>

    </div> <!--Main close!-->

    <!--Lastnews-->
    <?php
    include ("parts/lastnews.php")
    ?>


    <!--Aside-->
    <?php
    include ("parts/aside.php")
    ?>



    </div>
    <!--Container close!-->

    <!--Footer-->
    <?php
    include ("parts/footer.php")
    ?>

    </div> <!--Out_Wrapper close!-->
    </body>
    </html>

    А вот файл PHP

    Код (PHP):
     <?
    // Функция постраничной навигации
    function makepagenav($start, $count, $total, $range = 0, $link)
    {
    if ($link == "") { $link = $PHP_SELF."?"; }
    $pg_cnt = ceil($total / $count);
    if ($pg_cnt <= 1) { return ""; }
    $idx_back = $start - $count;
    $idx_next = $start + $count;
    $cur_page = ceil(($start + 1) / $count);
    $res = "Страница ".$cur_page." из ".$pg_cnt.": ";
    if($idx_back >= 0) {
    if($cur_page > ($range + 1)) {
    $res .= "<a href='".$link."rowstart=0'>1</a>...";
    }
    }
    $idx_fst = max($cur_page - $range, 1);
    $idx_lst = min($cur_page + $range, $pg_cnt);
    if ($range == 0) {
    $idx_fst = 1;
    $idx_lst = $pg_cnt;
    }
    for ($i = $idx_fst; $i <= $idx_lst; $i++) {
    $offset_page = ($i - 1) * $count;
    if ($i == $cur_page) {
    $res .= "<span><strong>".$i."</strong></span>";
    } else {
    $res .= "<a href='".$link."rowstart=".$offset_page."'>".$i."</a>";
    }
    }
    if ($idx_next < $total) {
    if ($cur_page < ($pg_cnt - $range)) {
    $res .= "...<a href='".$link."rowstart=".($pg_cnt - 1) * $count."'>".$pg_cnt."</a>";
    }
    }  
    return "<div>".$res."</div>";
    }


    //соеденение с БД
    $base_location="localhost";
    $base_name="football";
    $base_user="root";
    $base_password="";

    $base_connect = mysql_connect ($base_location, $base_user, $base_password);
    mysql_select_db ($base_name, $base_connect);
    mysql_query ("set character_set_client='cp1251'"); //кодировка, в которой данные будут поступать от клиента
    mysql_query ("set character_set_results='cp1251'"); //кодировка, в которой будет выбран результат
    mysql_query ("set collation_connection='cp1251_general_ci'");
    if (!$base_connect)
    {
    echo("<p>Ошибка!!! Невозможно подключиться к базе данных!!!</p>");
    exit();
    }
    ?>
     
  2. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Вот это что за бред у Вас? (помечено //?????????????)
    Код (Text):
    $base_data=mysql_query("SELECT * FROM statii", $base_connect); //??????????????
    $page_data=mysql_fetch_array($base_data); //массив данных //??????????????????
    //...........
    do
    // Выводим новости
    {
    //........... тут вроде (на первый взгляд), нормальный себе такой код
    //........... подозреваю правда, что в printf Вы $page_data на $data забыли заменить...

    }
    while ($page_data=mysql_fetch_array($base_data)); //??????????????
    Сколько раз у Вас цикл do ... while крутится? :)
    Какое вообще назначение у данного кода?
     
  3. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    так не правильно
     
Загрузка...

Поделиться этой страницей