v2.5.2
Giriş yap

Php'de Site İçi Arama'da Listeleme Sayısına Göre Sayfalama Görüntülenmesi

yazilimyolcusu
488 defa görüntülendi

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?

Cevap yaz
Cevaplar (11)
rephp7
792 gün önce

bu konuya tıkla işine yarayacaktır.

yazilimyolcusu
792 gün önce

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 }  ?>

yazilimyolcusu
797 gün önce

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 } ?>
yazilimyolcusu
798 gün önce

Dediğinizi yaptım ama aynı hatayı alıyorum. Bu arada mütevazı davranıyorsunuz. Bence iyisiniz.

rephp7
798 gün önce

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.

yazilimyolcusu
798 gün önce

Sorgunun adını değiştirdim ama yine aynı hatayı veriyor.

yazilimyolcusu
798 gün önce

Ş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
rephp7
798 gün önce

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

yazilimyolcusu
798 gün önce

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 } ?>
yazilimyolcusu
799 gün önce

Cevap veren yok mu arkadaşlar.

yazilimyolcusu
800 gün önce

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>