-3

私は一度にjspaginator10個の通知を表示し、ページごとに5個の通知を表示するためにgithubから使用しています.しかし、ユーザーの要求に応じてより多くの結果を取得するためのNEXTボタンを提供していません.コード -

                $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();

$startでは、 andを変更し$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_上記のコード スニペットでは関数を使用していないことに気付くでしょう。その理由は次の 2 点です。

  1. mysql_関数ファミリーは非推奨であり、使用すべきではありません。代わりに、MySQLi や PDO などの代替手段を使用する必要あります

  2. PDO では、データがトークン ( :limit) で示されるステートメントを作成できます。これは、SQL ステートメントで変数をインラインで使用することを避け、SQL インジェクションの脆弱性を回避するためです。

于 2013-07-02T09:59:55.517 に答える
1

フォームに非表示の入力を追加できます

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

次に、$start、$end vars の if

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 に答える