Re: my paging task with PHP does not work. It uses cookie.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dear mike,

your thread solved my problem.

I really appreciate your help.

Thank you very much.

On Thu, 13 Sep 2007 14:49:29 -0700
mike <mike503@xxxxxxxxx> wrote:

> warning: this is VERY UGLY CODE. i wrote it 3-4 years ago now i think
> and it just keeps working.
> 
> you call it this way:
> 
> # pagination.
> if(isset($_GET['pg'])) {
>         $page = intval($_GET['pg']);
> } else {
>         $page = 1;
> }
> $page = sprintf("%02d",$page);
> 
> $query = Array(
>         'query'         => "SELECT foo FROM bar",
>         'itemsperpage'  => 50,
>         'maxdisplay'    => 20,
>         'linkprefix'    => "$_SERVER[PHP_SELF]?f=$forum_id&pg="
> );
> list($pages,$numpages,$items,$threads) = paginate_sql($page,$query);
> 
> $pages is the html formatted links
> $numpages is the total number of pages
> i dont actually use $items much but i think it just tells you how many
> items (which is the same as itemsperpage... i believe)
> $threads is the mysql rows resource (you can use mysql_fetch_rows on it)
> 
> 
> 
> function paginate_sql(&$thispage,$options) {
>         $offset = $options['itemsperpage'] * ($thispage - 1);
>         if(isset($options['server'])) {
>                 $results = db_query(eregi_replace("^SELECT","SELECT
> SQL_CALC_FOUND_ROWS",$options['query'])."LIMIT
> $offset,$options[itemsperpage]",$options['server']);
>                 $rows = db_query("SELECT FOUND_ROWS()",$options['server']);
>         } else {
>                 $results = db_query(eregi_replace("^SELECT","SELECT
> SQL_CALC_FOUND_ROWS",$options['query'])."LIMIT
> $offset,$options[itemsperpage]");
>                 $rows = db_query("SELECT FOUND_ROWS()");
>         }
>         list($totalitems) = db_rows($rows);
>         db_free($rows);
>         $html = "";
>         $numpages = ceil($totalitems / $options['itemsperpage']);
>         if(isset($options['maxpages']) && $numpages >
> $options['maxpages']) { $numpages = $options['maxpages']; }
>         if($thispage < 1 || $totalitems < $options['itemsperpage']) {
> $thispage = sprintf("%02d",1); }
>         if($thispage > $numpages && $numpages > 0) {
>                 header(sprintf("Location: %s01",
> str_replace("&amp;","&",$options['linkprefix'])));
>                 exit();
>         }
>         $start = (ceil($thispage / $options['maxdisplay'])-1) *
> $options['maxdisplay'] + 1;
>         if($start == 1) {
>                 $html .= "&laquo;";
>         } else {
>                 $html .= sprintf("<a href=\"%s%02d\">&laquo;</a>",
> $options['linkprefix'], $start-1);
>         }
>         if(isset($options['maxdisplay']) && $options['maxdisplay'] !=
> 0 && $numpages > $options['maxdisplay']) {
>                 $numlist = $options['maxdisplay'] + $start - 1;
>         } else {
>                 $numlist = $numpages + $start - 1;
>         }
>         if($numlist > $numpages) { $numlist = $numpages; }
>         for($x=$start; $x<=$numlist; $x++) {
>                 if($x == $thispage) {
>                         $html .= sprintf(" %02d", $x);
>                 } else {
>                         $html .= sprintf(" <a
> href=\"%s%02d\">%02d</a>", $options['linkprefix'], $x, $x);
>                 }
>         }
>         if($numlist == $numpages) {
>                 $html .= " &raquo;";
>         } else {
>                 $html .= sprintf(" <a href=\"%s%02d\">&raquo;</a>",
> $options['linkprefix'], $numlist+1);
>         }
>         if($totalitems <= $options['itemsperpage']) { $html = ""; }
>         return Array($html,sprintf("%02d",$numpages),$totalitems,$results);
> }
> 
> On 9/13/07, Patrik Hasibuan <patrikh@xxxxxxxxxxxxxxxxxxxxx> wrote:
> > Hi Mike,
> >
> > I am intrested for the solution you gave me. But I am confused of the way in implementing "select FOUND_ROWS()".
> >
> > I wrote another very simple codes as the first step for understanding this threat:
> > <?php
> > $konek=mysql_connect("127.0.0.1","root","mypassword");
> > if ($konek){
> >        for ($i=0;$i<2;$i++){
> >        $sqlku="select SQL_CALC_FOUND_ROWS id_iklan from lowongan limit 5;";
> >        $sqlkupage="select FOUND_ROWS()";
> >        $mybd=mysql_select_db("headhunter",$konek);
> >        $kueri=mysql_query($sqlku,$konek) or die('MYSQL QUERY ERROR ['.mysql_errno($konek).'] '.mysql_error($konek));
> >        $kueri=mysql_query($sqlkupage,$konek) or die('MYSQL QUERY ERROR ['.mysql_errno($konek).'] '.mysql_error($konek));
> >        while($brs=mysql_fetch_row($kueri)){
> >                list($idiklan)=$brs;
> >                echo "FirstItem <a href=\"showit.php?id=$idiklan\">$idiklan</a><br>";
> >        }
> >        }
> > }else{
> >        echo "I can't talk to the server<br>";
> >        exit();
> > }
> > ?>
> >
> > I've put nine records into the table of "lowongan", idiklan 1 to 9.
> > Look I get of course only one record, namely the: '9'.
> >
> > This is the output of my codes in my internet browser.
> > ===
> > FirstItem 9
> > FirstItem 9
> > ===
> > The output what I am expecting suppose to be:
> > on the $i=0
> > "
> > FirstItem 1
> > FirstItem 2
> > FirstItem 3
> > FirstItem 4
> > FirstItem 5
> > "
> > and on the $i=1
> > "
> > FirstItem 6
> > FirstItem 7
> > FirstItem 8
> > FirstItem 9
> > FirstItem 9
> > "
> >
> > I read on the documentation of MySQL but I couldn't find any code of sample also in the php.net.
> >
> > Would be so kind to give me a very simple code of sample?
> >
> > Thank you very much in advance.
> > On Wed, 12 Sep 2007 11:58:04 -0700
> > mike <mike503@xxxxxxxxx> wrote:
> >
> > > On 9/12/07, Patrik Hasibuan <patrikh@xxxxxxxxxxxxxxxxxxxxx> wrote:
> > > > Dear my friends...
> > > >
> > > > I am trying to display the content of a table. Each page must content only 5 records maximum. Each page has "Previous" and "Next" buttons (made from anchor).
> > > >
> > > > I dump the primary of the working table and keep it in a cookie. So than the paging task work with the index of cookie array. But the $curguruescomidiklan stays "0" each time I click "Next" button.
> > >
> > > yeah there is no reason to be using cookies for this.
> > >
> > > just using query string parameters should work. for pagination you need to know:
> > >
> > > total number of items
> > > number of items per page
> > >
> > > after that you know how many pages (numitems / itemsperpage) and work
> > > out the links appropriately (i.e. page1 has no previous, $maxpage has
> > > no next) and you can put the number of pages down how you want (if you
> > > want to do prev 3 4 5 next, or next 1 2 3 4 5 6 7 8 9 prev, there's a
> > > ton of strategies to print out what pages to show, and next, previous,
> > > jump to end, jump to beginning, etc)
> > >
> > > i've never used the PEAR class or anything else, i made a function a
> > > long time ago that actually works in conjunction with mysql's SELECT
> > > FOUND_ROWS() and uses a LIMIT offset,number to save the overhead of
> > > fetching every row from the database to only show the ones for that
> > > page. it's actually worked well for 4 years now without a single
> > > change...
> > >
> > > at some point perhaps i'll clean it up and post it somewhere, and
> > > someone might be able to make it even better.
> > >
> > > --
> > > PHP General Mailing List (http://www.php.net/)
> > > To unsubscribe, visit: http://www.php.net/unsub.php
> > >
> > >
> > >
> >
> >
> > --
> > Patrik Hasibuan <patrikh@xxxxxxxxxxxxxxxxxxxxx>
> > Junior Programmer
> >
> > --
> > PHP General Mailing List (http://www.php.net/)
> > To unsubscribe, visit: http://www.php.net/unsub.php
> >
> >
> 
> -- 
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
> 
> 
> 


-- 
Patrik Hasibuan <patrikh@xxxxxxxxxxxxxxxxxxxxx>
Junior Programmer

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux