Tyra
Tyra

Reputation: 105

Pagination to display a limit per page

How do I ensure that my page could store up to 3 results that I've gotten from database per page? I will be retrieving some values from the previous page via the html link, and using it to retrieve results from the database. Then from the results, I hope to make them into pages so that won't have to scroll long. And on each page that is on, it would be disabled.

<?php
if (isset($_GET["w1"]) && isset($_GET["w2"])) {
        $lt = $_GET["w1"];
        $ln = $_GET["w2"];
        $GLOBALS['id']= "";
    }

    $servername = "localhost";
    $username = "root";
    $password = "";

    try {
        $conn = new PDO("mysql:host=$servername;dbname=dbname", $username, $password);
        // set the PDO error mode to exception
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $e){
        echo "Connection failed: " . $e->getMessage();
    }

    function getAddress($lt, $ln) {
        $result = json_decode(file_get_contents("https://maps.google.com/maps/api/geocode/json?key=". API_KEY ."&latlng=$lt,$ln"));
        if ($result->status == 'OK') {
            return $result->results[0]->formatted_address;
        }
        return 'Error'; 
    }

    try{
        $db = $conn->prepare("Select ID from Table");
        $db->execute();

        echo "<div class='row'>";
        while($row=$db->fetch(PDO::FETCH_OBJ)) {
            $GLOBALS['id'] = $row->ID;

            echo "<div class='col-sm-6 col-md-4'>";

            echo  "<h4 class='media-heading'>", $GLOBALS['id'] ,"</h4>";
            echo    "<span class='fa fa-map-pin'></span> ", getAddress($lt,$ln);
            echo "</div>";

        }
        echo "</div>";

    } catch (PDOException $e) {
        echo "Error: ".$e;
    }


?>
<!--Pagination-->
<div class="row">
    <div class="col-xs-12">
        <nav aria-label="Page navigation" class="text-center">
          <ul class="pagination pagination-lrr">
            <li>
              <a href="#" aria-label="Previous">
                <span aria-hidden="true">&laquo;</span>
              </a>
            </li>
            <li class="active"><a href="#">1</a></li>
            <li><a href="#">2</a></li>
            <li><a href="#">3</a></li>
            <li><a href="#">4</a></li>
            <li><a href="#">5</a></li>
            <li>
              <a href="#" aria-label="Next">
                <span aria-hidden="true">&raquo;</span>
              </a>
            </li>
          </ul>
        </nav>
    </div>
</div>

Upvotes: 1

Views: 2640

Answers (1)

Ofir Baruch
Ofir Baruch

Reputation: 10346

You'll have to modify your code a bit by adding 2 variables:

  • currentPage - tell the script which page the visitor is at
  • pagepage - how many records should appear in each page

Next step would be to use the LIMIT option for the SQL query.

LIMIT start, amount

We will calculate the starting point using the currentPage & perpage variable.

$currentPage = (!isset($_GET['current_page']) || (int)$_GET['current_page'] == 0) ? 1 : $_GET['current_page'];
$perpage = 3; //or whatever you'd like

$limit = $perpage;
$start = ($currentPage-1)*$perpage;

$db = $conn->prepare("Select ID from Table LIMIT $start, $limit");

So for page 1:

start = (1-1)*3 = 0
limit = 3
Which means: get the first 3 items.

For page 2:

start = (2-1)*3 = 3
limit = 3
Which means: count 3 items and then get the 3 after to them

Upvotes: 2

Related Questions