Pagination pencarian memberi saya Peringatan: Pembagian dengan nol

Saya mendapat peringatan ini > Peringatan: Pembagian dengan nol ‹ jika saya mengetik sesuatu yang tidak ada di database.

Jika saya mengetik sesuatu yang ada semuanya berfungsi dengan baik, saya tidak dapat menemukan atau menyelesaikan masalah.

Di bawah ini adalah skrip yang saya gunakan saat ini, keterampilan php saya tidak sempurna tetapi saya mencobanya.

<?php 


$button = mysql_real_escape_string($_GET ['submit']);
$search = $str = $stt = mysql_real_escape_string(strip_tags($_GET ['search']));
$str = strtoupper($str);
$stt = mb_convert_case($str, MB_CASE_TITLE, "UTF-8");

if(strlen($search)<=2) {

echo 'Nothing found for <b>'.strip_tags($str).'</b>. Please try something else ! ';

}else{

echo 'You searched for <b>'.$stt.'</b> ';


echo "";
include 'extern_/connectsearch.php';

$search_exploded = explode (" ", $search);

foreach($search_exploded as $search_each)
{
$x++;
if($x==1)
$construct .="title LIKE '%$search_each%'";
else
$construct .="AND title LIKE '%$search_each%'";
   }



$constructs ="SELECT * FROM table WHERE $construct";
$run = mysql_query($constructs);

$foundnum = mysql_num_rows($run);

if ($foundnum==0)

echo 'No results for <b>'.$search.'</b> ';

else
{ 


$per_page = 36;  
$id = (int)mysql_real_escape_string($_GET['page']);
$max_pages = ceil($foundnum / $per_page);
if(!$id)
$id=0; 


$p_num = $per_page*$id;  


if($id) 
    $p_num = ($id - 1) * $per_page;             //first item to display on this page
else
    $p_num = 0;

$getquery = mysql_query("SELECT * FROM `table` WHERE $construct ORDER BY date DESC  LIMIT $p_num, $per_page");




$title = $row ['title'];

$url = $row ['url'];


while($row = mysql_fetch_assoc($getquery))
{




echo '<div class="grid">


<a href="/id'. $row['url'] .'"  
id="'. $row['id'] .'" 
alt="'. $row['title'] .'" 
title="'. $row['title'] .'" 
target="_blank">

<h3 class="style">'. substr($row['title'], 0, 34).' ...</h3>

</a>



</div>
</div>
</div>
              ';


 }


 }
echo '<center>';


?>

 <!-- pagination -->

<?php

echo '<center>';


    $page = $id;
    $total_pages = $foundnum;
    $limit = $per_page;
    if ($page == 0) $page = 1;                  
    $prev = $page - 1;                          
    $next = $page + 1;                          
    $lastpage = ceil($total_pages/$limit);      
    $lpm1 = $lastpage - 1;  
    $adjacents = 5;     




    $pagination = "";
    if($lastpage > 1)
    {   
        $pagination .= "<div class=\"paginate\">";

        if ($page > 1) 
            $pagination.= "<a href=\"".$_SERVER['PHP_SELF']."?search=$search&submit=search&page=$prev\">Prev</a>";



        if ($lastpage < 7 + ($adjacents * 2))   
        {   
            for ($counter = 1; $counter <= $lastpage; $counter++)
            {
                if ($counter == $page)
                    $pagination.= "<a href='/id".$_SERVER['PHP_SELF']."?search=$search&submit=search&page=$counter' class='current'>$counter</a>";
                else
                    $pagination.= "<a href=\"".$_SERVER['PHP_SELF']."?search=$search&submit=search&page=$counter\">$counter</a>";                   
            }
        }
        elseif($lastpage > 5 + ($adjacents * 2))    
        {

            if($page < 1 + ($adjacents * 2))        
            {
                for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
                {
                    if ($counter == $page)
                        $pagination.= "<a href='/id".$_SERVER['PHP_SELF']."?search=$search&submit=search&page=$counter' class='current'>$counter</a>";
                    else
                        $pagination.= "<a href=\"".$_SERVER['PHP_SELF']."?search=$search&submit=search&page=$counter\">$counter</a>";                   
                }

            }
            //in middle; hide some front and some back
            elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
            {

                for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
                {
                    if ($counter == $page)
                        $pagination.= "<a href='/id".$_SERVER['PHP_SELF']."?search=$search&submit=search&page=$counter' class='current'>$counter</a>";
                    else
                        $pagination.= "<a href=\"".$_SERVER['PHP_SELF']."?search=$search&submit=search&page=$counter\">$counter</a>";                   
                }

            }

            else
            {

                for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++)
                {
                    if ($counter == $page)
                        $pagination.= "<a href='/id".$_SERVER['PHP_SELF']."?search=$search&submit=search&page=$counter' class='current'>$counter</a>";
                    else
                        $pagination.= "<a href=\"".$_SERVER['PHP_SELF']."?search=$search&submit=search&page=$counter\">$counter</a>";                   
                }
            }
        }


        if ($page < $counter - 1) 
            $pagination.= "<a href=\"".$_SERVER['PHP_SELF']."?search=$search&submit=search&page=$next\">Next</a>";

        $pagination.= "</div>\n";       
    }

    echo $pagination;

