Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
页面导航。单击“下一步”获取下一步,让我们说“下一步”;20“;记录(php/mysql)_Php_Sql_Navigation_Paging - Fatal编程技术网

页面导航。单击“下一步”获取下一步,让我们说“下一步”;20“;记录(php/mysql)

页面导航。单击“下一步”获取下一步,让我们说“下一步”;20“;记录(php/mysql),php,sql,navigation,paging,Php,Sql,Navigation,Paging,我已经创建了一个对mysql的查询,它将从mysql表等“cat”中得到20个结果 这是电话: if(isset($_GET['cat'])) { $query = "SELECT game_title,game_desc,.... FROM games WHERE cat_id='".validate_input($_GET['cat'])."' LIMIT 20"; } ... 通过这个,我设法得到了我想要的结果。这里我要问的是如何创建一个“按钮”,从表“cat”(

我已经创建了一个对mysql的查询,它将从mysql表等“cat”中得到20个结果 这是电话:

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

通过这个,我设法得到了我想要的结果。这里我要问的是如何创建一个“按钮”,从表“cat”(类似于按钮)加载下一个“20”记录

如果您在URL或隐藏字段或会话变量中跟踪您所在的页面,则可以使用该字段或会话变量来计算限制。例如,第2页应该显示第20行的limit 20(页面偏移量的20倍)。

您可以将两个SQL参数传递给limit(在它们之间加一个逗号),如果这样做,第一个参数告诉SQL要跳过多少条记录(即第一条记录的偏移量),第二个参数是您正在使用的参数(要返回多少条记录)

所以,只需在“下一个”链接中添加一个变量,说明要显示的页面。您可以在此链接中传递偏移量,但通常会传递“页码”,然后乘以每页的记录数,然后再将其粘贴到sql中

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


再多做一点工作,您就可以创建一个“上一页”链接,并在第一页/最后一页时使正确的链接不可单击。

传递一个参数,告诉脚本您需要另一块结果,而不仅仅是第一批

因此,对于链接,它可能是这样的:

example.com/results.php?cat=1&page=2
其中
page=
将告诉脚本您要返回的页面

然后你想把你的
限制
数转过来,这样你就可以算出一些简单的数学题了

$results_cnt = 20; //--rows you want per page of results
现在,在脚本中,您将检查
页面
变量是否已设置。如果不是,则默认从第一行返回起始行。但是,当您想要返回不同的页面/结果集时,需要进行一些数学运算,以便从正确的行开始

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;
现在,在设置了正确的起始行之后,调整SQL查询以使用如下变量:

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

好吧,我把它修好了,我想

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;
}

?>

如何将此答案称为另一个php?假设我将代码放在cat.php中,并希望它在games.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;
}

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