Search dengan Pagination di PHP

Jadi gini baru aja saya lagi nyoba tutorial sekolah koding yaitu membuat blog dengan php, kodingan sudah saya modifikasi salah satunya dengan menambahkan pagination, untuk halaman search nya sendiri tidak ada masalah yg jadi mslh terletak pd paginationnya. Misal ane cari satu artikel nah ketika artikel itu muncul dan ane cek sendiri hanya ada 1 artikel di database, yg ada malahan pagination malah nampil semua. Nah begitu ane coba klik hal berikutnya yg ada malah kosong. Jadi gimana ya caranya biar saat kita search nah halamanny itu ga nampil semua dan kalaupun data yg kita search lebih dari 1 baru ditampilkan pagination yg berkaitan saja jd ga semuanya ditampilkan. Jadi bgmn gan Tolong dibantu gan, soalnya saya ga dapet logicnya nih. Ini kodingan yg udh di modifikasi di bag index.php

 <?php
  require_once "core/init.php";
$super_user = $login = false;

if($_SESSION['user']){
  $login = true;
  if(cek_status($_SESSION['user']) == 1){
    $super_user = true;
  }
}
  $articles = tampilkan();

  $hal = 5;
  $perHal = setPerPage($hal);
  $start = setStartPage($perHal,$hal);
  $total = result_total($articles);
  $getHal = getpage($total,$hal);
  $articles = tampilkan_limit($start,$hal);

if(isset($_GET['cari'])){
  $cari     = $_GET['cari'];
  $articles = hasil_cari($cari,$start,$hal);
}

  require_once "view/header.php";
 ?>

<form action="" method="get">
  <input type="search" name="cari" placeholder="Cari Judul Artikel">
</form>

<?php while($row = mysqli_fetch_assoc($articles)):?>
  <div class="each_article">
    <h3><a href="single.php?id=<?= $row['id']; ?>"><?= $row['judul']; ?></a></h3>
    <p>
    <?= excerpt($row['isi']); ?>
    </p>
    <p class="waktu"> <?= $row['waktu']; ?></p>
    <p class="tag"> Tag: <?= $row['tag']; ?> </p>

    <?php if($login == true): ?>
      <a href="edit.php?id=<?= $row['id']; ?>"> Edit </a>
      <?php if($super_user == true): ?>
        <a href="delete.php?id=<?= $row['id']; ?>"> Hapus </a>
      <?php endif; ?>
    <?php endif; ?>
  </div>
<?php endwhile; ?>

<div class="">
  <?php
  for($i=1;$i<=$getHal;$i++){
    if(isset($cari))
      echo "<a href='?halaman=$i&cari=$cari'>$i</a> ";
    else
      echo "<a href='?halaman=$i'>$i</a> ";
  }
  ?>
</div>

<?php
  require_once 'view/footer.php';
 ?>

<!-- <a href="?halaman=<?php /*echo $i; ?>"><?php echo $i; */?></a> -->

dan ini screenshotnya 1 screenshot 2 screenshot 3

avatar hanifrazin
@hanifrazin

44 Kontribusi 18 Poin

Diperbarui 7 tahun yang lalu

4 Jawaban:

$getHal itu banyaknya jumlah halaman yah? jika benar, maka ketika proses pencarian data $getHal nya diubah sesuai count dri data hasil pencarian itu,, yg jadi masalah sepertinya $getHal atau count pagenya masih berdasarkan semua data yg ada, bukan berdasarkan dari filter banyaknya data yg sesuai dengan keyword pencariannya..

avatar gunalirezqimauludi
@gunalirezqimauludi

350 Kontribusi 243 Poin

Dipost 7 tahun yang lalu

kira2 nih gan @gunaliresqimauludi gmn caranya ngubah biar variabel $getHal nya diubah sesuai count dri data hasil pencarian itu, saya masih belum ada bayangan nih, tolong dibantu gan.

avatar hanifrazin
@hanifrazin

44 Kontribusi 18 Poin

Dipost 7 tahun yang lalu

$start = (isset($_GET['halaman'])) ? (int)$_GET['halaman'] : 1;

ksih code tsb setelah $perHal = setPerPage($hal);

btewe class tampilkan() itu di post gan biar gw jawab lengkap wkkw soalnya gak tau isi class tsb.

kalo salah maaf......

avatar mhafidu
@mhafidu

3 Kontribusi 0 Poin

Dipost 7 tahun yang lalu

itu gan codingan paging.php, sebetulnya utk codingan paging.php itu sama persis kaya di https://www.sekolahkoding.com/kelas/membuat-pagination-dengan-php cuma di sini ane bikin jadi method aja sih gan di file baru

<?php
function tampilkan_limit($start,$limit){
  $start = $start;
  $limit = $limit;
  $query = "select * from blog limit $start,$limit";
  return result($query);
}

function setPerPage($hal){
  $page = isset($_GET['halaman']) ? (int)$_GET['halaman'] : 1;
  return $page;
}

function setStartPage($perHal,$hal){
  $start = ($perHal > 1) ? ($perHal * $hal) - $hal : 0;
  return $start;
}

function getpage($total,$perPage){
  $total_page = ceil($total/$perPage);
  if($total_page == 0){
    $total_page = 0;
  }
  return $total_page;
}


function result_total($result){
  if($result  = mysqli_num_rows($result) or die('gagal menampilkan data')){
    return $result;
  }
}
 ?>

ini utk codingan blog.php

 <?php

  function tampilkan(){
    $query   = "select * from blog";
    return result($query);
  }

  function tampilkan_per_id($id){
    $id    = escape($id);
    $query = "select * from blog where id='$id'";
    return result($query);
  }

  function hasil_cari($cari,$start,$limit){
    $cari  = escape($cari);
    $start  = escape($start);
    $limit  = escape($limit);
    $query = "select * from blog where judul LIKE '%$cari%' limit $start,$limit";
    return result($query);
  }

  function result($query){
    global $link;
    if($result = mysqli_query($link,$query) or die('gagal menampilkan data')){
      return $result;
    }
  }

  function tambah_data($judul,$konten,$tag){
    $judul = escape($judul);
    $konten = escape($konten);
    $tag = escape($tag);
    $query = "insert into blog (judul,isi,tag) values ('$judul','$konten','$tag')";
    return run($query);
  }

  function edit_data($judul,$konten,$tag,$id){
    $judul = escape($judul);
    $konten = escape($konten);
    $tag = escape($tag);
    $id = escape($id);
    $query = "update blog set judul='$judul',isi='$konten',tag='$tag' where id='$id'";
    return run($query);
  }

  function hapus_data($id){
    $id = escape($id);
    $query = "delete from blog where id='$id'";
    return run($query);
  }

  function run($query){
    global $link;
    if(mysqli_query($link,$query)) return true;
    else return false;
  }

  function excerpt($string){
    $string = substr($string,0,600);
    return $string . "...";
  }

  function escape($text){
    global $link;
    return mysqli_real_escape_string($link,$text);
  }
 ?>

avatar hanifrazin
@hanifrazin

44 Kontribusi 18 Poin

Dipost 7 tahun yang lalu

Login untuk ikut Jawaban