Jump to content
Larry Ullman's Book Forums

Recommended Posts

Hello all.

 

I am a relative newbie to php and mysql but have been progressing through book with great results up until i have hit a wall with a pagination script.

 

The scripts used are a combination of 9.4 - paginate view users and chapter 17 ecommerce from the PHP 6 and MySQL 5 book.

 

The issue involves the script not creating further links for additional pages should the results returned exceed the $display variable. I don't get any next or previous links at all and for the life of me cannot see why. The page displays with whatever the $display number is set out but no links to additional results.

 

My code is below but the site is local so cannot show you direct links.

 

<?php # browse_books.php
// This page displays the available books (products).
// Set the page title and include the HTML header:
$page_title = 'Browse Books';
include ('includes/header.html');
require_once ('../mysqli_connect.php');
// Number of records to show per page:
$display = 15;
// Determine how many pages there are...
if (isset($_GET['p']) && is_numeric($_GET['p'])) { // Already been determined.
$pages = $_GET['p'];
} else { // Need to determine.
 // Count the number of records:
$q = "SELECT COUNT (book_id) FROM books";
$r = @mysqli_query ($dbc, $q);
$row = @mysqli_fetch_array ($r, MYSQLI_NUM);
$records = $row[0];
// Calculate the number of pages...
if ($records > $display) { // More than 1 page.
 $pages = ceil ($records/$display);
} else {
 $pages = 1;
}

} // End of p IF.
// Determine where in the database to start returning results...
if (isset($_GET['s']) && is_numeric($_GET['s'])) {
$start = $_GET['s'];
} else {
$start = 0;
}

// Default query for this page:
$q = "SELECT authors.author_id, CONCAT_WS(' ', first_name, middle_name, last_name) AS author, book_name, price, description, book_id FROM authors, books WHERE authors.author_id = books.author_id ORDER BY authors.last_name ASC, books.book_name ASC LIMIT $start, $display";
// Are we looking at a particular author?
if (isset($_GET['aid']) && is_numeric($_GET['aid']) ) {
$aid = (int) $_GET['aid'];
if ($aid > 0) { // Overwrite the query:
 $q = "SELECT authors.author_id, CONCAT_WS(' ', first_name, middle_name, last_name) AS author, book_name, price, description, book_id FROM authors, books WHERE authors.author_id = books.author_id AND books.author_id = $aid ORDER BY books.book_name";
}
}
// Display all the books, linked to URLs:
$r = mysqli_query ($dbc, $q);
while ($row = mysqli_fetch_array ($r, MYSQLI_ASSOC)) {

// Display each record:
echo "<div class=\"book_holder\">
  <h1><a href=\"view_book.php?pid={$row['book_id']}\">{$row['book_name']}</a></h1>

  <h2><a href=\"browse_books.php?aid={$row['author_id']}\">{$row['author']}</a></h2>

  <p>";

  $newstring = substr("{$row['description']}",0,100);
echo $newstring;
echo "....<a href=\"view_book.php?pid={$row['book_id']}\">   more info</a>";
echo "</p>

  <h2>£{$row['price']}</h2>

  </div>";
} // End of while loop.

mysqli_free_result ($r);
mysqli_close($dbc);
// Make the links to other pages, if necessary.
if ($pages > 1) {

// Add some spacing and start a paragraph:
echo '<br /><p>';

// Determine what page the script is on:
$current_page = ($start/$display) + 1;

// If it's not the first page, make a Previous button:
if ($current_page != 1) {
 echo '<a href="browse_books.php?s=' . ($start - $display) . '&p=' . $pages . '">Previous</a> ';
}

// Make all the numbered pages:
for ($i = 1; $i <= $pages; $i++) {
 if ($i != $current_page) {
  echo '<a href="browse_books.php?s=' . (($display * ($i - 1))) . '&p=' . $pages . '">' . $i . '</a> ';
 } else {
  echo $i . ' ';
 }
} // End of FOR loop.

// If it's not the last page, make a Next button:
if ($current_page != $pages) {
 echo '<a href="browse_books.php?s=' . ($start + $display) . '&p=' . $pages . '">Next</a>';
}

echo '</p>'; // Close the paragraph.

} // End of links section.

include ('includes/footer.html');
?>

 

Thanks in advance

Link to post
Share on other sites

Have you tried echoing you $pages variable to see what value is actually stored in it? Unless the $pages variable is greater than 1, then none of that information will be output to the screen.

I'm guessing that your $pages variable is not being properly created for one reason or another.

  • Upvote 2
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  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.

Loading...
×
×
  • Create New...