Chris-M Posted September 2, 2014 Share Posted September 2, 2014 Hi, I am having problems with pagination. I thought I had script 9.4 working without any problems, so carried on with script 9.5, which I also thought was working OK. I then added another table to my online database which I accessed by a script based on 9.5, but then I found the pagination wasn't working. I then found the pagination in script 9.5 wasn't working. The s and p appear in the url address line, and it would appear the code: if (isset($_GET['s']) && is_numeric($_GET['s'])){ $start = $_GET['s']; }else{ $start = 0; } is ignored, as start always stays at 0 (or whatever value I put as $start = ). I've checked and double checked but can't see where the problem is. The full code is included here: ------------------------------------- <?php # Script 9.5 - view_users95.php// This script retrieves all the records from the users table.// This version allows the results to be sorted in different ways.// This version paginates the query results.$page_title = 'View the Current Users';include ('includes/header8.html');// Page header:echo '<h1>Registered Users 5</h1>';require_once ('../mysqli_connect.php'); // Connect to the db.// Number of records to show per page:$display = 5;// 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(user_id) FROM users"; $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 = 2; }}// end of p IF// Determine where in the database to start returning resultsif (isset($_GET['s']) && is_numeric($_GET['s'])){ $start = $_GET['s'];}else{ $start = 0;} // Determine the sort...// Default is by registration date.$sort = (isset($_GET['sort'])) ? $_GET['sort'] : 'rd';// Determine the sorting order:switch ($sort){ case 'ln': $order_by = 'last_name ASC'; break; case 'fn': $order_by = 'first_name ASC'; break; case 'rd': $order_by = 'registration_date ASC'; break; default: $order_by = 'registration_date ASC'; $sort = 'rd'; break;}// Make the query:$q = "SELECT last_name, first_name, DATE_FORMAT(registration_date, '%d %M, %Y') AS dr, user_id FROM users ORDER BY $order_by LIMIT $start, $display";$r = @mysqli_query ($dbc, $q); // Run the query.// Table header.echo '<table border="5" align="center" cellspacing="0" cellpadding="5" width="50%"><thead><tr> <td align="left"><b>Edit</b></td> <td align="left"><b>Delete</b></td> <td align="left"><b><a href="view_users95.php?sort=ln">Last Name</a></b></td> <td align="left"><b><a href="view_users95.php?sort=fn">First Name</a></b></td> <td align="left"><b><a href="view_users95.php?sort=rd">Date Registered</a></b></td></tr></thead>';// Fetch and print all the records:$bg = '#eeeeee'; // Set the initial background colour.while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)){ //$bg = ($bg=='#bbbbbb' ? '#ffffff' : '#bbbbbb'); // Switch the background colour, using the Ternary operator. echo '<tr bgcolor="' . $bg . '"> <td align="left"><a href="edit_user93pw.php?id=' . $row['user_id'] . '">Edit</a></td> <td align="left"><a href="delete_user92pw.php?id=' . $row['user_id'] . '">Delete</a></td> <td align="left">' . $row['last_name'] . '</td> <td align="left">' . $row['first_name'] . '</td> <td align="left">' . $row['dr'] . '</td> </tr> ';} // end of while loopecho '</table>'; // Close the table.mysqli_free_result ($r); // Free up the resources.mysqli_close($dbc); // Close the database connection.//Make the links to other pages, if necessaryif ($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="view_users95.php?s=' . ($start - $display) . ';p=' . $pages . ';sort=' . $sort .'">Previous</a> '; } // Make all the numbered pages: for ($i = 1; $i <= $pages; $i++) { if ($i != $current_page) { echo '<a href="view_users95.php?s=' . (($display * ($i - 1))) . ';p=' . $pages . ';sort=' . $sort . '">' . $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="view_users95.php?s=' . ($start + $display) . ';p=' . $pages . ';sort=' . $sort . '">Next</a> '; } echo '</p>'; // close the paragraph} // end of the links sectionecho "<p>Users = $records.</p>\n"; // with this line in the pagination doesn't workecho "<p>Pages = $pages.</p>\n";echo '<br />';include ('includes/footerx.html');?>----------------------------------- I hope you can shed some light on this problem Thanks Chris Link to comment Share on other sites More sharing options...
Emilie Posted September 2, 2014 Share Posted September 2, 2014 Hello, You repeatedly used semi-colons instead of ampersands in the URLs : echo '<a href="view_users95.php?s=' . ($start - $display) . ';p=' . $pages . ';sort=' . $sort .'">Previous</a> '; Check all your URLs! I hope this helps, Emilie 2 Link to comment Share on other sites More sharing options...
Chris-M Posted September 3, 2014 Author Share Posted September 3, 2014 Emilie, Many thanks. Although the only way I could get the code to work now was to remove the '&p=' . $pages . part of the URL lines, as with that included I had '500 - Internal Server Error' when trying to navigate by pages. Although the code seems to work fine without this part. Chris Link to comment Share on other sites More sharing options...
Emilie Posted September 3, 2014 Share Posted September 3, 2014 Hello, I understand. In order to avoid this kind of problem, just use the 'code' tags: the icon is in the middle on the bottom line and looks like this: < > It will also apply syntax coloring, which helps read the code. I hope this helps, Emilie Link to comment Share on other sites More sharing options...
HartleySan Posted September 3, 2014 Share Posted September 3, 2014 Chris, a 500 error means that there is a syntax error in your code. Use comments to isolate the error and fix it. It would probably also help to have error reporting enabled. Link to comment Share on other sites More sharing options...
Chris-M Posted September 4, 2014 Author Share Posted September 4, 2014 Emilie, Thanks - I've found the 'code' tags icon you mentioned, will try to remember for next time! HartleySan, Thanks. Removing the '&p=' . $pages . section of the URL line stopped the errors with no apparent side effects. I enabled error reporting (by including script 7.3 in my code), and the script ran fine with '&p=' . $pages . in the URL line - only this time I had the error meassge below the pagination line, and below that I had Users = . , instead of Users = 11. I can't figure out what '&p=' . $pages . adds to the code, apart from, in my case, an error which seems to delete that value in $records. Chris Link to comment Share on other sites More sharing options...
HartleySan Posted September 5, 2014 Share Posted September 5, 2014 What's an example of the URL parameters sent to the script? Link to comment Share on other sites More sharing options...
Chris-M Posted September 5, 2014 Author Share Posted September 5, 2014 HartleySan, The URL script: echo '<a href="view_users.php?s=' . ($start - $display) . '&p=' . $pages . '&sort=' . $sort .'">Previous</a> '; is the one that gives the error, - generating the url: /view_users.php?s=0&p=3&sort=ct where as: echo '<a href="veiw_users.php?s=' . ($start - $display) . '&sort=' . $sort .'">Previous</a> '; works fine, the URL generated: view_users.php?s=0&sort=ct - is this what you were wanting to see? Link to comment Share on other sites More sharing options...
Larry Posted September 5, 2014 Share Posted September 5, 2014 If you get an internal server error, you need to make sure display_errors is enabled so you can see what the actual error is. Or check your server logs. Link to comment Share on other sites More sharing options...
HartleySan Posted September 6, 2014 Share Posted September 6, 2014 Above the if conditional for $_GET['s'], write the following, run the script and see what happens: echo '<pre>'; print_r($_GET); echo '</pre>'; Link to comment Share on other sites More sharing options...
Chris-M Posted September 7, 2014 Author Share Posted September 7, 2014 HartleySan, Thanks, I added the code, when the line without '&p=' . $pages . is used I get: Array ( => 10 [sort] => rd ) and no errors. Whereas when using the line with '&p=' . $pages . I get Array ( => 5 [p] => 3 [sort] => rd ) and the error report 'Undefined variable: records' the script has the line: $records = $row[0]; but I've just realised this line only runs if p has not been defined. So to overcome this I'e added the following script: // Determine how many records there are.. if(isset($_GET['r']) && is_numeric($_GET['r'])) { //Already been determined $records = $_GET['r']; } else { // need to determine // count the number of records $q = "SELECT COUNT(user_id) FROM users"; $r = @mysqli_query ($dbc, $q); $row = @mysqli_fetch_array ($r, MYSQLI_NUM); $records = $row[0]; } and this works OK. Having now seen the coding error it looks like a silly one, but the result was annoying. At least I've got to grips with the error reporting, Which would have taken longer without your prompts. Many thanks for you help, and this great forum. 1 Link to comment Share on other sites More sharing options...
HartleySan Posted September 7, 2014 Share Posted September 7, 2014 No problem. Glad you were able to get to the bottom of the problem. Link to comment Share on other sites More sharing options...
Recommended Posts