Jump to content

Question about Pagination


Recommended Posts

Hi,

please consider the following code:

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>


<?php


function get_current_page()
{
$result = explode('?', $_SERVER['REQUEST_URI']);
$str = $result[0];
$result = explode('/' ,$str);
return $result[2];
}

function get_prev_page()
{
return get_lid() - get_per_page();	
}


function get_next_page()
{	
return get_lid() + get_per_page();
}

function get_lid()
{
if(empty($_GET['lid']))
{
	return 0;
}
else
{
	return $_GET['lid'];
}
}

function get_per_page()
{		
return 10;
}

function show_content()
{
$lid = get_lid();
$db_conn = new MySQLi('localhost', 'root', '', 'db');
$thumbnail = $db_conn->query("SELECT * FROM link ORDER BY no DESC LIMIT " . get_lid() .', 1');

while($row = $thumbnail->fetch_assoc())
{
	$link = $row['content'];
	echo $link . '<br />';
}

}

function show_link()
{
$lid = get_lid();
$db_conn = new MySQLi('localhost', 'root', '', 'db');
$thumbnail = $db_conn->query("SELECT * FROM link ORDER BY no DESC LIMIT " . get_lid() .', '. get_per_page());
	echo '<a href="'.  '?lid=' . get_prev_page() . '">' . 'Prev' .'</a> | '; //the condition that index gets negative values were NOT considered for simplicity of code; I have already done it in my real coding	
while($row = $thumbnail->fetch_assoc())
{
	$link = $row['no'];

	echo '<a href="'.  '?lid=' . $lid++ . '">' . $lid .'</a> | ';
}

echo '<a href="'.  '?lid=' . get_next_page() . '">' . 'Next' .'</a> | '; //the condition that index gets over max num_rows wwere NOT considered for simplicity of code; I have already done it in my real coding	
}

?>
<?php
get_next_page();
show_content();
?>
<p> </p>

<?php
show_link();
?>
</body>
</html>

 

And the DB structure is like so:

 

DB name: db

table name: link

----------------------------------------

no | content |

----------------------------------------

1 | content 1 |

----------------------------------------

2 | content 2 |

----------------------------------------

3 | content 3 |

----------------------------------------

.

.

.

----------------------------------------

30 | content 30 |

----------------------------------------

 

 

 

As you can see this code performs simple pagination. But it has one little problem. I want the link to be stable until I click the next or prev button. I mean if I click any link, the link just clicked becomes the first link. For example, on initial page load, the page might appear like this:

 

--------------------------------

content 1

 

 

prev 1 2 3 4 5 6 7 8 9 10 next

--------------------------------

 

But when I click on '3' the link changes as follows:

 

----------------------------------------

content 3

 

 

prev 3 4 5 6 7 8 9 10 11 12 13next

----------------------------------------

 

 

Whichever links are clicked I want these links stayed and moved by 10 when the prev or next button is clicked. Please HELP!!

 

Thanks

 

Link to comment
Share on other sites

I'm having a difficult time really understanding your request. It would have been helpful if you also showed what you expected the result to be when the user selects "3" instead of just showing what you are getting.

 

I assume you want the result to be such that the selected page is indicated in some manneer (e.g. bold) and that the avaialble pages - up to 10 - are displayed to the left and the right of the selected page.

 

That page has some other problems with inefficiency and other things (e.g. a function to return a static variable?!). Here is some code based upon what I think you want along with other improvements. This is NOT tested. The logic should be good, but I didn't go to the trouble of create a database table for this.

 

<?php

//Config variables
$records_per_page = 10;
$max_page_links = 10;

//Connect to DB
$db_conn = new MySQLi('localhost', 'root', '', 'db');

//Determine total records and total pages
$query = "SELECT COUNT(`content`) as total FROM `link`";
$result = $db_conn->query($query);
$row = $result->fetch_assoc();
$total_records = $row['total'];
$total_pages = (ceil($total_records/$records_per_page));

//Determine the current page
$page = (isset($_GET['page'])) ? (int) $_GET['page'] : 1;
if($page<1 || $page>$total_pages) { $page = 1; }

//Detemine the start for the limit in query
$limit_start = ($page - 1) * $records_per_page;

//Get & display data for currently selected page

$query = "SELECT `content`
          FROM `link`
          ORDER BY `no` DESC
          LIMIT {$limit_start}, {$records_per_page}";
$thumbnail = $db_conn->query($query);
while($row = $thumbnail->fetch_assoc())
{
    $page_output = "{$row['content']}<br />\n";
}

//Create array of the navigation links
//---------------------------
$nav_links_ary = array();
$first_page_link = max(1, $page-$max_page_links);
$last_page_link  = min($total_pages, $max_page_links);
//Add page links to array
if($page>1) { $nav_links_ary[] = "<a href=\"?page=" . ($page-1) . ">Prev</a>"; }
for ($pg=$first_page_link; $pg<$last_page_link; $pg++)
{
    $nav_links_ary[] = "<a href=\"?page={$pg}\">{$pg}</a>";
}
if($page<$total_pages) { $nav_links_ary[] = "<a href=\"?page=" . ($page+1) . ">Next</a>"; }

//Create final output for navigation links
$nav_links = implode(' | ', $nav_links_ary);

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Untitled Document</title>
</head>

<body>
<?php echo $page_output; ?>
<p> </p>
<?php $nav_links; ?>
</body>
</html>

 

 

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.