v2.5.2
Giriş yap

Php site içi arama motoru ve sayfalama sorunu

yazilimyolcusu
171 defa görüntülendi

Arkadaşlar merhaba. Bir sorum var. İlan'a yazılan yorumları admin panelinde tutmak istiyorum. Resimdeki gibi tutuyorum. En yukarıda arama çubuğu ve butonu var. Arama çubuğuna "1" yazıp butonla gönderdiğimde "1" numaralı ilan geliyor. "3" yazarsam da "3". Aynı zamanda yorumlara sayfalama yapmak istiyorum. Sayfalamada limit 2. Yani her sayfada 2 adet yorum görünüyor. Diyelim ki "3" numaralı ilana 3 adet yorum yapıldı. Şimdi "3" diye arattığımda, 3 numaralı ilk iki yorum geliyor. 3. yorumsa ikinci sayfada hemen arkasından gelmesi gerekirken başka bir ilan geliyor. Meela 2 numaralı ilan 3. olarak geliyor. İkinci resim de onu gösteriyor. Bende bir sayfalama kodu vardı, onu kullanıyordum. İşin içine arama girince işler değişti. Yapay zekaya yaptırdım bu kodu. En son bu hale geldi.
Yani arattığım yorumlar ilk sayfada 2 adet çıkıyor, 3. yorum ise ikinci sayfada 4. olarak çıkıyor. Kodlar ve resimler aşağıda. Yardım edebilirseniz sevinirim. Veya siz bu sayfanın tasarımını nasıl yapıyorsunuz, öyle yapayım?

<form action="" method="POST">
    <input type="text" name="arama" placeholder="İlan Numarası Ara" pattern="\d*" required>
    <input type="submit" name="gonder" value="Arama Yap">
</form>

<div class="yorumlarlistele_aramasil_div">
    <form action="arama.php" method="POST">
        <input type="submit" name="aramayisil" value="Aramayı Sil">
    </form>
</div>
</div>

<?php
$Limit = 2;
$GorunenSayfa = 2;

// Sayfa numarasını al, yoksa 1 olarak varsayalım
$Sayfa = isset($_GET['sayfa']) ? intval($_GET['sayfa']) : 1;

// Arama yapıldığında veya yapılmadığında veritabanından ilgili verileri al
if (isset($_POST['gonder'])) {
    $aramacek = $_POST['arama'];
    $sorgu = "SELECT * FROM yorumlar WHERE yorumlar_ilannumarasi LIKE '%$aramacek%' ORDER BY yorumlar_id DESC LIMIT $Limit OFFSET " . ($Limit * ($Sayfa - 1));
    $sorgu_sayfa = "SELECT COUNT(*) FROM yorumlar WHERE yorumlar_ilannumarasi LIKE '%$aramacek%'";
} else {
    $sorgu = "SELECT * FROM yorumlar ORDER BY yorumlar_id DESC LIMIT $Limit OFFSET " . ($Limit * ($Sayfa - 1));
    $sorgu_sayfa = "SELECT COUNT(*) FROM yorumlar";
}

// Veritabanı sorgusunu çalıştır
$verisay = mysqli_query($db, $sorgu);
$aramasonucu = mysqli_num_rows($verisay);

// Toplam veri sayısını hesapla
$verisay_sayfa = mysqli_query($db, $sorgu_sayfa);
$ToplamVeri = mysqli_fetch_array($verisay_sayfa)[0];
$Sayfa_Sayisi = ceil($ToplamVeri / $Limit);

if ($aramasonucu > 0) {               
?>
    <div class="yorumlarlistele_yazisi_div">Yorum Listele</div>
    <?php
    foreach($verisay as $yorumlarlistele_goster) {
    ?>
        <div class="yorumlarlistele_ilannumarasi">İlan Nu:</div>
        <div class="yorumlarlistele_adsoyad">Ad-Soyad</div>
        <div class="yorumlarlistele_eposta">E-Posta</div>
        <div class="yorumlarlistele_onay">Onay</div>
        
        <div class="yorumlarlistele_ilannumarasi_veri">
            <?php echo nl2br(substr($yorumlarlistele_goster['yorumlar_ilannumarasi'],0,20)); ?>
        </div>

        <div class="yorumlarlistele_adsoyad_veri">
            <?php echo nl2br(substr($yorumlarlistele_goster['yorumlar_adsoyad'],0,40)); ?>
        </div>

        <div class="yorumlarlistele_eposta_veri">
            <?php echo nl2br(substr($yorumlarlistele_goster['yorumlar_eposta'],0,40)); ?>
        </div>

        <div class="yorumlarlistele_onay_veri">
            <?php echo nl2br(substr($yorumlarlistele_goster['yorumlar_onay'],0,1)); ?>
        </div>

        <div class="yorumlarlistele_yorum">Yorum</div>
        <div class="yorumlarlistele_duzenle_sil">Düzenle-Sil</div>                    
        <div class="yorumlarlistele_yorum_veri">
            <?php echo nl2br($yorumlarlistele_goster['yorumlar_yorumalani']); ?>
        </div>

        <div class="yorumlarlistele_duzenle_sil_alani_veri">
            <a href="yenieklenenlerduzenle.php?yenieklenenlerduzenle=<?php 
                echo base64_encode($yorumlarlistele_goster['yorumlar_id']); 
                ?>"
            >
                <img src="icons/edit.png" title="Düzenle" />
            </a>

            <a href="yenieklenenlersil.php?yenieklenenleridsil=<?php 
                echo base64_encode($yorumlarlistele_goster['yorumlar_id']); 
            ?>">
                <img src="icons/delete.png" style="padding-left:25px;" title="Sil"/>
            </a>
        </div>
    <?php 
    } 
    ?>
</div>
                
<div class="sayfalama-div">
    <?php if ($Sayfa > 1) { ?>
        <span class="say_sabit"><a style="font-size:17px; color:#fff; margin-right:8px;" href="arama.php?sayfa=1&arama=<?php echo isset($_POST['gonder']) ? urlencode($_POST['arama']) : ''; ?>">İlk</a></span>
        <span class="say_sabit"><a style="font-size:17px; color:#fff;" href="arama.php?sayfa=<?php echo $Sayfa - 1; ?>&arama=<?php echo isset($_POST['gonder']) ? urlencode($_POST['arama']) : ''; ?>">Önceki</a></span>
    <?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:0px 8px; background:red; color:#fff;" class="say_aktif">' . $i . '</span>';
            } else {
                echo '<a style="font-size:17px; padding:0px 8px; color:#fff; margin-right:8px;" class="say_a" href="arama.php?sayfa=' . $i . '&arama=' . (isset($_POST['gonder']) ? urlencode($_POST['arama']) : '') . '">' . $i . '</a>';
            }
        }
    }
    ?>

    <?php if ($Sayfa != $Sayfa_Sayisi) { ?>
        <span class="say_sabit"><a style="font-size:17px; color:#fff; margin-right:8px;" href="arama.php?sayfa=<?php echo $Sayfa + 1; ?>&arama=<?php echo isset($_POST['gonder']) ? urlencode($_POST['arama']) : ''; ?>">Sonraki</a></span>
        <span class="say_sabit"><a style="font-size:17px; color:#fff;" href="arama.php?sayfa=<?php echo $Sayfa_Sayisi; ?>&arama=<?php echo isset($_POST['gonder']) ? urlencode($_POST['arama']) : ''; ?>">Son</a></span>
    <?php } ?>
</div>
<?php
} else {
echo "Arama Sonucu: Sonuç Bulunamadı";
}
?>

https://hizliresim.com/o54e82x
https://hizliresim.com/erc1gel

Cevap yaz
Cevaplar (1)
yazilimyolcusu
197 gün önce

Aşağıdaki kodlara göre değerlendirecek olursak şöyle bir sorun fark ettim.
iki adet php sayfası var. ilk sayfa arama.php, ikinci sayfa ise aramasonuc.php sayfası. Aşağıdaki kodlar aramasonuc.php sayfasının kodları. arama.php sayfasından aratılacak değeri gönderiyorum. aramasonuc.php sayfasında sayfalama yapıyorum. her sayfada 2 adet veri gösteriliyor. Sorun şu: Gönderdiğim değer üç adet veriyi tutuyorsa ve aramasonuc.php sayfasında da her sayfada veri gösterilme limitini iki olarak belirlemişsem, iki adet veri olarak alıyor değeri. Gönderdiğim veri 3 adet veriyse ve aramasonuc.php sayfasında limiti 3 olarak belirlediysem aramasonuc.php sayfası, alınan değerin tuttuğu veri sayısını 3 olarak kabul ediyor. Yani aramasonuc.php sayfasındaki limit 2 dersek ve gelen veri 3 adetse, 3. veriyi sayfalamaya tabi tutmuyor.

Kısacası limit 2 ise veri 3 adetse gelen veriyi 2 olarak alıyor. Hâlbuki limit 2 ise gelen veri 3 ise 1. sayfada 2 verinin, 2. sayfada 3. verinin olması lazım. 3. veri sayfalamaya tabi olmuyor.

<?php
$Sayfa = @intval($_GET['sayfa']); if(!$Sayfa) $Sayfa = 1;
$Say = "SELECT * FROM yorumlar ORDER BY yorumlar_id DESC";
$verisay = mysqli_query($db, $Say);
$ToplamVeri = mysqli_num_rows($verisay);
$Limit = 2;
$Sayfa_Sayisi = ceil($ToplamVeri/$Limit); if($Sayfa > $Sayfa_Sayisi){$Sayfa = 1;}
$Goster = $Sayfa * $Limit - $Limit;
$GorunenSayfa = 4;

