Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Rezultati pretrage sa pageingom

[es] :: PHP :: Rezultati pretrage sa pageingom

[ Pregleda: 992 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

damakii

Član broj: 136925
Poruke: 58
92.36.214.*



Profil

icon Rezultati pretrage sa pageingom12.11.2011. u 20:31 - pre 151 meseci
Zdravo imam sljedeci veliki problem. Imam tri filtera za pretragu iz MySQL baze. Kada uradim submit bez unosa i jednog filtera napravio sam da dobijem rezultate pretrage podjeljene u pageing sa ogranicenim brojem prikaza i to radi super. Medjutim, kada kada uradim pretragu po bilo kojem filteru, dobijem rezultate podjeljene na pageing, gdje od pocetka (od stranice 1) idu moi rezultati pretrage po filterima, a poslije tih rezultata nastavljaju svi oni ostali iz baze. Ja zelim kada uradim pretragu po filterima da mi samo rezultati koji zadovoljavaju tu pretragu budu podijeljeni na pageing, a ne svi zapisi iz baze. Molim pomoc, ovo je kod:

Code:

<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="1" bgcolor="#CCCCCC"></td>
    <td height="200" align="center" valign="top"><table width="98%" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td height="30" align="left" class="naslovstranicereg">REZULTATI PRETRAGE NA OSNOVU ZADATIH PARAMETARA</td>
      </tr>
      <tr>
        <td height="1" align="left" class="tackiceh"></td>
      </tr>
      <tr>
        <td height="40" align="left" class="tabtext">U sljedećoj tabeli nalazi se baza podataka ugovornih organa u Bosni i Hercegovini pretražena po zadatim parametrima pretrage i sortirana po abecednom redu. Ukoliko želite da saznate više o pojedinom ugovornom organu kliknite na link &quot;Opširnije&quot; u koloni, &quot;Detaljne info&quot;. </td>
      </tr>
      <tr>
        <td height="5"></td>
      </tr>
      <tr>
        <td height="20"><table width="100%" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td width="1" height="20"></td>
            <td width="50" height="20" align="left" valign="middle" bgcolor="#CCCCCC" class="tabheader">R. br.</td>
            <td width="1" height="20" align="left" valign="middle"></td>
            <td height="20" align="left" valign="middle" bgcolor="#CCCCCC" class="tabheader">Naziv ugovornog organa</td>
            <td width="1" height="20" align="left" valign="middle"></td>
            <td width="100" height="20" align="left" valign="middle" bgcolor="#CCCCCC" class="tabheader">Vrsta</td>
            <td width="1" height="20" align="left" valign="middle"></td>
            <td width="150" height="20" align="left" valign="middle" bgcolor="#CCCCCC" class="tabheader">Nivo kojem pripada</td>
            <td width="1" height="20" align="left" valign="middle"></td>
            <td width="100" align="left" valign="middle" bgcolor="#CCCCCC" class="tabheader">Detaljne info</td>
            <td width="1" align="left" valign="middle"></td>
          </tr>
        </table></td>
      </tr>
      <tr>
        <td height="20" align="center">
<?php
    include('konekcija.php');    // include your code to connect to DB.

    $tbl_name="registar";        //your table name
    // How many adjacent pages should be shown on each side?
    $adjacents = 3;
    
    /* 
       First get total number of rows in data table. 
       If you have a WHERE clause in your query, make sure you mirror it here.
    */
    $query = "SELECT COUNT(*) as num FROM $tbl_name";
    $total_pages = mysql_fetch_array(mysql_query($query));
    $total_pages = $total_pages[num];
    
    /* Setup vars for query. */
    $targetpage = "index.php?id=01a&jezik=bs";     //your file name  (the name of this file)
    $limit = 3;                                 //how many items to show per page
    $page = $_GET['page'];
    if($page) 
        $start = ($page - 1) * $limit;             //first item to display on this page
    else
        $start = 0;                                //if no page var is given, set start to 0
    
    /* Setup page vars for display. */
    if ($page == 0) $page = 1;                    //if no page var is given, default to 1.
    $prev = $page - 1;                            //previous page is page - 1
    $next = $page + 1;                            //next page is page + 1
    $lastpage = ceil($total_pages/$limit);        //lastpage is = total pages / items per page, rounded up.
    $lpm1 = $lastpage - 1;                        //last page minus 1
    
    /* 
        Now we apply our rules and draw the pagination object. 
        We're actually saving the code to a variable in case we want to draw it more than once.
    */
    $pagination = "";
    if($lastpage > 1)
    {    
        $pagination .= "<div class=\"pagination\">";
        //previous button
        if ($page > 1) 
            $pagination.= "<a href=\"$targetpage&page=$prev\">« nazad</a>";
        else
            $pagination.= "<span class=\"disabled\">« nazad</span>";    
        
        //pages    
        if ($lastpage < 7 + ($adjacents * 2))    //not enough pages to bother breaking it up
        {    
            for ($counter = 1; $counter <= $lastpage; $counter++)
            {
                if ($counter == $page)
                    $pagination.= "<span class=\"current\">$counter</span>";
                else
                    $pagination.= "<a href=\"$targetpage&page=$counter\">$counter</a>";                    
            }
        }
        elseif($lastpage > 5 + ($adjacents * 2))    //enough pages to hide some
        {
            //close to beginning; only hide later pages
            if($page < 1 + ($adjacents * 2))        
            {
                for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
                {
                    if ($counter == $page)
                        $pagination.= "<span class=\"current\">$counter</span>";
                    else
                        $pagination.= "<a href=\"$targetpage&page=$counter\">$counter</a>";                    
                }
                $pagination.= "...";
                $pagination.= "<a href=\"$targetpage&page=$lpm1\">$lpm1</a>";
                $pagination.= "<a href=\"$targetpage&page=$lastpage\">$lastpage</a>";        
            }
            //in middle; hide some front and some back
            elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
            {
                $pagination.= "<a href=\"$targetpage&page=1\">1</a>";
                $pagination.= "<a href=\"$targetpage&page=2\">2</a>";
                $pagination.= "...";
                for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
                {
                    if ($counter == $page)
                        $pagination.= "<span class=\"current\">$counter</span>";
                    else
                        $pagination.= "<a href=\"$targetpage&page=$counter\">$counter</a>";                    
                }
                $pagination.= "...";
                $pagination.= "<a href=\"$targetpage&page=$lpm1\">$lpm1</a>";
                $pagination.= "<a href=\"$targetpage&page=$lastpage\">$lastpage</a>";        
            }
            //close to end; only hide early pages
            else
            {
                $pagination.= "<a href=\"$targetpage&page=1\">1</a>";
                $pagination.= "<a href=\"$targetpage&page=2\">2</a>";
                $pagination.= "...";
                for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++)
                {
                    if ($counter == $page)
                        $pagination.= "<span class=\"current\">$counter</span>";
                    else
                        $pagination.= "<a href=\"$targetpage&page=$counter\">$counter</a>";                    
                }
            }
        }
        
        //next button
        if ($page < $counter - 1) 
            $pagination.= "<a href=\"$targetpage&page=$next\">dalje »</a>";
        else
            $pagination.= "<span class=\"disabled\">dalje »</span>";
        $pagination.= "</div>\n";        
    }
