Simple PHP Pagination with AJAX

<?php 
require_once('load.php');

if( isset( $_POST ) ){
 $response = '';
 
    if( isset( $_POST['page'] ) ){
        $page = $_POST['page'];
        $cur_page = $page;
        $page -= 1;
        $per_page = 20;
        $previous_btn = true;
        $next_btn = true;
        $first_btn = true;
        $last_btn = true;
        $start = $page * $per_page;
        
        $all_blog_posts = DB::db_get_results("
            SELECT * FROM item ORDER BY id DESC LIMIT %d, %d", array( $start, $per_page ) );
        
        $count = DB::db_get_var("
            SELECT COUNT(id) FROM item", array() );
        
        foreach( $all_blog_posts as $key => $post ){ 
            $response .= '
            <div class = "col-md-12">       
                <h3>' . $post->iname . '</h3>
                <p>Item ID: ' . $post->id . '</p>
                <p>Date Entered:  ' . $post->entry . '</p>
            </div>';
            
  }
        
        $no_of_paginations = ceil( $count / $per_page );

        if($cur_page >= 7){
            $start_loop = $cur_page - 3;
            if( $no_of_paginations > $cur_page + 3 )
                $end_loop = $cur_page + 3;
            else if( $cur_page <= $no_of_paginations && $cur_page > $no_of_paginations - 6 ){
                $start_loop = $no_of_paginations - 6;
                $end_loop = $no_of_paginations;
            } else {
                $end_loop = $no_of_paginations;
            }
        } else {
            $start_loop = 1;
            if( $no_of_paginations > 7 ){
                $end_loop = 7;
            } else {
                $end_loop = $no_of_paginations;
   }
        }
        
        $response .= "
  <div class='pagination'>
   <ul>";

    if( $first_btn && $cur_page > 1 ){
     $response .= "<li p='1' class='active'>First</li>";
    } else if($first_btn){
     $response .= "<li p='1' class='inactive'>First</li>";
    }

    if( $previous_btn && $cur_page > 1 ){
     $pre = $cur_page - 1;
     $response .= "<li p='" . $pre . "' class='active'>Previous</li>";
    } else if( $previous_btn ){
     $response .= "<li class='inactive'>Previous</li>";
    }
    
    for ($i = $start_loop; $i <= $end_loop; $i++ ){
     if($cur_page == $i){
      $response .= "<li p='" . $i . "' class = 'selected' >" . $i . "</li>";
     } else {
      $response .= "<li p='" . $i . "' class='active'>" . $i . "</li>";
     }
    }
    
    if( $next_btn && $cur_page < $no_of_paginations ){
     $nex = $cur_page + 1;
     $response .= "<li p='" . $nex . "' class='active'>Next</li>";
    } else if( $next_btn ){
     $response .= "<li class='inactive'>Next</li>";
    }

    if( $last_btn && $cur_page < $no_of_paginations ){
     $response .= "<li p='" . $no_of_paginations . "' class='active'>Last</li>";
    } else if($last_btn){
     $response .= "<li p='" . $no_of_paginations . "' class='inactive'>Last</li>";
    }

    $response .= "
   </ul>
  </div>";
        
        echo $response;
  exit();
    }
}


?>

<!DOCTYPE html>
<html lang="en">
<head>
 <title>Pagination by Carl Victor C. Fontanos</title>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
 <style>
 .pagination ul {margin: 0; padding: 0;}
 .pagination ul li {display: inline; margin: 3px; padding: 4px 8px; background: #FFF; color: black; }
 .pagination ul li.active:hover {cursor: pointer; background: #1E8CBE; color: white; }
 .pagination ul li.inactive {background: #7E7E7E;}
 .pagination ul li.selected {background: #1E8CBE; color: white;}
 </style>
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
 
<div class="col-md-12 content">
 <div class = "inner-box content no-right-margin darkviolet">
  <div class = "response-container"></div>
 </div>      
</div>

<script type="text/javascript">
jQuery(document).ready(function($){
 var ajaxurl = window.location.href;
 
 function load_posts(page){
  var data = {
   page: page
  };
  
  $.post(ajaxurl, data, function(response){
   $(".response-container").html(response);
  });
 }
 
 load_posts(1);
 
 $('body').on('click', '.response-container .pagination li.active', function(){
  var page = $(this).attr('p');
  load_posts(page);
  
 });
    
}); 
</script>

</body>
</html>

 



Do you need help with a project? or have a new project in mind that you need help with?

Contact Me