-1

データベースが 1 ページあたり少なくとも 5 行しか表示しない場合、オプション値を 1 ページ増やすにはどうすればよいですか

テーブルに 20 行ある場合、1 ページあたり 5 行しか選択されていないため、オプション値には少なくとも 4 ページがあるとします。

<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

これが私がそれを行う方法です。これにより、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 が選択したアイテムの値を取得するようにするには (現在、値として「5」の代わりに「Page: 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 に答える