?>
<?php
// Retrieve data from database 
$naziv = $_POST['naziv'];
$vrsta = $_POST['vrsta'];
$nivo = $_POST['nivo'];
$sql=("SELECT id,naziv,vrsta,nivo FROM registar WHERE naziv like '%$naziv%' and vrsta like '%$vrsta%' and nivo like '%$nivo%' order by naziv ASC LIMIT $start, $limit");
$result=mysql_query($sql);
// Define $color=1
$color="1";
 
echo '<table width="100%" border="0" align="center" cellpadding="0" cellspacing="1" class="tabtext">';
while($rows=mysql_fetch_array($result)){
 
// If $color==1 table row color = #FFFFFF
if($color==1){
echo "<tr height='20' bgcolor='#FFFFFF'>
<td width='50' align='left' valign='middle'>".$rows['id']."</td>
<td width='' align='left' valign='middle'>".$rows['naziv']."</td>
<td width='100' align='left' valign='middle'>".$rows['vrsta']."</td>
<td width='150' align='left' valign='middle'>".$rows['nivo']."</td>
<td width='100' align='left' valign='middle'><a href=index.php?id=01uo&uo=".$rows['id']."&jezik=bs>Opširnije</a></td>
</tr>";
// Set $color==2, for switching to other color
$color="2";
}
// When $color not equal 1, use this table row color
else {
echo "<tr height='20' bgcolor='#F0F0F0'>
<td width='50' align='left' valign='middle'>".$rows['id']."</td>
<td width='' align='left' valign='middle'>".$rows['naziv']."</td>
<td width='100' align='left' valign='middle'>".$rows['vrsta']."</td>
<td width='150' align='left' valign='middle'>".$rows['nivo']."</td>
<td width='100' align='left' valign='middle'><a href=index.php?id=01uo&uo=".$rows['id']."&jezik=bs>Opširnije</a></td>
</tr>";
// Set $color back to 1
$color="1";
}
}
echo '</table>';
mysql_close();
?>
<?=$pagination?>
</td>
      </tr>
      <tr>
        <td height="20">&nbsp;</td>
      </tr>
    </table></td>
    <td width="1" bgcolor="#CCCCCC"></td>
  </tr>
