squirrelworks

PHP Pagination

NameUnitPrice
For Those About To Rock (We Salute You)0.99
Balls to the Wall0.99
Fast As a Shark0.99
Restless and Wild0.99
Princess of the Dawn0.99
Put The Finger On You0.99
Let's Get It Up0.99
Inject The Venom0.99
Snowballed0.99
Evil Walks0.99
C.O.D.0.99
Breaking The Rules0.99
Night Of The Long Knives0.99
Spellbound0.99
Go Down0.99
Dog Eat Dog0.99
Let There Be Rock0.99
Bad Boy Boogie0.99
Problem Child0.99
Overdose0.99
Hell Ain't A Bad Place To Be0.99
Whole Lotta Rosie0.99
Walk On Water0.99
Love In An Elevator0.99
Rag Doll0.99

<?php
$conn = createConn();
/*  
- offset value is how many results we skip before printing....
- check to see if there is an offset in the querystring. If not, set offset to 0.
- set to 0 if we have selected a new genre..
- aka: prev or next was not clicked; dropdown was submitted instead
- $_GET['offset'] will result from PREV or NEXT buttons..
- depending on the button it was sent from, the value will either be contents of $prev or $next..
*/
if (isset($_GET['offset'])){
    $offset=$_GET['offset'];} 
else{
    $offset=0;}


/*
- calculate the offset for the previous link. 
- If < 0, set to 0... result is that you cannot go back from first page of any genre...
-  this subtraction decrements the $prev contents
- first run on a new genre will always result in $prev=0
*/
$prev = $offset - 25;
if ($prev<0) {
$prev=0;
}

// calculate the offset for the NEXT link
$next = $offset + 25;

// see how many records are in the table
$query = "select count(*) as quantityvar from Track";//count contains number of records
$result=mysqli_query($conn,$query);
$row = mysqli_fetch_assoc($result);
$quantity=$row['quantityvar']; //$quantity now contains total number of records in Track table


// if the next offset is greater than the number of records,
// set it to 0 to loop back to the beginning of the table
if ($next > $quantity) {
$next = 0;
}
// check for user input
// initialize the genre to 0 in case no genre was selected.
$gen = 0;




/*
-first check to see if the form DROPDOWN was submitted. 
- If so, get the genre from the form DROPDOWN SELECTION
- data will be sent via POST in this case
*/
if (isset($_POST['genre'])){
    $gen= $_POST['genre'];} 
elseif 
/* 
- if the form was not submitted, check the querystring to see if the genre was passed as part of the paging link
- paging link is PREVIOUS or NEXT.. should stay on the same genre in the dropdown
- data will be sent via GET in this case
*/
(isset($_GET['genre'])) {
    $gen=$_GET['genre'];}
?>




<form method="post" action="php-pagination.php">
<p><label for="genre">Genre:</label>
<!--FORM LINE 1/////////////////DROP DOWN SELECTION/////////////////////////////----->
<select name="genre" id="genre">
<?php
// create a select option list from the Genre table
$query = "select GenreId, Name from Genre";
$result = mysqli_query($conn,$query);
// check for errors
if (!$result) {
die(mysqli_error($conn));
}
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result)) {
echo "<option value='".$row['GenreId']."'";
// if a genre has been selected, show that genre as the preselected option
// NOTE that on first run the first item in genre list will show as preselected by default
if ($gen==$row['GenreId']) {echo " selected";}
echo ">".$row['Name']."</option>";
}   
}
?>
</select>
<input type="submit" value="Select Genre">
</p>
</form>



<table id="tableStyles">
<tr><th>Name</th><th>UnitPrice</th></tr>
<?php
// create the query. Use the offset as the starting row and limit the rows to 20.
$query = "Select Name, UnitPrice from Track";

// if a genre is found from the form or querystring, add the where clause for the selected rep
if ($gen>0) {
$query=$query." where GenreId =$gen";
}
// add the limit clause (must be after the where clause)
$query = $query." Limit $offset, 25"; //skip amt of $offset and only produce 25 records max
//if you are not coming from paging link, but have clicked 'select genre' instead...
//your offset is going to be 0 so you'll start from beginning of results

// run the query
$result = mysqli_query($conn,$query);

// check for errors
if (!$result) {
    die(mysqli_error($conn));
}
// check for results
if (mysqli_num_rows($result)> 0) {
    // loop through results and display
    while ($row = mysqli_fetch_assoc($result)) {
        echo "<tr><td>".$row['Name']."</td>";
        echo "<td>".$row['UnitPrice']."</td></tr>";
    }

} 
/*
- IF OFFSET EXCEEDS AMOUNT OF RECORDS FOR ANY GIVEN GENRE, THE TABLE OUTPUT WILL BE BLANK
- NEED CLOSING BCKET HERE SO THAT THE PRVS AND NEXT BUTTONS ARE NOT A CONDITION OF QUERY OUTPUT
- BECAUSE THE QUERY WILL PRODUCE NOTHING AFTER 2 OR 3 PAGES IF WE ARE 
SKIPPING AMOUNT OF OFFSET 25 PER PAGE BUT THE GENRE HAS LESS RESULTSS THAN THAT.. 
THIS WILL ALLOW US TO USE THE BACK BUTTON AFTER RESULTS DONT PRINT ANYMORE
- add the Previous and Next links in the last row of the table.
- include the offset and the genre in the querystring
- send data via GET... will show in url
*/
;?>

<tr id="links">
<td><a href='php-pagination.php?offset=<?php echo $prev?>&genre=<?php echo $gen?>'>PREVIOUS</a></td>
<td><a href='php-pagination.php?offset=<?php echo $next?>&genre=<?php echo $gen?>'>NEXT</a></td>
</tr>


</table>       
   



Accessibility
 --overview

Agile
 --DevOps overview
 --Principles

API
 --REST best practices
 --REST demo
 --REST vs RPC
 --Wikipedia API

Blockchain
 --overview

Cloud
 --AWS overview

CSS/HTML
 --Bootstrap carousel
 --Grid demo
 --markdown demo

Electricity
 --fundamentals

Encoding
 --Overview

Ergonomics
 --Desk configuration
 --Device fleet
 --Input device array
 --keystroke mechanics
 --Phones & RSI

ERP
 --Anthology overview
 --Ellucian Banner
 --Higher Ed ERP Simulation Lab
 --PeopleSoft Campus Solutions
 --PESC standards
 --Slate data model

Git
 --syntax overview
 --troubleshooting libcrypto

Hardware
 --Device fleet
 --Homelab diagram

Java
 --Fundamentals

Javascript
 --Advanced Interaction: jQuery & UI Frameworks
 --input prompt demo
 --misc demo
 --Time and Date functions
 --Vue demo

Linux
 --grep demo
 --HCI and Proxmox
 --Proxmox install
 --xammp ftp server

Mail flow
 --DKIM, SPF, DMARC
 --MAPI

Microsoft
 --AZ-800: Administering Windows Server Hybrid Core Infrastructure
 --BAT scripting
 --Group Policy
 --IIS
 --robocopy
 --Server 2022 setup - Virtualbox

Misc
 --Applications
 --regex
 --Resources
 --Sustainable Computing
 --Terminology
 --Tribute to Computer Scientists

Networks
 --BGP Peering & Security Hardening Lab
 --CCNA Lammle Study Guide
 --Cisco 1921/K9 router
 --routing protocols
 --throughput calculations

PHP/SQL
 --Cookies
 --database interaction
 --demo, OSI Layers quiz
 --Foreign key constraint demo
 --fundamentals
 --MySQL and PHPmyAdmin setup
 --pagination
 --security
 --session variables
 --SQL fundamentals
 --structures
 --Tables display

Python
 --fundamentals

Security
 --Overview- GRC (Governance, Risk, and Compliance)
 --Security Blog
 --SSH fundamentals

Serialization
 --JSON demo
 --YAML demo