Базовая нумерация страниц - PullRequest
       17

Базовая нумерация страниц

1 голос
/ 14 февраля 2011

Я не очень опытный программист, поэтому я не хочу использовать сложную нумерацию страниц.Есть ли альтернатива использованию нумерации страниц, как в моих запросах, могу ли я ограничить их до 20 результатов, а затем, если их более 20, я могу показать кнопку «Далее», а затем эта кнопка будет дополнительно загружать следующие результаты?

Я хочу, чтобы "next" показывалось только при 20> результатах?Любая помощь будет оценена.Благодарю.

Код:

  $query="SELECT * FROM actresses where actress_id = '$actressid' and production_full_name LIKE '%$q%'";  
       $result=mysql_query($query);

        $num=mysql_numrows($result);

        mysql_close();

          echo "";

       $i=0;
         while ($i < $num) {

         $1=mysql_result($result,$i,"production_full_name");
           $2=mysql_result($result,$i,"production_id");
     $3=mysql_result($result,$i,"actress");


          echo "<br><div id=linkcontain><a id=slink   href=$data/actress.php?id=$2>$3</a><div id=production>$1</div></div>";

            echo "";

            $i++;
            }

Ответы [ 7 ]

3 голосов
/ 14 февраля 2011

Вы можете добавить ограничение к вашему запросу.

$lower_limit = $results_per_page * $page_number;
$upper_limit = $lower_limit + $results_per_page

..and production_full_name LIKE '%$q%' LIMIT $lower_limit, $upper_limit

Затем создайте условную ссылку "следующая страница"

if ($upper_limit > 20) echo '<a href="{page url}?page_number='.($page_number+1).'">Next</a>;
2 голосов
/ 14 февраля 2011

Вы можете найти много примеров поиска в Google.http://www.php -mysql-tutorial.com / wikis / php-tutorial / paging-using-php.aspx , например.

Вам нужно только отредактировать $ rowPerPage для количества результатов, и если вы хотите отредактировать, что получить из БД, запрос $ .

Включения не обязательны, однако.

edit: обратите внимание на использование $ _GET, которое будет влиять на запрос к БД.Вы должны быть осторожны, чтобы не допустить опасных значений в нем ( mysql инъекция ).В примере веб-страницы он использует ceil, поэтому я считаю, что он выведет 0 для нечислового значения, что безопаснее.

1 голос
/ 14 февраля 2011

Если ваш запрос настроен как

"SELECT SQL_CALC_FOUND_ROWS * FROM actresses where actress_id = '$actressid' and production_full_name LIKE '%$q%' LIMIT ".($page*$lpage).",".$lpage

... следующий оператор может быть SELECT FOUND_ROWS(), чтобы получить фактическое количество результатов. Не забудьте поставить mysql_real_escape_string() на эти переменные.

НИКОГДА не используйте SELECT * с mysql_num_rows; если это большой стол, он потратит много времени.

1 голос
/ 14 февраля 2011

Что вы можете сделать, это получить COUNT(*) того, сколько строк в вашем наборе данных. Затем решите, сколько элементов вы хотите на странице. $numberOfRows / $itemsPerPage дает вам количество страниц. В MySQL для ограничения результатов вы используете LIMIT X, Y X - начало диапазона, а Y - количество элементов, которые вы хотите получить. Таким образом, чтобы получить все элементы на странице, ваш запрос будет LIMIT ($currentPage * $itemsPerPage), $itemsPerPage Тогда вам решать, в зависимости от того, как вы хотите отформатировать свою нумерацию страниц, написать логику представления. Просто перейдите назад: если текущая страница равна 1, предыдущая кнопка отключена. Если страница не 1, то номер текущей страницы - это количество страниц с начала. Если общее количество страниц больше, чем текущая страница, считайте с текущей страницы до последней страницы (если только вы не хотите сократить количество страниц в какой-то момент)

Я использую следующий метод для создания списка страниц независимо от направления. Я мог бы добавить 5 для текущей страницы и 0 в качестве целевой страницы, и он вернул бы список из 5 страниц, чтобы я мог перебрать их по порядку.

/*
 * Generates a list of pages based on the current page to the goal page number
 */
function generatePageList($currentPage, $goal) {
    $span = $goal - $currentPage;
    $step = abs($span) / $span;
    $list = array();

    for($x = $currentPage; $x !== $goal;) {
        // We want to add the step at the beginning of the loop, instead of 
        // at the end
        // Fixes bug when there are only two pages
        $x += $step;
        $list[] = $x;
    }

    return $list;

}
1 голос
/ 14 февраля 2011

Примерно так:

$data = mysql_query("SELECT * FROM `table`");
$total_data = mysql_num_rows($data);

$step = 30;
$from = $_GET['p'];

$data = mysql_query("SELECT * FROM `table` LIMIT '.$from.','.$step.'"

И создание ссылок:

$p=1;
for ($j = 0 ; $j <= $total_data+$step; $j+=$step) 
{ 
    echo ' <a href="page.php?p='.$j.'">'.$p.'</a> '; 
    $p++;

} ?>

Не тестировалось.

1 голос
/ 14 февраля 2011

Вы можете использовать пакеты PEAR.Их гораздо проще использовать аналогично фреймворкам.Но прежде чем использовать их, вам необходимо проверить, работает ли PEAR на вашем сервере или нет.Если вы используете его локально, то есть шаги для установки пакетов PEAR на ваш локальный компьютер.Для получения дополнительных инструкций по установке PEAR. Нажмите здесь , чтобы просмотреть шаги установки.

После того, как вы установили пакет PEAR, пожалуйста, следуйте инструкции по настройке класса PAGER.

0 голосов
/ 19 апреля 2017

Это более простой способ создания нумерации данных

.
<?php
    require_once 'db_connect.php';

    $limit = 20;  
    if (isset($_GET["page"])) { $page  = $_GET["page"]; } else { $page=1; };  
    $start_from = ($page-1) * $limit;  

    $sql = "SELECT * FROM employee ORDER BY id ASC LIMIT $start_from, $limit";  
    $rs_result = mysqli_query($con, $sql);  
?>


<table class="table table-bordered">  
        <thead>  
            <tr>  
                <th>Name</th>  
                <th>Salary</th>
                <th>Age</th>  
            </tr>  
        </thead>  
            <tbody>  
                <?php  
                    while ($row = mysqli_fetch_assoc($rs_result)) {?>  
                        <tr>  
                            <td><?php echo $row["employee_name"]; ?></td>  
                            <td><?php echo $row["employee_salary"]; ?></td>  
                            <td><?php echo $row["employee_age"]; ?></td>  
                        </tr>  
                        <?php  
                    };  
                ?>  
            </tbody>  
</table>



<?php  
        $sql = "SELECT COUNT(id) FROM employee";  
        $rs_result = mysqli_query($con, $sql);  
        $row = mysqli_fetch_row($rs_result);  
        $total_records = $row[0];  
        $total_pages = ceil($total_records / $limit);  
        $pagLink = "<nav><ul class='pagination'>";  
        for ($i=1; $i<=$total_pages; $i++){  
            $pagLink .= "<li><a href='index.php?page=".$i."'>".$i."</a></li>";  
        };  
        echo $pagLink . "</ul></nav>";  
?>


<script type="text/javascript">
    $(document).ready(function(){
        $('.pagination').pagination({
            items: <?php echo $total_records;?>,
            itemsOnPage: <?php echo $limit;?>,
            cssStyle: 'light-theme',
            currentPage : <?php echo $page;?>,
            hrefTextPrefix : 'index.php?page='
        });
    });
</script>
...