在PHP中分页并保持结果

时间:2013-02-08 10:02:15

标签: php mysql pagination

试图在我的php代码中实现一个分页脚本(从我在网上找到的示例代码中采用) 该页面返回mysql查询的resaults。默认为空关键字'它返回数据库中的所有数据。 当所有数据都被返回但是当我通过关键字搜索过滤结果时,点击下一页'返回未过滤结果中的下一页(即刷新后搜索的关键字丢失)

这是相关的代码(希望它有意义):

  

块引用

    $txt1='<A HREF="/memimomedia/music/128kb/';
    $txt2='" ><IMG src="/Save.png" width="24" height="24" align="middle" border="0"></A>';

    $txt9a='<a href="';
    $txt9b='" target="_blank">';
    $txt9c='</a>';

    $txt10a='<audio src="./128kb/';        
    $txt10d='" controls></audio>';


if(empty($_POST['searchkeywords']) && empty($_GET['searchkeywords']))     { $result = mysql_query("SELECT *
     

FROM ppl_tracks WHERE Mixed!=&#39; 0&#39;按顺序排序&#34;); }       if(!empty($ _ GET [&#39; searchkeywords&#39;])){$ Searchword = $ _ GET [&#39; searchkeywords&#39;]; }

if(!empty($_POST['searchkeywords']))  { $Searchword=$_POST['searchkeywords']; }
     

$ Totalresults = mysql_query(&#34; SELECT Track FROM(ppl_tracks LEFT JOIN)   TrackStyle ON ppl_tracks.RECNO = TrackStyle.TrackID LEFT JOIN   StyleTable ON TrackStyle.StyleID = StyleTable.ID)LEFT JOIN TrackMood   ON ppl_tracks.RECNO = TrackMood.TrackID LEFT JOIN MoodTable ON   TrackMood.MoodID = MoodTable.ID WHERE(MoodChoices LIKE   &#39;%$搜索内容%&#39;或描述LIKE&#39;%$ Searchword%&#39;或StyleChoices   喜欢&#39;%$ Searchword%&#39;或节奏喜欢&#39;%$ Searchword%&#39;或跟踪LIKE   &#39;%$搜索内容%&#39; )AND Mixed = true GROUP BY Track ORDER BY Track&#34; );

     

//检查是否有页码。如果没有,它将设置它   到第1页if(isset($ _ GET [&#39; pagenum&#39;])){$ pagenum =   $ _GET [&#39;页次&#39;]; } else {$ pagenum = 1; }

     

//这里我们计算结果的数量        $ hits = mysql_num_rows($ Totalresults);

     

//这是每页显示的结果数        $ page_hits = 15;

     

//这告诉我们最后一页的页码        $ last = ceil($ hits / $ page_hits);

     

//这可确保页码不低于我们的一个或多个   最大页数        if($ pagenum&lt; 1)         {            $ pagenum = 1;         }        elseif($ pagenum&gt; $ last)         {            $ pagenum = $ last;         }

     

//这将设置要在查询中显示的范围        $ max =&#39;限制&#39; 。($ pagenum - 1)* $ page_hits。&#39;,&#39; 。$ page_hits;

     

$ result = mysql_query(&#34; SELECT * FROM(ppl_tracks LEFT JOIN TrackStyle   ON ppl_tracks.RECNO = TrackStyle.TrackID LEFT JOIN StyleTable ON   TrackStyle.StyleID = StyleTable.ID)LEFT JOIN TrackMood ON   ppl_tracks.RECNO = TrackMood.TrackID LEFT JOIN MoodTable ON   TrackMood.MoodID = MoodTable.ID WHERE(MoodChoices LIKE   &#39;%$搜索内容%&#39;或描述LIKE&#39;%$ Searchword%&#39;或StyleChoices   喜欢&#39;%$ Searchword%&#39;或节奏喜欢&#39;%$ Searchword%&#39;或跟踪LIKE   &#39;%$搜索内容%&#39; )AND Mixed = true GROUP BY Track ORDER BY Track $ max&#34;   );

     回声&#34;追踪 -   艺术家描述下载&#34;;

     

$颜色=&#34; 1&#34 ;;

     

while($ row = mysql_fetch_array($ result)){$ SelectedStyles =   阵列(); $履带= $行[&#39;轨道&#39;]; $ SelectedStylesQuery = mysql_query(&#34;   SELECT StyleChoices FROM ppl_tracks LEFT JOIN TrackStyle ON   ppl_tracks.RECNO = TrackStyle.TrackID LEFT JOIN StyleTable ON   TrackStyle.StyleID = StyleTable.ID WHERE ppl_tracks.Track =&#39; $ Track&#39;&#34;);   while($ row1 = mysql_fetch_array($ SelectedStylesQuery)){       $ SelectedStyles [] = $ row1 [StyleChoices]; } $ SelectedMoods = array(); $ SelectedMoodsQuery = mysql_query(&#34; SELECT MoodChoices FROM   ppl_tracks LEFT JOIN TrackMood ON ppl_tracks.RECNO = TrackMood.TrackID   LEFT JOIN MoodTable在TrackMood.MoodID = MoodTable.ID WHERE   ppl_tracks.Track =&#39; $轨道&#39;&#34);而($ row2 =   mysql_fetch_array($ SelectedMoodsQuery)){       $ SelectedMoods [] = $ row2 [MoodChoices]; sort($ SelectedMoods);排序($ SelectedStyles); $ stringS = implode(&#34;,&#34;,$ SelectedStyles);   $ stringM = implode(&#34;,&#34;,$ SelectedMoods);

     

if($ color == 1){echo&#34;&#34 ;;回声&#34;&#34; 。 $ row [&#39; Track&#39;]。 &#34; - &#34; 。   ucwords($ row [&#39;艺术家&#39;])。 &#34;&#34 ;;回声&#34;&#34; 。 $ stringM。   &#34;
&#34; $字符串&#34;&#34 ;;回声&#34;&#34; 。 $ txt1。$ row [&#39; FileName&#39;]。$ txt2。   &#34;&#34 ;;回声&#34;&#34; 。 。$ txt10a $行[&#39;文件名&#39]。$ txt10d&#34;&#34 ;;   echo&#34;&#34 ;; $颜色=&#34; 2&#34 ;; }

     

else {echo&#34;&#34 ;;回声&#34;&#34; 。 $ row [&#39; Track&#39;]。 &#34; - &#34; 。   ucwords($ row [&#39;艺术家&#39;])。 &#34;&#34 ;;回声&#34;&#34; 。 $ stringM。   &#34;
&#34; $字符串&#34;&#34 ;;回声&#34;&#34; 。 $ txt1。$ row [&#39; FileName&#39;]。$ txt2。   &#34;&#34 ;;回声&#34;&#34; 。 。$ txt10a $行[&#39;文件名&#39]。$ txt10d&#34;&#34 ;;   echo&#34;&#34 ;; $颜色=&#34; 1&#34 ;;}

     

} echo&#34;&#34;;

     

//这会向用户显示他们所在的页面以及总数   页

     回声&#34; - $ $ pagenum $ last--

&#34 ;; //首先我们检查一下   在第一页。如果我们是,那么我们不需要链接到前一个   页面或第一页所以我们什么都不做。如果我们不是,那么我们就会生成   链接到第一页和上一页。

     

if($ pagenum == 1)

     

{

     

}

     

其他

     

{echo&#34; &lt; -First&#34 ;;   echo&#34; - &#34 ;; $ previous = $ pagenum-1; echo&#34; &lt; -Previous&#34 ;; }

     

$计数器= 1; while($ counter&lt; = $ last)           {         if($ counter == $ pagenum)           {         echo&#34; - &#34 ;;         echo&#34; $ counter&#34 ;;         echo&#34; - &#34 ;;           }

  else

    {
  echo " - ";
  echo " <a href='{$_SERVER['PHP_SELF']}?pagenum=$counter'>$counter</a> ";
  echo " - ";
    } $counter = $counter + 1; }
     

//这与上面相同,只检查我们是否在最后   页面,然后生成下一个和最后一个链接

     

if($ pagenum == $ last)

     

{

     

}

     

else {$ next = $ pagenum + 1; echo&#34;下一步 - &gt; &#34 ;; echo&#34; -   &#34 ;; echo&#34;最后 - &gt;&gt;   &#34 ;; } mysql_close($ con); ?&GT;

1 个答案:

答案 0 :(得分:2)

每次进入新页面时都会重新加载页面,因此您需要再次将搜索词传递到页面中。最简单的方法是将您的链接更新为以下内容:

echo " <a href='{$_SERVER['PHP_SELF']}?searchkeywords=" . $_REQUEST["searchkeywords"] . "&pagenum=$counter'>$counter</a> ";

$ _ REQUEST将处理$ _POST和$ _GET变量,但您可能希望以自己的方式执行此操作。简单地说,您只需将搜索关键字传回您的网址

即可