</table>

damaki
 
Odgovor na temu

ivan.a
PHP developer

Član broj: 83976
Poruke: 403
*.dynamic.isp.telekom.rs.



+44 Profil

icon Re: Rezultati pretrage sa pageingom13.11.2011. u 13:04 - pre 151 meseci
Dodaj prefix ili sufix kod linkova tako da se filteri prenose i na sledeću stranicu.
Ispravi upit za dobijanje svih rezultata iz baze
Code:
$total_pages = mysql_fetch_array(mysql_query($query));

treba da bude
Code:
$total_pages = mysql_fetch_row(mysql_query($query));

$total_pages [0]; <-- ukupan broj
Nema potrebe da selektuješ sve razultate iz baze. Treba ti samo ukupan broj za paginaciju kako bi odredio limite.

Da bi dobio paginaciju sa zadatim filterima potrebno je da praviš "custom" upit npr. koristeći $_GET metodu.

To bi ovako izgledalo:
Code:
$filters="";
if (isset($_GET["filter1"]) )
$filters.= "&amp;filter1=".$_GET["filter1"];

if (isset($_GET["filter2"]) )
$filters.= "&amp;filter2=".$_GET["filter2"];
//itd....


Posle samo dodaš kod paginacije $filter:
Code:
$pagination.= "<a href=\"$targetpage&page=$prev.$filter\">« nazad</a>"
...
$pagination.= "<a href=\"$targetpage&page=$counter.$filter\">$counter</a>"; 
...i tako svuda


Naravno i upit trebaš da konstruišeš na osnovu tih filtera:
Code:
$sql_filter= "";
if (isset($_GET["filter1"]) )
$sql_filter.=" AND polje= ".$_GET["filter1"]." ";

if (isset($_GET["filter2"]) )
$sql_filter.=" AND neko_drugo_polje= ".$_GET["filter2"]." ";


I dodaš kod upita:
Citat:
$query = "SELECT COUNT(*) as num FROM $tbl_name WHERE id>=1 $sql_filter";

i drugi upit:

Code:
$sql=("SELECT id,naziv,vrsta,nivo 
FROM registar 
WHERE naziv LIKE '%$naziv%' 
AND vrsta LIKE '%$vrsta%' 
AND nivo LIKE '%$nivo%' 
$sql_filter
ORDER BY naziv ASC 
LIMIT $start, $limit");


I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};
 
Odgovor na temu

[es] :: PHP :: Rezultati pretrage sa pageingom

[ Pregleda: 992 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.