2014-10-05 2 views
0

Я получаю это предупреждение>Предупреждение: Деление на ноль в <, если я нахожу что-то, что не существует в базе данных.Поиск pagination дает мне предупреждение: Отдел по нольу

Если я нахожу что-то, что существует, все работает нормально, я не могу найти или решить проблему.

Ниже приведен сценарий, который я использую на данный момент, мои штыри php не идеальны, но я стараюсь.

<?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="'. $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='".$_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='".$_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='".$_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='".$_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>'; 
} 

?> 

Предупреждение: деление на ноль в дома/search.php на линии

линия 348

$ LastPage = CEIL ($ total_pages/$ предел);

И что еще, что я хотел бы знать, является ли этот сценарий достаточно безопасным?

Любая помощь приветствуется. Заранее спасибо

+0

Где линия № 348? Это ясно говорит вам, что вы пытаетесь сделать что-то вроде: '5/0'. Поэтому вам нужно учитывать, когда есть значение «0». Что касается «если этот сценарий достаточно безопасен» см. Http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php – Sean

+0

, пожалуйста, покажите разбивку на страницы, только если вы нашли результаты;) – ryrysz

+0

@Sean Я не понимаю, что вы имеете в виду, не могли бы вы привести мне пример? – Tasos

ответ

1

Ваша проблема в том, что код не устанавливает $ per_page во всех случаях. Если вы проверяете код, который вы могли видеть, что единственное место, которое устанавливает эту переменную, когда:

if ($foundnum==0) 

Но код по-прежнему работает, и когда выполняет

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

УАК $ per_limit не определен и его значение null. Итак, когда вы делаете деление $ total_pages/$ limit PHP casts null до , и именно по этой причине вы получаете эту ошибку только в том случае, если значение DB не возвращается.

Решение такое же простое, как установлено во всех случаях значение $ per_page.

Смежные вопросы