-1

如果数据库每页仅显示至少 5 行,我如何使选项值增加一页

假设表格有 20 行,则选项值将至少有 4 页,因为每页仅选择 5 行

<script type="text/javascript">
function submitPg()
{
window.location = "report.php?selpg=" + document.AllIn.cbxpg.value;
}
</script>
<?php
if(!isset( $_GET["selpg"]))
{    $selpg = 1; }
elseif ($_GET["selpg"] >= 1)
{    $selpg = $_GET["selpg"]; }
else
{    $selpg = 1; }
$selpgQQ = $selpg - 1;
$selpgQ1 = $selpgQQ * 5;
$selpgQ2 = $selpg * 5;
$no = $selpgQ1 +1;
?>
<html>
<body>
<table id="tabel" border="1" cols="30" width="50%" bordercolor="blue" >
    <tr bgcolor="gray">
        <th width="1%">No</th>
        <th width="1%">Date</th>
        <th width="1%">Time</th>
        <th width="2%">Number</th>
        <th width="10%">Message</th>


    </tr>
    <?

    $no = 1;
    $query =("SELECT * FROM mytable ORDER BY date ASC LIMIT $selpgQ1 , 5");
    $sql = mysql_query($query);

while ($hasil = mysql_fetch_array ($sql))    {
        $date = $hasil["date"];
        $time = $hasil["time"];
        $phone = $hasil["phone"];
        $message = $hasil["message"];
?>
        <tr >
        <td><center><?=$no?></center></td>
        <td><?=$date?></td>
        <td><?=$time?></td>
        <td><?=$phone?></td>
        <td><?=$message?></td>
        </tr>    

    <? $no++; }?>
<form name="AllIn" id="AllIn">
<select name="cbxpg" onchange="submitPg()">
<option value="0">Current Page : <?php echo $selpg; ?></option>
<option value="1">Page 1</option>
<option value="2">Page 2</option>
</select>
&nbsp;&nbsp;&nbsp;
</form>
</body></html>
4

2 回答 2

1

这就是我将如何做到的。这不会硬编码要在单个页面上显示的行数,因此以后更容易自定义。如果需要,您甚至可以使用另一个选择菜单来编辑页数!关注评论。我认为您应该检查两侧“selpg”的界限:它可能是非正数,也可能超过页数。

<?php

// Set the number of rows to display on one page
$rowsPerPage = 5;

// Get the total number of rows in the table
$rowsTotal = mysql_num_rows(mysql_query("SELECT * FROM mytable"));

// To get the total number of pages, take the ceiling
// of the total number of pages divided by the number
// of pages to show on a single page
$pagesTotal = ceil($rowsTotal / $rowsPerPage);

// Get the current page number
if (!isset($_GET['selpg'])) {
    $pageNumber = 1;
} else {
    $pageNumber = $_GET['selpg'];
    if ($pageNumber < 1) {
        $pageNumber = 1;
    } else if ($pageNumber > $pagesTotal) {
        $pageNumber = $pagesTotal;
    }
}

// Get the offset for the SQL query
$offset = ($pageNumber - 1) * $rowsPerPage;

// Set the iterator to start at the current offset
$no = $offset;

然后在你的 MySQL 查询中你会写:

$query = "SELECT * FROM mytable ORDER BY date ASC LIMIT $offset, $rowsPerPage";

最后,要使下拉列表动态填充:

<select name="selpg" onchange="submitPg()">
    <?php

    // To fill the dropdown dynamically, loop
    // from 1 to the total number of pages
    for ($i = 1; $i <= $pagesTotal; $i++) {
        echo "<option value='$i'";

        // Immediately select the current page
        if ($i == $pageNumber) echo " selected";

        echo ">Page " . $i . "</option>";
    } ?>
</select>

对于其余的代码,您可以使用 ':?>' 以获得更好的可读性。另外,你错过了一个结束</table>标签。

<table id="tabel" border="1" cols="30" width="50%" bordercolor="blue" >
    <tr bgcolor="gray">
        <th width="1%">No</th>
        <th width="1%">Date</th>
        <th width="1%">Time</th>
        <th width="2%">Number</th>
        <th width="10%">Message</th>
    </tr>
    <?php

    // Preparing the query with limit and offset in place
    $query = mysql_query("SELECT * FROM mytable ORDER BY date ASC LIMIT $offset, $rowsPerPage");

    while ($hasil = mysql_fetch_array($query)) :?>
        <tr>
            <td><center><?php echo $no++ ?></center></td>
            <td><?php echo $hasil['date'] ?></td>
            <td><?php echo $hasil['time'] ?></td>
            <td><?php echo $hasil['phone'] ?></td>
            <td><?php echo $hasil['message'] ?></td>
        </tr>
    <?php endwhile; ?>
</table>

要使 JavaScript 获取所选项目的值(目前,使用 'Page: 5' 而不是 '5' 作为值不起作用):

<script type="text/javascript">
function submitPg() {
    var formById = document.forms["AllIn"];
    var selectMenu = formById.elements["selpg"];
    window.location = "report.php?selpg=" + selectMenu.value;
}
</script>
于 2013-04-27T15:24:30.830 回答
0

您需要获取数据库中的行数,然后除以 5。取整数部分,如果其余大于 0,则加 1。因此,如果您有 30 行,则获得 6 页,如果您有 31 行,你得到 7。

完成后,您可以使用循环将选项添加到下拉列表中。

于 2013-04-27T14:57:24.877 回答