Разбиение php страницы на странички по 15 записей

Discussion in 'PHP' started by BeasTeHbIw, 15 Apr 2017.

  1. BeasTeHbIw

    BeasTeHbIw New Member

    Joined:
    15 Apr 2017
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Добрый день Ув. Форумчане!
    Есть такой код php

    PHP:
    <?php
    //phpinfo();exit; // Чисто для отладки

    // Настройки mysql.
    $mysql_host        '';
    $mysql_user        '';
    $mysql_pass        '';
    $mysql_db        '';

    if(!
    $db_link mysqli_connect($mysql_host$mysql_user$mysql_pass$mysql_db))
        die(
    'Не могу подключиться к mysql: 'mysqli_error());

    if (
    mysqli_num_rows(mysqli_query($db_link"SHOW TABLES LIKE 'GGWinStats'")) > 0){
    $result mysqli_query($db_link"SELECT * FROM `GGWinStats` ORDER BY `player_win` DESC");
    $players = array();

    if(
    mysqli_num_rows($result) > 0){
        while(
    $players[] = mysqli_fetch_assoc($result));
        
    array_pop($players);
    }

    }
    ?><!DOCTYPE html>
    <html lang="ru">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width">
        <meta name="description" content="">
        <link rel="stylesheet" href="stylegg/bootstrap.min.css">
        <link rel="stylesheet" href="stylegg/bootstrap-theme.min.css">
        <script type="text/javascript" src="stylegg/jquery.min.js"></script><style type="text/css"></style>
       
        <style>
        footer
        {
                margin-top: 30px;
                padding: 4px;
                display: inline-block;
               
                background: whitesmoke;
                border-radius: 4px;
               
                float: right;
        }

        body
        {
        font-family: Verdana, sans-serif;
        font-size: 11px;
        color: #fff;
        background-image:url(images/ggbg.jpg);
        background-position:top;
        background-repeat:no-repeat;
        background-color: #000;
        background-attachment: fixed, fixed;
        }
        </style>

    </head>

    <body>
        <div class="container">
          <div>
            <table class="table table">
            <tr>
                <th><h4><b><span class="label label-primary">Игрок</span></b></h4></th>
                <th><h4><b><span class="label label-primary">Побед</b></h4></th>
                <th><h4><b><span class="label label-primary">Побед поряд</span></b></h4></th>
                <th><h4><b><span class="label label-primary">Лучшая полоса побед поряд</span></b></h4></th>
                <th><h4><b><span class="label label-primary">Всего игр</span></b></h4></th>
                <th><h4><b><span class="label label-primary">Последняя победа</span></b></h4></th>
            </tr>
            <?php if(!count($players)): ?>
            <tr>
                <td colspan="3">Статистики пока еще нет.</td>
            </tr>
            <?php else: ?>
            <?php foreach($players as $player): ?>
            <tr>
                <td><h4><span class="label label-info"><?=$player['player_name']?></span></h4></td>
                <td><h4><span class="label label-default"><?=$player['player_win']?></span></h4></td>
                <td><h4><span class="label label-default"><?=$player['win_contr']?></span></h4></td>
                <td><h4><span class="label label-default"><?=$player['win_contr_two']?></span></h4></td>
                <td><h4><span class="label label-default"><?=$player['total_gg_user']?></span></h4></td>
                <td><h4><span class="label label-default"><?=$player['date_win']?></span></h4></td>

            </tr>
            <?php endforeach; ?>
            <?php endif; ?>
            </table>
          </div>
    </div>
    </body>
    </html>
    Подскажите пожалуйста, как сделать так, чтобы код делил на странички по 15 записей?
     
  2. bologer

    bologer Member

    Joined:
    25 Nov 2016
    Messages:
    62
    Likes Received:
    18
    Reputations:
    3
    1. Найди готовый класс пагинации (Pagination). Пример 1, пример 2 для PDO. Не самые лучшие варианты, но как я вижу, ты все равно это не в production (вероятнее просто для себя сделал), поэтому и эти подойдут.
    2. подключи класс к твоему основному файлу (include)
    3. используй документацию по ссылкам выше и дополни свой код методами и/или функциями из класса
    4. используй функцию помощник из класса, чтобы выводить пагинацию после таблицы (которая будет разделять твой запрос на порции, например по 15).
    В целом все должно будет понятно из документации к классам, там ничего сложного нет. А в целом, я бы посоветовал пользоваться какой-нибудь небольшой framework для таких целей, чтобы велосипеды не делать.
     
    BeasTeHbIw likes this.
  3. BeasTeHbIw

    BeasTeHbIw New Member

    Joined:
    15 Apr 2017
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Скачал с первой ссылки пагинатор, попытался подключить.
    Вот, что получилось, но что-то какая-то ерунда(на странице ошибки...:(

    PHP:
    <?php
    //phpinfo();exit; // Чисто для отладки

    // Настройки mysql.
    $mysql_host        '';
    $mysql_user        '';
    $mysql_pass        '';
    $mysql_db        '';

    if(!
    $db_link mysqli_connect($mysql_host$mysql_user$mysql_pass$mysql_db))
        die(
    'Не могу подключиться к mysql: 'mysqli_error());

    if (
    mysqli_num_rows(mysqli_query($db_link"SHOW TABLES LIKE 'GGWinStats'")) > 0){
    $result mysqli_query($db_link"SELECT * FROM `GGWinStats` ORDER BY `player_win` DESC");
    $players = array();

    if(
    mysqli_num_rows($result) > 0){
        while(
    $players[] = mysqli_fetch_assoc($result));
        
    array_pop($players);
    }

    }
    ?><!DOCTYPE html>
    <html lang="ru">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width">
        <meta name="description" content="">
        <link rel="stylesheet" href="stylegg/bootstrap.min.css">
        <link rel="stylesheet" href="stylegg/bootstrap-theme.min.css">
        <script type="text/javascript" src="stylegg/jquery.min.js"></script><style type="text/css"></style>
      
      //include the class
        include('ggstyle/paginator.php');
      
        <style>
        footer
        {
                margin-top: 30px;
                padding: 4px;
                display: inline-block;
              
                background: whitesmoke;
                border-radius: 4px;
              
                float: right;
        }

        body
        {
        font-family: Verdana, sans-serif;
        font-size: 11px;
        color: #fff;
        background-image:url(images/ggbg.jpg);
        background-position:top;
        background-repeat:no-repeat;
        background-color: #000;
        background-attachment: fixed, fixed;
        }

        </style>

    </head>

    //create new object pass in number of pages and identifier
    $pages = new Paginator('10','p');

    //get number of total records
    $rows = $db->query('SELECT id FROM table');
    $total = count($rows);

    //pass number of records to
    $pages->set_total($total);

    $data = $db->query('SELECT * FROM table '.$pages->get_limit());
    foreach($data as $row) {
    <body>
        <div class="container">
          <div>
            <table class="table table">
            <tr>
                <th><h4><b><span class="label label-primary">Игрок</span></b></h4></th>
                <th><h4><b><span class="label label-primary">Побед</b></h4></th>
                <th><h4><b><span class="label label-primary">Побед поряд</span></b></h4></th>
                <th><h4><b><span class="label label-primary">Лучшая полоса побед поряд</span></b></h4></th>
                <th><h4><b><span class="label label-primary">Всего игр</span></b></h4></th>
                <th><h4><b><span class="label label-primary">Последняя победа</span></b></h4></th>
            </tr>
            <?php if(!count($players)): ?>
            <tr>
                <td colspan="3">Статистики пока еще нет.</td>
            </tr>
            <?php else: ?>
            <?php foreach($players as $player): ?>
            <tr>
                <td><h4><span class="label label-info"><?=$player['player_name']?></span></h4></td>
                <td><h4><span class="label label-default"><?=$player['player_win']?></span></h4></td>
                <td><h4><span class="label label-default"><?=$player['win_contr']?></span></h4></td>
                <td><h4><span class="label label-default"><?=$player['win_contr_two']?></span></h4></td>
                <td><h4><span class="label label-default"><?=$player['total_gg_user']?></span></h4></td>
                <td><h4><span class="label label-default"><?=$player['date_win']?></span></h4></td>

            </tr>
            <?php endforeach; ?>
            <?php endif; ?>
            </table>
          </div>
    </div>
    </body>
    }

    //create the page links
    echo $pages->page_links();
    </html>
     
  4. bologer

    bologer Member

    Joined:
    25 Nov 2016
    Messages:
    62
    Likes Received:
    18
    Reputations:
    3
    Наймите разработчика (для этой задачи это будет стоить копейки), потому что вы не очень понимаете процесс разработки т.д. У меня к сожалению нет времени писать код за вас, я лишь дал наводку. Подождите немного, может кто с форума поможет.

    Я вижу пока что две фатальные ошибки.
    1. У вас не подключен файл pagination.php из класса с первой ссылки
    2. Большая часть PHP кода, даже не обернута <?php ?> тэгами — тем самым он у вас вообще работать не будет обрабатываться, а просто выведется как текст
     
    GRRRL Power likes this.
  5. BeasTeHbIw

    BeasTeHbIw New Member

    Joined:
    15 Apr 2017
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    1. Он не так подключается? include('ggstyle/paginator.php'); :D
    2. Вообще. в целом код работает. всё отображает. просто не делит на странички. Когда добавил код для пагинации, тогда уже сверху страницы(при просмотре в браузере) вывелся какой-то код текстом, конкретно этот
    //include the class include('paginator.php'); //create new object pass in number of pages and identifier $pages = new Paginator('10','p'); //get number of total records $rows = $db->query('SELECT id FROM table'); $total = count($rows); //pass number of records to $pages->set_total($total); $data = $db->query('SELECT * FROM table '.$pages->get_limit()); foreach($data as $row) {
    Но при этом всё-равно сама таблица с данными показывается корректно.