2015-08-09 3 views
-1

Я могу сделать разбиение на страницы по базе запросов, и это работает отлично. но когда я использую форму для поиска из базы данных, я могу получить только данные первой страницы, данные следующей страницы не будут отображаться.php search pagination не работает

Я просто не могу понять, как сохранить поисковый запрос. это мой код. проблема должна быть в URL-адрес ссылки в пагинацией, но я просто не могу видеть проблему

<?php 
require('koneksi.php'); 


if(isset($_GET['search'])) { 
    $search = $_GET['search']; 
    $keyword = $_GET['keyword']; 

    $koneksi = mysqli_connect("localhost","root","","mycompany"); 

    // find out how many rows are in the table 
    $sql = "SELECT COUNT(*) FROM product WHERE deskripsi LIKE '%" . $keyword . "%'"; 
    $result = mysqli_query($koneksi,$sql); 
    $rss = mysqli_fetch_row($result); 
    $numrows = $rss[0]; 

    //numbers or rows to show per page 
    $rowperpage = 6; 
    //find out total pages 
    $totalpages = ceil($numrows/$rowperpage); 

    //get the current page or set default 
    if(isset($_GET['currentpage']) && is_numeric($_GET['currentpage'])) { 
     // cast var as int 
     $currentpage = (int) $_GET['currentpage']; 
    } else { 
     // default page number 
     $currentpage = 1; 
    } // end if 

    // if the current page is greater than total pages... 
    if($currentpage > $totalpages) { 
     // set current page to last page 
     $currentpage = $totalpages; 
    } // end if 

    // if current page is less than total pages... 
    if($currentpage < 1) { 
     // set current page to first page 
     $currentpage = 1; 
    } // end if 

    // the offset of the list, based on current page 
    $offset = ($currentpage - 1) * $rowperpage; 

    $sql = "SELECT * FROM product WHERE deskripsi LIKE '%" . $keyword . "%' LIMIT $offset, $rowperpage"; 

    $result = mysqli_query($koneksi, $sql); 

    // while there are rows to be fetched 
    while ($list = mysqli_fetch_assoc($result)) { 
     // echo data 
     echo $list['product_code']; 
     echo "<br>"; 
     echo $list['deskripsi']; 

    } 

    /****** build the pagination links ******/ 
    // range of num links to show 
    $range = 6; 
    $url = "searchbar.php"; 
    // if not on page 1, don't show back links 
    if($currentpage > 1) { 
     // show << link to go to page 1 
     echo "<a href='{$_SERVER['PHP_SELF']}?currentpage=1'> << </a>"; 

     //get previous page num 
     $prevpage = $currentpage - 1; 

    } // end if 

    echo " <li class='arrow'><a href='$url?currentpage=prevpage?&keyword=$keyword?cari=$cari'>&laquo;</a></li> "; 

    for($x = ($currentpage - $range); $x < (($currentpage + $range) + 1); $x++) { 
     // if it is a valid page number 
     if(($x > 0) && ($x <= $totalpages)) { 
      // if we are on current page 
      if($x == $currentpage) { 
       echo "<li class=''><a href=''> $x </a></li>"; 
      } else { 
       // make it a link 
       //echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$x'> $x </a> "; 
       //echo "<li class=''><a href='{$_SERVER['PHP_SELF']}?currentpage=$x'>$x </a></li>"; 
       echo "<li class=''><a href='$url?currentpage=$x?&keyword=$keyword?cari=$cari'> $x </a></li>"; 
      } // end else 
     } // end if 
    } // end for 

    // if not on last page, show forward and last page links   
    if ($currentpage != $totalpages) { 
     // get next page 
     $nextpage = $currentpage + 1; 
     // echo forward link for next page 
     echo " <li class='arrow'><a href='$url?currentpage=$nextpage?&keyword=$keyword?cari=$cari'>&raquo;</a></li> "; 
     // echo forward link for lastpage 
     // echo " <a href='{$_SERVER['PHP_SELF']}?currentpage=$totalpages'> >> </a> "; 
    } // end if 

} // end if get search 

require('footer.php'); 
?> 

ответ

1

Выглядит, как там может быть несколько вещей, пропавших без вести здесь. Например:

echo " <li class='arrow'><a href='$url?currentpage=prevpage?&keyword=$keyword?cari=$cari'>&laquo;</a></li> "; 

в этой строке не хватает $ за prevpage: $prevpage но строки запроса в URL должен начинаться только с? и не содержат вопросительные знаки в других местах, так что эта строка должна читать далее как

echo " <li class='arrow'><a href='$url?currentpage=$prevpage&keyword=$keyword&cari=$cari'>&laquo;</a></li> "; 

Я не 100% уверен, что собирается исправить проблему, но есть одна большая вещь, которую я хотел бы попросить вас, чтобы посмотреть в прежде чем использовать этот код в любом месте, и это SQL-инъекция, которая у вас есть в вашем запросе.

Вы можете прочитать немного How can I prevent SQL injection in PHP?, чтобы получить лучшее представление о том, как переписать ваши запросы sql.

Таким образом, проверка ссылок, убедитесь, что строки запроса в правильном формате (http://host.com/script.php?querystring=something&var2=anothervar), где переменные разделяются только &

+0

Да, я пропустил там $. но проблема здесь в том, что разбиение на страницы не работает. результат просто отображается для первой страницы, результат для страницы 2 и т. д. пуст. спасибо за ваше предложение для предотвращения инъекций sql. я пройду через него после этого – lapmer

+0

Да, но ключ находится в другом коде, о котором я упоминал. В следующей ссылке страницы вы теперь добавляете? на ваш поисковый запрос. Раньше, если вы искали «cat», вы получили бы все результаты для% cat% на первой странице. Ссылка добавит? в поисковый запрос, чтобы затем попытаться показать результаты для% cat?% на всех других страницах. – aaronott

+0

спасибо большое @aaronott, он отлично работает сейчас. У меня есть длинный путь, чтобы узнать – lapmer

1

Как @aaronott отметил, большинство ваших ссылок неверны.

Вы используете cari=$cari, который не установлен нигде, в то время как на самом деле, я думаю, вы должны добавить search=1 (или search=$search, но это не очень полезно).

Кроме того, у вас не может быть больше, чем на? в вашем запросе, так что исправьте все ваши ссылки следующим образом:

... 

if($currentpage > 1) { 
    echo "<a href='{$_SERVER['PHP_SELF']}?currentpage=1&search=1&keyword=$keyword'> << </a>"; 
    $prevpage = $currentpage - 1; 
} 

echo " <li class='arrow'><a href='$url?currentpage=$prevpage&search=1&keyword=$keyword'>&laquo;</a></li> "; 

... 

if($x == $currentpage) { 
    echo "<li class=''><a href=''> $x </a></li>"; 
} else { 
    echo "<li class=''><a href='$url?currentpage=$x&search=1&keyword=$keyword'> $x </a></li>"; 
} // end else 

... 

echo " <li class='arrow'><a href='$url?currentpage=$nextpage&search=1&keyword=$keyword'>&raquo;</a></li> "; 
Смежные вопросы