echo '</center>';
} 

?>

Peringatan: Pembagian dengan nol di home/search.php online 348

baris 348

$halaman terakhir = ceil($total_pages/$batas);

Dan hal lain yang ingin saya ketahui adalah apakah skrip ini cukup aman?

Bantuan apa pun dihargai. Terima kasih sebelumnya


person Tasos    schedule 05.10.2014    source sumber
comment
Di mana baris #348? Ini dengan jelas memberitahu Anda bahwa Anda mencoba melakukan sesuatu seperti - 5/0. Jadi Anda perlu memperhitungkan kapan ada nilai 0. Sehubungan dengan if this script safe enough lihat - stackoverflow.com/questions/60174/   -  person Sean    schedule 06.10.2014
comment
harap tampilkan penomoran halaman hanya jika Anda menemukan hasilnya;)   -  person ryrysz    schedule 06.10.2014
comment
@Sean Saya tidak mengerti maksud Anda, bisakah Anda memberi saya contoh?   -  person Tasos    schedule 06.10.2014
comment
Masalahnya jelas $limit sama dengan 0. Saya akan mulai dengan echo $limit; dan lihat apa yang Anda dapatkan...   -  person Mark Miller    schedule 06.10.2014
comment
@MarkM Saya sudah mencoba echo $limit; tetapi juga '.$batas.' di suatu tempat di halaman, tapi saya mendapatkan kesalahan yang sama   -  person Tasos    schedule 06.10.2014
comment
Contoh 1_   -  person Sean    schedule 06.10.2014
comment
Saya rasa masalah Anda adalah $per_page = 36; ada di dalam else dari if ($foundnum==0). Jadi ketika Anda menggunakannya di $limit = $per_page; maka $per_page; tidak terdefinisi, dan $lastpage = ceil($total_pages/$limit); menyebabkan $limit sama dengan 0, sehingga memberi Anda peringatan. Coba pindahkan $per_page = 36; ke luar if/else atau ubah $limit = $per_page; menjadi $limit = 36;   -  person Sean    schedule 06.10.2014
comment
@Sean YA!!! kamu baru saja menyelesaikan masalahku.... kesalahan kecil terkadang bisa membuat masalah besar... Terima kasih   -  person Tasos    schedule 06.10.2014
comment
Sebuah pemikiran yang lebih baik. Seperti yang ditunjukkan oleh @ryrysz, hanya tampilkan navigasi penomoran halaman jika hasilnya ditemukan. Ini mungkin sesederhana memindahkan tanda kurung tutup } sebelum echo '<center> ke akhir file.   -  person Sean    schedule 06.10.2014


Jawaban (1)


Masalah Anda adalah kode tidak menyetel $per_page di semua kasus. Jika Anda memeriksa kode Anda, Anda dapat melihat bahwa satu-satunya tempat yang menetapkan variabel ini adalah ketika:

if ($foundnum==0)

Namun kodenya tetap berjalan dan ketika dieksekusi

$limit = $per_page;
if ($page == 0) $page = 1;                  
$prev = $page - 1;                          
$next = $page + 1;                          
$lastpage = ceil($total_pages/$limit);  

Var $per_limit tidak ditentukan dan nilainya null. Jadi, ketika Anda membuat pembagian $total_pages/$limit PHP menghasilkan null menjadi 0 dan itulah alasan mengapa Anda hanya mendapatkan kesalahan ini ketika tidak ada Nilai DB dikembalikan.

Solusinya sesederhana mengatur nilai $per_page dalam semua kasus.

person Miguel    schedule 06.10.2014