繁体   English   中英

在php的主要内容div中的分页表中显示第二页

[英]showing 2nd page in a paginated table in a primary content div in php

晚上好/早上好,我有一张分页的桌子。 第一页显示在primarycontent div中,这是我想要的位置。但是,单击第2、3页时。.etch在不同的链接中打开,我希望它在主要内容div中打开,例如第一页,但不知道该怎么做。 同样,单击上一个按钮时,它会转到第1页,而不是第50页上当前page..ex之前的页面,而是第1页。这是我的代码。

<?php
require_once ('mysqli_connect.php');

$display = 30;

if (isset($_GET['p']) && is_numeric ($_GET['p']))
{
    $pages = $_GET['p'];

} else {

    $q = "SELECT COUNT(NewCustomerID) FROM customer";
    $r = @mysqli_query($dbc, $q);
    $row = @mysqli_fetch_array ($r, MYSQLI_NUM);
    $records = $row[0];

    if ($records > $display){//more than 1 page.
    $pages = ceil($records/$display);
    } else {
        $pages = 1;
    }
} // end of p IF



if (isset($_GET['s']) && is_numeric ($_GET['s']))
{
        $start = $_GET['s'];
    } else {
        $start = 0;
    }

    $q = "SELECT(NewCustomerID) AS customerid,
      (OldCustomerID) AS oldcustomerid,
                    (FirstName) AS FirstName,
                    (MiddleName) AS MiddleName,
                    (LastName) AS LastName,
                    (UserName) AS UserName,
                    (CarID) AS CarID,
                    (CarColorID) AS CarColorID,
                    (ComputerID) AS ComputerID,
                    (IsLaptop) AS LaptopID,
                    (RaceID) AS RaceID,
                    (ResidenceID) AS ResidenceID,
                    (BirthMonthID) AS BirthMonthID  
    FROM  customer ORDER BY LastName ASC LIMIT $start, $display";
    $r = @mysqli_query($dbc, $q); if(!$r){die(mysqli_error($dbc));}

    Echo '<table>
    <tr>
        <td><b>NewCustomerID </b></td>
        <td><b>OldCustomerID </b></td>
        <td><b>FirstName </b></td>
        <td><b>MiddleName </b></td>
        <td><b>LastName </b></td>
        <td><b>UserName </b></td>
        <td><b>CarID </b></td>
        <td><b>CarColorID </b></td>
        <td><b>ComputerID </b></td>
        <td><b>IsLaptop </b></td>
        <td><b>RaceID </b></td>
        <td><b>ResidenceID </b></td>
        <td><b>BirthMonthID </b></td>
    </tr>';

    $bg = '#eeeeee'; // set initial back ground color

    while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
        $bg = ($bg =='#eeeeee' ? '#ffffff' : '#eeeeee'); // switch the background color.

    echo '<tr bgcolor="' . $bg . '">
        <td>' . $row['customerid'] . '</td>
        <td>' . $row['oldcustomerid']. '</td>
        <td>' . $row['FirstName']. '</td>
        <td>' . $row['MiddleName']. '</td>
        <td>' . $row['LastName']. '</td>        
        <td>' . $row['UserName'].'</td>
        <td>' . $row['CarID'].'</td>
        <td>' . $row['CarColorID'].'</td>
        <td>' . $row['BirthMonthID'].'</td>
        <td>' . $row['ComputerID'].'</td>
        <td>' . $row['LaptopID'].'</td>
        <td>' . $row['RaceID'].'</td>
        <td>' . $row['ResidenceID'].'</td>
        </tr>'; 

    } // end of while loop

echo '</table>';
mysqli_free_result($r);
mysqli_close($dbc);

// make the links to the other pages if necessary

if ($pages >1) {
    // add some spaces and start a paragraph
    echo '<br /> <p>';
    // determine what page the script is on:
    $current_page = ($start/$display)+1;
    // if it's not the first page, make a previous link;
    if ($current_page !=1) {
        echo '<a href="#"' . ($start - $display) . ' &p=' . $pages . '">Previous   </a> '; 
    }
    for ($i = 1; $i <= $pages; $i++) {
        if ($i != $current_page) {
            echo '<a href="#" ' . (($display * ($i - 1))) . '&p=' . $pages . '">'
            . $i . '</a> ';
        }else{
            echo $i . ' ';
        }
    }// end of FOR loop

    // if it is not the last page, make a next button
    if ($current_page != $pages) {
        echo '<a href="#"' . ($start + $display) . '&p=' . $pages . '">Next</a>';
    }

    echo '</p>'; // close the paragraph
} // endo of links section
?>

