Php'de Site İçi Arama'da Listeleme Sayısına Göre Sayfalama Görüntülenmesi
Merhabalar. Php'de listeleme yapıyorum. "index.php" sayfasındayken site içi arama yapıyorum. Arama sonrası eğer listeleme 5'ten büyük çıkarsa 2. sayfayı göstersin, eğer 5'ten küçükse göstermesini istemiyorum. Bakın 2. sayfa çıkıyor ama boş. Yani listelemeye göre ayarlama istiyorum. Ne yapmamı önerirsiniz?
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (11)
Tekrar merhaba. Arkadaşlar problemi biraz daha çözdüm gibi. Filtrelenen veri sayısı 3. Veri her sayfada 2 adet görünecek. Şu anda hem 1. sayfada hem de 2. sayfada 3 veri de listeleniyor. Aşağıdaki resim hem 1 sasyfada hem de 2. sayfada aynı. Kodlara ve resimlere bakabilir misiniz?
https://www.hizliresim.com/szfolhw
<div class="arama-alani-div">
<form action="arama.php" method="POST">
<input type="text" name="kelime" placeholder="Arama yap">
<input type="submit">
</form>
</div>
<?php
$ara = '';
if(!empty($_POST['kelime'])) {
$ara = $_POST['kelime'];
}
if(!empty($_GET['kelime'])) {
$ara = $_GET['kelime'];
}
if(!empty($ara))
{
$sayfalamasorgusu = "SELECT * FROM yaziekle WHERE yaziekle_baslik like '%$ara%'";
$sayfalamasorgu = $db->query($sayfalamasorgusu);
$sayfasay = $sayfalamasorgu->num_rows;
if($sayfasay > 0) {
$sayfa = @$_GET['sayfa'];
if((empty($sayfa)) or (!is_numeric($sayfa))) { $sayfa = 1; }
$kacar = 2;
$sayfasayisi = ceil($sayfasay/$kacar);
$neredenbaslasin = ($sayfa*$kacar)-$kacar;
$sorgusu = "SELECT * FROM yaziekle ORDER BY yaziekle_id DESC LIMIT $neredenbaslasin, $kacar";
$sorgu = $db->query($sorgusu);
foreach($sayfalamasorgu as $sorgu) {
?>
<div class="container-fluid">
<div class=icerikalani-div>
<div class="icerik-ic-alani">
<div class="resim-div">
<img src="images/eklenenyaziresimleri/<?php echo $sorgu['yaziekle_resim']; ?>">
</div>
<div class="baslik-ve-yazi-alani-kategori-ve-devaminioku">
<div class="yazi-alani-baslik">
<?php echo $sorgu['yaziekle_baslik']; ?>
</div>
<div class="yazi-alani-yazi">
<?php echo nl2br($sorgu['yaziekle_konu']); ?>
</div>
<div class="kategori-ve-devaminioku-alani">
<div class="yazi-alani-kategori">
<?php echo $sorgu['yaziekle_kategori']; ?>
</div>
<div class="yazi-alani-devaminioku">
<a href="devaminioku.php?devam=<?php echo $sorgu['yaziekle_id']; ?>">Devamını Oku</a>
</div>
</div>
</div>
</div>
</div>
</div>
<?php } ?>
<?php
for($i=1; $i<=$sayfasayisi; $i++)
{
echo "<a href='arama.php?sayfa={$i}&kelime=$ara'>{$i}</a>";
}
?>
<?php } else { echo "0"; } ?>
<?php } ?>
Arkadaşlar, arttığım kelime ile listeleme yaptım. Ve, mesela 3 adet sonuç çıktıysa ve sayfada 2 adet göster dediysem "1 2" diye sayılar çıkıyor ama bütün sonuçları 1. sayfada gösteriyor. 2. sayfa boş. Sorun çözülüyor gibi. Bir bakabilir misiniz?
<?php
if($_POST) {
$ara = $_POST['kelime'];
$sayfalamasorgusu = "SELECT * FROM yaziekle WHERE yaziekle_baslik like '%$ara%'";
$sayfalamasorgu = $db->query($sayfalamasorgusu);
$sayfasay = $sayfalamasorgu->num_rows;
if($sayfasay > 0) {
$sayfa = @$_GET['sayfa'];
if((empty($sayfa)) or (!is_numeric($sayfa))) { $sayfa = 1; }
$kacar = 2;
$sayfasayisi = ceil($sayfasay/$kacar);
$neredenbaslasin = ($sayfa*$kacar)-$kacar;
$sorgusu = "SELECT * FROM yaziekle ORDER BY yaziekle_id LIMIT $neredenbaslasin, $kacar";
$sorgu = $db->query($sorgusu);
foreach($sayfalamasorgu as $sorgu) {
?>
<div class=icerikalani-div>
<div class="icerik-ic-alani">
<div class="resim-div">
<img src="images/eklenenyaziresimleri/<?php echo $sorgu['yaziekle_resim']; ?>">
</div>
<div class="baslik-ve-yazi-alani-kategori-ve-devaminioku">
<div class="yazi-alani-baslik">
<?php echo $sorgu['yaziekle_baslik']; ?>
</div>
<div class="yazi-alani-yazi">
<?php echo nl2br($sorgu['yaziekle_konu']); ?>
</div>
<div class="kategori-ve-devaminioku-alani">
<div class="yazi-alani-kategori">
<?php echo $sorgu['yaziekle_kategori']; ?>
</div>
<div class="yazi-alani-devaminioku">
<a href="devaminioku.php?devam=<?php echo $sorgu['yaziekle_id']; ?>">Devamını Oku</a>
</div>
</div>
</div>
</div>
</div>
<?php } ?>
<?php
for($i=1; $i<=$sayfasayisi; $i++)
{
echo "<a href='arama.php?sayfa={$i}'>{$i}</a>";
}
?>
<?php } else { echo "0"; } ?>
<?php } ?>
Dediğinizi yaptım ama aynı hatayı alıyorum. Bu arada mütevazı davranıyorsunuz. Bence iyisiniz.
telefon ekranından kodları çok okuyamıyorum ama
foreach($bulsorgusu as $bul) bunu
foreach($bulsorgu as $bul) yapar mısın.?
aslında sen genel olarak for ve foreach içine katacağın değişkenleri çok karıştırıyorsun.
bende acemiyim, ilk zamanlar bende bunu çok yaşadım. sonra adım adım kodları anlamaya çalıştım. şimdi biraz daha iyiyim.
Sorgunun adını değiştirdim ama yine aynı hatayı veriyor.
Şimdi ilk olarak "index.php" sayfasında veriler listeleniyor ve sayfalama yapıyorum. "index.php" sayfasındaki arama alanına aratacağım kelimeyi yazıp arattığımda "arama.php" sayfasına gidiyor. Bu sayfada da veriler filtrelenip listeleniyor ama sayfalama da kullanmak istiyorum. Aslında işleri kolaylaştırdım biraz galiba. Kodları şu şekilde değiştirdim tekrar. Zahmet olacak tekrar bakmanız mümkün mü? Çok bir değişiklik yok.
arama.php
<?php
if($_POST) {
$ara = $_POST['kelime'];
$sayfalamasorgusu = "SELECT yaziekle_id, yaziekle_resim, yaziekle_baslik,
yaziekle_konu, yaziekle_kategori FROM yaziekle WHERE yaziekle_baslik like '%$ara%'";
$sayfalamasorgu = $db->query($sayfalamasorgusu);
?>
<?php
$sayfa = @$_GET['sayfa'];
if((empty($sayfa)) or (!is_numeric($sayfa))) {
$sayfa = 1;
}
$kacar = 3;
$sayfalamasorgusu = "SELECT yaziekle_id, yaziekle_resim, yaziekle_baslik,
yaziekle_konu, yaziekle_kategori FROM yaziekle";
$sayfalamasorgu = $db->query($sayfalamasorgusu);
$sayfalamasorgusay = $sayfalamasorgu->num_rows;
$sayfasayisi = ceil($sayfalamasorgusay/$kacar);
$neredenbaslasin = ($sayfa*$kacar)-$kacar;
$bulsorgusu = "SELECT * FROM $sayfalamasorgusu ORDER BY yaziekle_id DESC LIMIT $neredenbaslasin, $kacar";
$bulsorgu = $db->query($bulsorgusu);
foreach($bulsorgusu as $bul) {
?>
<div class=icerikalani-div>
<div class="icerik-ic-alani">
<div class="resim-div">
<img src="images/eklenenyaziresimleri/<?php echo $bul['yaziekle_resim']; ?>">
</div>
<div class="baslik-ve-yazi-alani-kategori-ve-devaminioku">
<div class="yazi-alani-baslik">
<?php echo $bul['yaziekle_baslik']; ?>
</div>
<div class="yazi-alani-yazi">
<?php echo nl2br($bul['yaziekle_konu']); ?>
</div>
<div class="kategori-ve-devaminioku-alani">
<div class="yazi-alani-kategori">
<?php echo $bul['yaziekle_kategori']; ?>
</div>
<div class="yazi-alani-devaminioku">
<a href="devaminioku.php?devam=<?php echo $bul['yaziekle_id']; ?>">Devamını Oku</a>
</div>
</div>
</div>
</div>
</div>
<?php } ?>
<?php
for($i=1; $i<=$sayfasayisi; $i++) {
echo "<a href='arama.php?sayfa={$i}'>{$i}</a>";
}
?>
<?php } ?>
Hata:
PHP Warning: Invalid argument supplied for foreach() in
son yorumunda iki defa $sayfalamasorgusu yazmışsın. birinde aranan kelime kriterken sonrasında sayfalama yapmaya çalıştığın yerde genel olarak tüm tabloyu çekiyorsun. ilk gözüme çarpan bu oldu
son yorumundaki şu kısmı silip dener misin?
$sayfalamasorgusu = "SELECT yaziekle_id, yaziekle_resim, yaziekle_baslik, yaziekle_konu, yaziekle_kategori FROM yaziekle";
ayrıca sayfalama mantığı için
tıkla ve @makifgokce hocanın yorumundaki kodu incele
benim işime yaradı ben kullandım
Arkadaşlar acaba elinde site içi arama yaptıktan sonra listeleme yapabilen bir kod var mı elinizde? Kendi uğraştığım yerde nerede hata yapıyorum anlarım. Veya aşağıdaki kodlar bana şu hatayı veriyor?
Hata :
PHP Fatal error: Uncaught Error: Call to a member function fetch_array() on string in
index.php
<div class="arama-alani-div">
<form action="arama.php" method="POST">
<input type="text" name="kelime" placeholder="Arama yap">
<input type="submit">
</form>
</div>
arama.php
<?php
if($_POST) {
$ara = $_POST['kelime'];
$sayfalamasorgusu = "SELECT yaziekle_id, yaziekle_resim, yaziekle_baslik,
yaziekle_konu, yaziekle_kategori FROM yaziekle WHERE yaziekle_baslik like '%$ara%'";
/* $sayfalamasorgu = $db->query($sayfalamasorgusu); */
?>
<?php
$sayfa = @$_GET['sayfa'];
if((empty($sayfa)) or (!is_numeric($sayfa))) {
$sayfa = 1;
}
$kacar = 3;
$sayfalamasorgusu = "SELECT yaziekle_id, yaziekle_resim, yaziekle_baslik,
yaziekle_konu, yaziekle_kategori FROM yaziekle";
$sayfalamasorgu = $db->query($sayfalamasorgusu);
$sayfalamasorgusay = $sayfalamasorgu->num_rows;
$sayfasayisi = ceil($sayfalamasorgusay/$kacar);
$neredenbaslasin = ($sayfa*$kacar)-$kacar;
$bulsorgusu = "SELECT * FROM $sayfalamasorgusu ORDER BY yaziekle_baslik DESC LIMIT $neredenbaslasin, $kacar";
/* $bulsorgu = $db->query($bulsorgusu); */
$row = $bulsorgusu -> fetch_array(MYSQLI_ASSOC);
foreach($row as $bul) { ?>
<div class=icerikalani-div>
<div class="icerik-ic-alani">
<div class="resim-div">
<img src="images/eklenenyaziresimleri/<?php echo $bul['yaziekle_resim']; ?>">
</div>
<div class="baslik-ve-yazi-alani-kategori-ve-devaminioku">
<div class="yazi-alani-baslik">
<?php echo $bul['yaziekle_baslik']; ?>
</div>
<div class="yazi-alani-yazi">
<?php echo nl2br($bul['yaziekle_konu']); ?>
</div>
<div class="kategori-ve-devaminioku-alani">
<div class="yazi-alani-kategori">
<?php echo $bul['yaziekle_kategori']; ?>
</div>
<div class="yazi-alani-devaminioku">
<a href="devaminioku.php?devam=<?php echo $bul['yaziekle_id']; ?>">Devamını Oku</a>
</div>
</div>
</div>
</div>
</div>
<?php } ?>
<?php
for($i=1; $i<=$sayfasayisi; $i++) {
echo "<a href='arama.php?sayfa={$i}'>{$i}</a>";
}
?>
<?php } ?>
Kodlar uzun ama kısaca ne yapmak istediğimi anlatayım.
<?php
if($_POST) {
$Sayfa = @intval($_GET['sayfa']); if(!$Sayfa) $Sayfa = 1;
$Say = $db->query("SELECT yaziekle_resim, yaziekle_baslik, yaziekle_konu,
yaziekle_kategori FROM yaziekle ORDER BY yaziekle_id DESC");
$ToplamVeri = $Say->num_rows;
$Limit = 5;
$Sayfa_Sayisi = ceil($ToplamVeri/$Limit); if($Sayfa > $Sayfa_Sayisi){$Sayfa = 1;}
$Goster = $Sayfa * $Limit - $Limit;
$GorunenSayfa = 2;
$ara = $_POST['kelime'];
$aramasorgusu = "SELECT yaziekle_id, yaziekle_resim, yaziekle_baslik, yaziekle_konu,
yaziekle_kategori FROM yaziekle WHERE yaziekle_baslik like '%$ara%' ORDER BY yaziekle_id DESC LIMIT $Goster, $Limit";
$aramasorgu = $db->query($aramasorgusu);
$aramasay = $aramasorgu->num_rows;
if($aramasay > 0) {
foreach($aramasorgu as $arama) {
?>
<div class=icerikalani-div>
<div class="icerik-ic-alani">
<div class="resim-div">
<img src="images/eklenenyaziresimleri/<?php echo $arama['yaziekle_resim']; ?>">
</div>
<div style="text-align:center; margin-top:10px; margin-bottom:10px;">
<?php if ($Sayfa > 1) { ?>
<span class="say_sabit"><a style="font-size:17px;" href="arama.php?sayfa=1">İlk</a></span>
<div class="say_sabit"><a style="font-size:17px;" href="arama.php?sayfa=<?=$Sayfa - 1?>">Önceki</a></div>
<?php } ?>
<?php
for($i = $Sayfa - $GorunenSayfa; $i < $Sayfa + $GorunenSayfa +1; $i++){ if($i > 0 and $i <= $Sayfa_Sayisi){
if($i == $Sayfa){
echo '<span style="font-size:17px; margin-right:8px; padding-left:8px;" class="say_aktif">'.$i.'</span>';
}else{
echo '<a style="font-size:17px; margin-right:8px; padding-left:8px;" class="say_a" href="arama.php?sayfa='.$i.'">'.$i.'</a>';
}
}
}
?>
<?php if ($Sayfa != $Sayfa_Sayisi) { ?>
<div class="say_sabit"><a style="font-size:17px;" href="arama.php?sayfa=<?=$Sayfa + 1?>">Sonraki</a></div>
<div class="say_sabit"><a style="font-size:17px;" href="arama.php?sayfa=<?=$Sayfa_Sayisi?>">Son</a></div>
<?php } ?>
</div>