-3

我正在使用jspaginatorgithub 一次显示 10 个通知,每页显示 5 个。但是我没有提供任何 NEXT 按钮来根据用户请求获取更多结果。所以我想自己实现它。我有以下 PHP代码 -

                $start=0;
                $end=10;
                $query='select * from notice order by id desc limit '.$start.','.$end.';';
                if($query_run=mysql_query($query))
                {
                  $query_num_rows=mysql_num_rows($query_run);
                if($query_num_rows==0)
                  {
                    echo '<h4>No Notices</h4>';
                  }else {
                    echo    '<div id="green-contents" class="contents" ">
                              <table id="mt" cellpadding="0" cellspacing="0" border="0" class="table">
                              <tr class="header">
                              <th>
                                Date Posted
                              </th>
                              <th width="55%">
                               title
                              </th>
                              <th>
                               Posted By
                              </th>
                              <th>
                                Branch
                              </th>
                                 <th>
                                Semester
                              </th>
                              </tr>';
                    for($i=0;$i<$query_num_rows;$i++)
                    {
                        echo '<tr>
                                 <td>'.mysql_result($query_run,$i,'posted_on').'</td>
                                 <td class="note"><h4><a href="view_notice.php?id='.
                                 mysql_result($query_run,$i,'id').'">';
                                 if(strlen(mysql_result($query_run,$i,'title'))>48)
                                    echo (substr(mysql_result($query_run,$i,'title'),0,45)).'.....';
                                  else
                                    echo mysql_result($query_run,$i,'title');
                        echo      '<td>'.mysql_result($query_run,$i,'posted_by').'</td>
                                 <td>'.mysql_result($query_run,$i,'branch').'</td>
                                 <td>'.mysql_result($query_run,$i,'semester').'</td>';
                    }
                    echo '</table>';
                  }
                }else
                echo mysql_error();

现在,如何更改$startand$end并再次执行查询以获取接下来的 10 个结果。

4

3 回答 3

1

您需要使start参数动态化。因此,这可以通过带有诸如http://example.com/filename.php?page=1$_GET之类的 URL 的参数来实现。

您的脚本将如下所示:

<?php

$batch = 10;
$page = (intval($_GET['page']) > 0) ? $_GET['page'] : 1; // set $page if it's a number greater than zero

$start = (($page - 1) * $batch);

$sql = "SELECT * FROM tbl LIMIT :offset, :limit";
$stmt = $db->prepare($sql);
$stmt->bindParam(':offset', $start, PDO::PARAM_INT);
$stmt->bindParam(':limit', $batch, PDO::PARAM_INT);
$stmt->execute();

$results = $stmt->fetchAll();

你会注意到我没有mysql_在上面的代码片段中使用函数。原因有两个:

  1. mysql_函数系列已弃用且不应使用,而是应使用MySQLiPDO等替代方法。

  2. PDO 允许创建语句,其中数据由标记 ( :limit) 表示。这是为了避免在 SQL 语句中仅使用内联变量并避免 SQL 注入漏洞。

于 2013-07-02T09:59:55.517 回答
1

您可以在表单中添加隐藏输入

<input type="hidden" name="page" value="'.$_GET['page']+1.'>

然后一个 if 在你的 $start, $end vars

if (isset($_GET['page']))
{
 $start = $_GET['page'];
 $end = $_GET['page']+9;
}
else
{
 $start = 0;
 $end = 10;
}
于 2013-07-02T10:00:08.607 回答
0

您可以像这样在 url 中传递下一页值notices.php?page=2并使用打击代码作为$start

$page = isset($_GET["page"]) ? intval($_GET["page"]) : 1;
if (0 == $page) {
    $page = 1;
}

$start = 10 * ($page - 1);
$end = 10;
于 2013-07-02T10:00:59.490 回答