if(isset($_POST['gonder'])) {
    $aramacek = @$_POST['arama'];
    $yenieklenenleryorumaramalistele_sorgusu = "SELECT yorumlar_id, yorumlar_ilannumarasi, 
    yorumlar_adsoyad, yorumlar_eposta, yorumlar_yorumalani, yorumlar_onay 
    FROM yorumlar WHERE yorumlar_ilannumarasi LIKE '%$aramacek%' order by yorumlar_id DESC limit $Goster, $Limit";
    $yenieklenenleryorumaramalistele_sorgu = mysqli_query($db, $yenieklenenleryorumaramalistele_sorgusu);
    $aramasonucu = mysqli_num_rows($yenieklenenleryorumaramalistele_sorgu);
    if($aramasonucu > 0) {
?>

        <div class="x">
            <?php require("mobilemenu.php"); ?>
            <div class="sayfalama_ve_liste_margin">
                <div class="marginayarla">
                    <div class="yorumlarlistele_aramayap_div">
                        <form action="" method="POST">
                            <input type="text" name="arama" placeholder="İlan Numarası Ara" pattern="\d*" required>
                            <input type="submit" name="gonder" value="Arama Yap">
                        </form>

                        <div class="yorumlarlistele_aramasil_div">
                            <form action="arama.php" method="POST">
                                <input type="submit" name="aramayisil" value="Aramayı Sil">
                            </form>
                        </div>
                    </div>

                    
                    <div class="yorumlarlistele_yazisi_div">Yorum Listele</div>
                    <?php
                    foreach($yenieklenenleryorumaramalistele_sorgu as $yorumlarlistele_goster) {
                    ?>
                        <div class="yorumlarlistele_ilannumarasi">İlan Nu:</div>
                        <div class="yorumlarlistele_adsoyad">Ad-Soyad</div>
                        <div class="yorumlarlistele_eposta">E-Posta</div>
                        <div class="yorumlarlistele_onay">Onay</div>
                        <div class="yorumlarlistele_ilannumarasi_veri">
                            <?php echo nl2br(substr($yorumlarlistele_goster['yorumlar_ilannumarasi'],0,20)); ?>
                        </div>

                        <div class="yorumlarlistele_adsoyad_veri">
                            <?php echo nl2br(substr($yorumlarlistele_goster['yorumlar_adsoyad'],0,40)); ?>
                        </div>

                        <div class="yorumlarlistele_eposta_veri">
                            <?php echo nl2br(substr($yorumlarlistele_goster['yorumlar_eposta'],0,40)); ?>
                        </div>

                        <div class="yorumlarlistele_onay_veri">
                            <?php echo nl2br(substr($yorumlarlistele_goster['yorumlar_onay'],0,1)); ?>
                        </div>

                        <div class="yorumlarlistele_yorum">Yorum</div>
                        <div class="yorumlarlistele_duzenle_sil">Düzenle-Sil</div>                    
                        <div class="yorumlarlistele_yorum_veri">
                            <?php echo nl2br($yorumlarlistele_goster['yorumlar_yorumalani']); ?>
                        </div>

                        <div class="yorumlarlistele_duzenle_sil_alani_veri">
                            <a href="yenieklenenlerduzenle.php?yenieklenenlerduzenle=<?php 
                                echo base64_encode($yorumlarlistele_goster['yorumlar_id']); 
                                ?>"
                            >
                                <img src="icons/edit.png" title="Düzenle" />
                            </a>

                            <a href="yenieklenenlersil.php?yenieklenenleridsil=<?php 
                                echo base64_encode($yorumlarlistele_goster['yorumlar_id']); 
                            ?>">
                                <img src="icons/delete.png" style="padding-left:25px;" title="Sil"/>
                            </a>
                        </div>
                    <?php } ?>
                </div>
                    
                <div class="sayfalama-div">
                    <?php if($Sayfa > 1) { ?>
                        <span class="say_sabit"><a style="font-size:17px; color:#fff; margin-right:8px;" href="arama.php?sayfa=1">İlk</a></span>
                        <span class="say_sabit"><a style="font-size:17px; color:#fff;" href="arama.php?sayfa=<?=$Sayfa - 1?>">Önceki</a></span>
                    <?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:0px 8px; background:red; color:#fff;" class="say_aktif">'.$i.'</span>';
                            } else {
                                echo '<a style="font-size:17px;  padding:0px 8px; color:#fff; margin-right:8px;" class="say_a" href="arama.php?sayfa='.$i.'">'.$i.'</a>';
                            }
                        }
                    }
                    ?>

                    <?php if ($Sayfa != $Sayfa_Sayisi) { ?>
                        <span class="say_sabit"><a style="font-size:17px; color:#fff; margin-right:8px;" href="arama.php?sayfa=<?=$Sayfa + 1?>">Sonraki</a></span>
                        <span class="say_sabit"><a style="font-size:17px; color:#fff;" href="arama.php?sayfa=<?=$Sayfa_Sayisi?>">Son</a></span>
                    <?php } ?>
                </div>
            </div>
        </div>
<?php 
    } 
} 
?>