首先,您应该传递GET/POST参数,该参数将显示页面。 从那里获取它之后,在变量$page示例中,可以使用带有关键字OFFSETLIMIT SQL查询,例如LIMIT 10 OFFSET 2 ,它可以为您提供11到20个项目编号的精确行。

希望这正是您所需要的。

已编辑

<?php
    $route      = '/index.php?p='; // where to go on click page
    $total      = ($records % $display) != 0 ? floor($records / $display) + 1 : $records / $display; // total pages count
    $current    = isset($_GET['p']) ? $_GET['p'] : 1; // current page number
    $last       = 1; // init value of the last page
?>
<p class="pager">
    <?php if ($total <= 9): ?>
        <?php for ($i = 1; $i <= $total; $i++): ?>
            <a href="<?php echo $route, $i; ?>" <?php if ($current == $i) echo 'class="acitve"'; ?>><?php echo $i; ?></a>
        <?php endfor; ?>
    <?php else: ?>
        <?php
            $rbound = $current + 1;
            $lbound = $current - 1;

            if ($lbound < 1)
                $lbound = 1;

            if ($rbound > $total)
                $rbound = $total;

            for ($i = 1; $i <= 3; $i++):
        ?>
            <a href="<?php echo $route, $i; ?>" <?php if ($current == $i) echo 'class="acitve"'; ?>><?php echo $i; ?></a>
            <?php $last = $i; ?>
        <?php endfor; ?>

        <?php if ($lbound <= $last): ?>
            <?php for ($i; $i <= $rbound; $i++): ?>
                <a href="<?php echo $route, $i; ?>" <?php if ($current == $i) echo 'class="acitve"'; ?>><?php echo $i; ?></a>
            <?php $last = $i; ?>
            <?php endfor; ?>
        <?php else: ?>
            <?php echo $lbound == $last + 1 ? '' : '...'; ?>
        <?php endif; ?>

        <?php if ($lbound > 3 && $rbound < $total - 2): ?>
            <?php for ($i = $lbound; $i <= $rbound; $i++): ?>
                <a href="<?php echo $route, $i; ?>" <?php if ($current == $i) echo 'class="acitve"'; ?>><?php echo $i; ?></a>
            <?php $last = $i; ?>
            <?php endfor; ?>
        <?php endif; ?>

        <?php if ($rbound >= $total - 2): ?>
            <?php for ($i = $lbound; $i < $total - 2; $i++): ?>
                <a href="<?php echo $route, $i; ?>" <?php if ($current == $i) echo 'class="acitve"'; ?>><?php echo $i; ?></a>
            <?php $last = $i; ?>
            <?php endfor; ?>
            <?php $last = $last > $total - 4 ? $last : $total - 2; ?>
        <?php else: ?>
            <?php echo $rbound == $total - 3 ? '' : '...'; ?>
            <?php $last = $total - 2; ?>
        <?php endif; ?>

        <?php for ($i = $total - 2; $i <= $total; $i++): ?>
            <a href="<?php echo $route, $i; ?>" <?php if ($current == $i) echo 'class="acitve"'; ?>><?php echo $i; ?></a>
        <?php endfor; ?>
    <?php endif; ?>
</p>

以上就是给您的寻呼机呈现为: 1 2 3 ... 12 13 14 ... 18 19 20 ,这里当前页为13,所以它显示前3页页码,当前页+/- 1页,最后3页页码。 因此对于第一页应该是: 1 2 3 ... 18 19 20 ,对于最后一页是相同的。 还将active CSS类添加到当前页面链接。

节省大量时间,并使用预先设计的网格。 我选择的网格是DataTables,它已经解决了所有错误和浏览器不一致问题,并且分页就像一行代码一样简单。 如果您想变得非常简单,则可以输出整个表,让数据表对分页以及排序,过滤等进行排序。如果您像我一样必须处理很多结果,则还可以通过ajax加载数据,并让数据表实际组装dom。 无论哪种方式,它都比编写自己的方法更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM