Pagenav.

4 Cevap php

I've already created a query to mysql that will give 20 results from mysql table etc. "cat" heres the calling:

if(isset($_GET['cat']))
{
    $query = "SELECT game_title,game_desc,.... 
       FROM games WHERE cat_id='".validate_input($_GET['cat'])."' LIMIT 20";
}
...

bu tarafından ben istediğim sonuçları elde etmek yönetmek. Ne ben burada soruyorum ben (Düğmeler gibi bir şey) masa "kedi" den sonraki "20" kayıtları yük olacak bir "düğme" yaratmak nasıl olduğunu.

4 Cevap

Eğer konum ne sayfa takip, URL veya gizli bir alan veya oturum değişkeni tutarsanız, sınırı çalışmak için kullanabilirsiniz. Örneğin, sayfa 2 (20 kez sayfa ofset) üst üste 20 limitini 20 göstermelidir.

Eğer yaparsanız, ilk atlamak için kaç kayıt SQL söyler (aralarında virgül koymak) SINIR iki SQL parametreleri geçirebilirsiniz (yani ilk kayıt ofset) ve 2. parametre zaten (kullanıyorsanız biridir ) dönmek için kaç kayıtları.

Dolayısıyla, sadece görüntülemek için hangi sayfasında diyor ki sizin "sonraki" bağlantısını bir değişkeni koydu. Siz bu bağlantıyı ofset geçebilir, ama bunun yerine "sayfa numarası" geçmek oldukça yaygın, ve sql içinde yapışmadan önce sayfa başına kayıt sayısına göre çarpın.

<a href="show_rows.php?page=<?php echo int($_REQUEST['page']) + 1; ?>">next page</a>

Biraz daha fazla iş ile, bir "Önceki sayfa" bağlantısını yapmak ve son / ilk sayfada olduğunuzda doğru bağlantıları olmayan tıklanabilir yapabilirsiniz.

Eğer sonuç başka bir yığın ve sadece ilk toplu istediğiniz komut söyler bir parametre iletmekten.

Böylece bağlantı için bu gibi olabilir:

example.com/results.php?cat=1&page=2

Nerede page= Eğer dönmek istiyorum ne sayfası komut anlatacağım.

Sonra bazı basit matematik çalışmak böylece var LIMIT numarasını çevirmek istiyorum

$results_cnt = 20; //--rows you want per page of results

Şimdi komut size page değişkeni ayarlanır olup olmadığını görmek için kontrol edeceğiz. Değilse, ilk dönmek için başlangıç ​​satır varsayılan. Eğer sonuç farklı sayfaları / setleri dönmek istiyorum Ama, biraz matematik doğru sıraya başlatmak için gereklidir.

if(isset($_GET["page"]) //--see if the variable is even there
{
    $page_num = (int)$_GET["page"]; //--forcing it to always be an integer

    $start_row = $results_cnt * ($page_num - 1);

    /* --
     what happens:
       ($results_cnt currently at 20)

     on page one (page=1), start at row 0
      math: 20 * (1 - 1) = 0

     on page two (page=2), start at row 20
      math: 20 * (2 - 1) = 20

     on page three (page=3), start at row 40
      math: 20 * (3 - 1) = 40

     etc.
    */
}
else
    $start_row = 0;

Şimdi, doğru bir başlangıç ​​satır ayarlamak sahip, bu yüzden gibi değişkenleri kullanmak için SQL sorgusu ayarlayın:

if(isset($_GET['cat']))
{
    $query = "SELECT game_title,game_desc,.... 
       FROM games 
       WHERE cat_id='".validate_input($_GET['cat'])."' 
       LIMIT $start_row, $results_cnt";
}

Tamam ben got o sabit sanırım ...

in index.php,

<?php

$games = array();
$count = 1;
$total = 0;

if(isset($_GET['cat']))
{
 $query = "SELECT game_title,game_desc,....  FROM games WHERE cat_id='".validate_input($_GET['cat'])."' LIMIT 20";

 $total = mysql_num_rows(mysql_query("SELECT 1 FROM games WHERE cat_id='".validate_input($_GET['cat'])."'"));
}

$query_result = @mysql_query ($query) OR error(mysql_error(), __LINE__, __FILE__, 0, '', '');
while ($info = @mysql_fetch_array($query_result))
{
/* -- here goes the infos.. */
 $games[$info['game_title']]['game_title'] = $info['game_title'];
etc..

if(isset($_GET['cat']))
{
/* -- for template engine */
$page->SetLoop ('PAGES', pagenav($total,$_GET['page'],20,$config['site_url'].'?cat='.$_GET['cat'],1,$lang));
}
--end php

and in funct.php

--start php

function pagenav($total,$page,$perpage,$url,$posts=0) 
{
 $page_arr = array();
 $arr_count = 0;

 if($posts) 
 {
  $symb='&';
 }
 else
 {
  $symb='?';
 }
 $total_pages = ceil($total/$perpage);
 $llimit = 1;
 $rlimit = $total_pages;
 $window = 5;
 $html = '';
 if ($page<1 || !$page) 
 {
  $page=1;
 }

 if(($page - floor($window/5)) <= 0)
 {
  $llimit = 1;
  if($window > $total_pages)
  {
   $rlimit = $total_pages;
  }
  else
  {
   $rlimit = $window;
  }
 }
 else
 {
  if(($page + floor($window/2)) > $total_pages) 
  {
   if ($total_pages - $window < 0)
   {
    $llimit = 1;
   }
   else
   {
    $llimit = $total_pages - $window + 1;
   }
   $rlimit = $total_pages;
  }
  else
  {
   $llimit = $page - floor($window/2);
   $rlimit = $page + floor($window/2);
  }
 }
 if ($page>1)
 {
  $page_arr[$arr_count]['title'] = 'Prev';
  $page_arr[$arr_count]['link'] = $url.$symb.'page='.($page-1);
  $page_arr[$arr_count]['current'] = 0;

  $arr_count++;
 }

 for ($x=$llimit;$x <= $rlimit;$x++) 
 {
  if ($x <> $page) 
  {
   $page_arr[$arr_count]['title'] = $x;
   $page_arr[$arr_count]['link'] = $url.$symb.'page='.($x);
   $page_arr[$arr_count]['current'] = 0;
  } 
  else 
  {
   $page_arr[$arr_count]['title'] = $x;
   $page_arr[$arr_count]['link'] = $url.$symb.'page='.($x);
   $page_arr[$arr_count]['current'] = 1;
  }

  $arr_count++;
 }

 if($page < $total_pages)
 {
  $page_arr[$arr_count]['title'] = 'Next';
  $page_arr[$arr_count]['link'] = $url.$symb.'page='.($page+1);
  $page_arr[$arr_count]['current'] = 0;

  $arr_count++;
 }

 return $page_arr;
}

?>

ve bunu diyoruz

{LOOP: PAGES}<a href="{PAGES.link}">{PAGES.title}</a> {/LOOP: PAGES}

in an .html file.. it works perfectly but when I press the number 2 or next to get the next 20 records it jumps back to the first 20... on the browser it reads http://siteurl/?cat=1&page=2 I can't figure out why.