PHP paginacija

PHP paginacija

offline
  • Pridružio: 13 Mar 2009
  • Poruke: 229

Pozdrav svima. Ima neko ideju zasto ovaj skript ne odradi svoj posao kako treba. Tacnije dekrement $page-- ne radi. Sve radi ok osim toga. Jedino sto bi jos moglo da se resi je to da se na pocetku ne prikazuje uopste link "Prethodna".



$page = isset($_GET['page'])?intval($_GET['page']):0;                $per_page = 2;                $start = $page?$page*$per_page:0;                                $next_link = '<a href="?page='.$page++.'">Prethodna</a>';                $prev_link = '<a href="?page='.$page--.'">Sljedeća</a>';                                      $sql="SELECT * FROM diplomci order by ID_DIPLOMCA asc LIMIT $start, $per_page;";                $result=mysql_query($sql);             $i=0;             while($red=mysql_fetch_array($result))             {                          echo'<table border="0" width ="450"><tr align="left" ><td  bgcolor= "#606D84" width="8%" align="center"><FONT SIZE="3" color="#FFFFFF"><b>'.++$i.'.</b></FONT></td><td align="right"><FONT SIZE="3"><a href="profil.php?idDiplomca='.$red['ID_DIPLOMCA'].'">Pogledaj profil</FONT></a></td><tr></table>';?>             <?php echo'<b>Ime: </b>'; echo '<b>'; echo $red['IME']; echo'</b>' ?> <br><?php echo '<b>Prezime: </b>'; echo '<b>'; echo $red['PREZIME']; echo'</b>'?><br><?php echo '<b>Odsjek: </b>'; echo '<b>'; echo $red['SMIJER']; echo'</b>'?><br> <?php echo '<b>Status: </b>'; echo '<b>'; echo $red['STATUS']; echo'</b>';?><hr>              <?php                          }               //Broj redova u bazi                $count_sql = 'SELECT COUNT(*) FROM diplomci';                $count_result = mysql_query($count_sql);                $count = mysql_fetch_row($count_result);                $brojRedova = $count[0];                                mysql_close();                             $brojStrana=round($brojRedova/$per_page);                echo 'Ukupno ima '.$brojStrana. ' Strana';                                                if($page<$brojStrana-1)                {                echo "<div>$next_link $page $prev_link</div>";                }                else                {                echo "<div>$next_link $page</div>";                }   



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 21 Apr 2007
  • Poruke: 98

Napisano: 08 Dec 2010 9:06

Zašto komplikovati? Napravi fajl paginacija.php i unesi sledeći kod:

     $rowsperpage = $result_per_page;               $totalpages = ceil($numrows / $rowsperpage);               if (isset($_GET['page']) && is_numeric($_GET['page'])) {                   $currentpage = (int)$_GET['page'];               } else {                   $currentpage = 1;               }               if ($currentpage > $totalpages) {                   $currentpage = $totalpages;               }               if ($currentpage < 1) {                   $currentpage = 1;               }               if ($totalpages <= 1) {                   $totalpages = 1;               }               $offset = ($currentpage - 1) * $rowsperpage;               if (isset($_GET['page']) AND is_numeric($_GET['page'])){                           $current_page = ($_GET['page']);                           }                           if (!isset($current_page)) {                               $current_page = 1;                           }               $range = $max_links;               if ($range >= $totalpages) {                   $range = $totalpages;               }                       if ($current_page > $totalpages) {$current_page = $totalpages;}                                     echo '<table><tr><td style="padding-right:24px;" align="right" class="pagination"> <b>Strana ' . $current_page . ' od ' . $totalpages . '</b> [' . $numrows . ' ukupno ]     ';               if ($currentpage > 1) {                   echo " <a title= 'Prva strana' href='{$_SERVER['PHP_SELF']}?page=1'><<</a> ";                   $prevpage = $currentpage - 1;                   echo " <a title='Poslednja strana' href='{$_SERVER['PHP_SELF']}?page=$prevpage'><</a> ";               }               for ($x = ($currentpage - $range); $x < (($currentpage + $range) + 1); $x++) {                   if (($x > 0) && ($x <= $totalpages)) {                       if ($x == $currentpage) {                           echo " [<b>$x</b>] ";                       } else {                           echo " <a href='{$_SERVER['PHP_SELF']}?page=$x'>$x</a> ";                       }                   }               }               if ($currentpage != $totalpages) {                   $nextpage = $currentpage + 1;                   echo " <a  href='{$_SERVER['PHP_SELF']}?page=$nextpage'>></a> ";                   echo " <a  href='{$_SERVER['PHP_SELF']}?page=$totalpages'>>></a> ";               }               echo '</td></tr></table>';                       ?>
Zatim na samom početku (pre glavnog upita) kucaj:
$sql= 'SELECT COUNT(*) FROM diplomci LIMIT 1'; $result = mysql_query($sql); $r = mysql_fetch_row($result); $numrows = $r[0]; $result_per_page = 20;  // 20 rezultata po strani $max_links = 5; //Broj linkova pre i posle trenutne stranice

I glavni upit treba biti ovakav:
$sql="SELECT * FROM diplomci order by ID_DIPLOMCA asc LIMIT $offset, $rowsperpage;";

I samo "pozoveš" paginaciju gde hoćeš sa
include('paginacija.php');

P.S. Ne zaboravi da filtriraš nekom svojom metodom $_GET

Dopuna: 08 Dec 2010 9:12

Dodatak:

Ako hoćeš da stilizuješ paginaciju dodaj ovo u .css (već se koristi klasa class="pagination")

.pagination {    padding: 0px;    margin: 0px;    text-align:right;     } .pagination a {    padding: 2px 3px 2px 3px;    margin: 1px;    border: 1px solid #AAAADD;    text-decoration: none; /* no underline */    color: #fff;    -moz-border-radius: 4px;    -webkit-border-radius: 4px; } .pagination a:hover, .pagination a:active {    border: 1px solid #105289;    color: #FFAA00; } .pagination span.current {    padding: 2px 5px 2px 5px;    margin: 2px;       border: 1px solid #105289;              font-weight: bold;       background-color: #105289;       color: #FFF;    }    .pagination span.disabled {       padding: 2px 5px 2px 5px;       margin: 2px;       border: 1px solid #EEE;       color: #DDD;    }     td.pagination {height: 24px;}

Eto...



offline
  • Pridružio: 13 Mar 2009
  • Poruke: 229

E hvala, koristilo je .

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3747
  • Gde živiš: 127.0.0.1

Za nesto sto nije komplikovano, poprilicno dugacak kod Mr. Green

Probaj ovako nesto:

<?php    function paging($rows,$per_page=10) {       $_GET['page'] = $_GET['page'] ? intval($_GET['page']) : 1;       $p = ceil($rows/$per_page);       if ($p > 1) {          if ($_GET['page'] > 1) {             echo "<a  href='".$_SERVER['PHP_SELF']."?page=".(intval($_GET['page'])-1)."'><</a>\n";          }          echo "<a  href='".$_SERVER['PHP_SELF']."?page=1'>1</a>\n";          $start = max(2,min($p-4,$_GET['page']-2));          $end = min($p-1,max($start+3,$_GET['page']+2));          for ($i=$start;$i<=$end;$i++) {             if (($start > 2) and ($start == $i)) {                echo "... ";             }             echo "<a  href='".$_SERVER['PHP_SELF']."?page=".$i."'>".$i."</a>\n";             if (($end < $p - 1) and ($i == $end)) {                echo "... ";             }          }          echo "<a  href='".$_SERVER['PHP_SELF']."?page=".$p."'>".$p."</a>\n";          if ($_GET['page'] < $p) {             echo "<a  href='".$_SERVER['PHP_SELF']."?page=".(intval($_GET['page'])+1)."'>></a>\n";          }       }    } ?>

a prikazujes sa:

<?php    $rows = mysql_num_rows(mysql_query("SELECT ID_DIPLOMCA FROM diplomci_order"));    paging($rows,20); ?>

A upit za prikazivanje:

<?php    $limit = $_GET['page'] ? ((intval($_GET['page'])-1)*20).",20" : "0,20";    $q = mysql_query("SELECT * FROM diplomci_order ORDER BY ID_DIPLOMCA ASC LIMIT ".$limit); ?>

offline
  • Pridružio: 21 Apr 2007
  • Poruke: 98

Zanimljiva paginacija. Samo ovaj kod za dobijanje rezultata:
$rows = mysql_num_rows(mysql_query("SELECT ID_DIPLOMCA FROM diplomci_order"));
treba da bude:
$sql= 'SELECT COUNT(ID_DIPLOMCA) FROM diplomci LIMIT 1';
To pravi bitnu razliku i daje bolje performanse.

Ipak je ova moja skripta mnogo fleksibilnija. Ima i fin offset (levo i desno) tako da trenutna strana uvek stoji u sredini. Lako se može napraviti AJAX paginacija sa ovom skriptom.

Evo primera (gornji linkovi) :
openstats.iz.rs/index2.php

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3747
  • Gde živiš: 127.0.0.1

eevan79 ::Ipak je ova moja skripta mnogo fleksibilnija. Ima i fin offset (levo i desno) tako da trenutna strana uvek stoji u sredini. Lako se može napraviti AJAX paginacija sa ovom skriptom.

Pokreni pa komentarisi Wink i moja ima takav prikaz, plus sto prikazuje samo 7 (ili manje) strana: prvu, dve ispred, onu na kojoj si, dve iza, i zadnju.

offline
  • Pridružio: 21 Apr 2007
  • Poruke: 98

Ups, sry onda. Gledao sam samo kod na brzinu.

Mogao si da dodaš na primer još jednu varijablu kod paging funkcije. Na primer broj linkova pre i posle izabrane stranice...kao kod moje skripte.

function paging($rows,$per_page=10, $max_links = 5)

i samo zameniš kod za $start i $end sa $max_links.

Pr:
<< < 1 2 [3] 4 5 6 7 8 > >>
Very Happy

offline
  • susok  Male
  • Novi MyCity građanin
  • Pridružio: 03 Sep 2009
  • Poruke: 23
  • Gde živiš: BH

Rastafarii ::Za nesto sto nije komplikovano, poprilicno dugacak kod Mr. Green

Probaj ovako nesto:

<?php    function paging($rows,$per_page=10) {       $_GET['page'] = $_GET['page'] ? intval($_GET['page']) : 1;       $p = ceil($rows/$per_page);       if ($p > 1) {          if ($_GET['page'] > 1) {             echo "<a  href='".$_SERVER['PHP_SELF']."?page=".(intval($_GET['page'])-1)."'><</a>\n";          }          echo "<a  href='".$_SERVER['PHP_SELF']."?page=1'>1</a>\n";          $start = max(2,min($p-4,$_GET['page']-2));          $end = min($p-1,max($start+3,$_GET['page']+2));          for ($i=$start;$i<=$end;$i++) {             if (($start > 2) and ($start == $i)) {                echo "... ";             }             echo "<a  href='".$_SERVER['PHP_SELF']."?page=".$i."'>".$i."</a>\n";             if (($end < $p - 1) and ($i == $end)) {                echo "... ";             }          }          echo "<a  href='".$_SERVER['PHP_SELF']."?page=".$p."'>".$p."</a>\n";          if ($_GET['page'] < $p) {             echo "<a  href='".$_SERVER['PHP_SELF']."?page=".(intval($_GET['page'])+1)."'>></a>\n";          }       }    } ?>

a prikazujes sa:

<?php    $rows = mysql_num_rows(mysql_query("SELECT ID_DIPLOMCA FROM diplomci_order"));    paging($rows,20); ?>

A upit za prikazivanje:

<?php    $limit = $_GET['page'] ? ((intval($_GET['page'])-1)*20).",20" : "0,20";    $q = mysql_query("SELECT * FROM diplomci_order ORDER BY ID_DIPLOMCA ASC LIMIT ".$limit); ?>



Pozdrav!

Dali mi možete reći kako da napravim da kad u linku paginacije ukucam localhost/paginacija.php?page=0

da mi neizbacuje grešku
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-2,2' at line 1

i da zaštitim od sql injectiona

Hvala!

offline
  • Pridružio: 23 Jan 2014
  • Poruke: 1

Postovani forumasi, ima li neko da mi pomogne oko ove Paginacije. Rijec je o modulu u koji treba da ubacim kod za paginaciju. Nisam siguran gdje grijesim pa moze li pomoc od iskusnih. Treba mi ovo,
<< 1234567891011>>
Kod je
<?php
/**
* New Books Extended module for BookLibrary
* @version 2.2 FREE
* @license gnu.org/copyleft/gpl.html GNU/GPL
* mod_booklibrary_newbooks_ext
* copyright Andrey Kvasnevskiy-OrdaSoft(akbet@mail.ru), 2011;
*/


/** ensure this file is being included by a parent file */
defined( '_JEXEC' ) or die( 'Restricted access' );
$database = JFactory::getDBO();
$my = JFactory::getUser();
$GLOBALS['database'] = $database;
$GLOBALS['my']=$my;
$acl = JFactory::getACL();
$GLOBALS['acl'] = $acl;
?>

<link rel="stylesheet" type="text/css" href="administrator/components/com_booklibrary/includes/booklibrary.css">
<?php
if( !function_exists( 'sefreltoabs')) {
function sefRelToAbs( $value ) {
//Need check!!!

// Replace all & with & as the router doesn't understand &
$url = str_replace('&', '&', $value);
if(substr(strtolower($url),0,9) != "index.php") return $url;
$uri = JURI::getInstance();
$prefix = $uri->toString(array('scheme', 'host', 'port'));
return $prefix.JRoute::_($url);
}
}
$ItemId_tmp_from_params=$params->get('ItemId');
$database->setQuery("SELECT id FROM #__menu WHERE menutype like '%menu%' AND link LIKE '%index.php?option=com_booklibrary%' ");
$ItemId_tmp_from_db = $database->loadResult();
if($ItemId_tmp_from_params!=''){
$ItemId_tmp=$ItemId_tmp_from_params;
}
else{
$ItemId_tmp=$ItemId_tmp_from_db;
}

$itemsPerPage = 10;

$moduleclass_sfx = $params->get('moduleclass_sfx', '');
$count = intval($params->get('count',0));
$description = intval($params->get('description',1));
$g_words = $params->get('words','');
$showtitle = $params->get ('showtitle', '');
$showauthor = $params->get ('showauthor', '');
$showcover = $params->get ('showcover', 1);
$displaytype = $params->get ('displaytype', 0);
$coversize = $params->get ('coversize', '127');
$sortnewby = $params->get ('sortnewby', 0);

switch($sortnewby) {
case 0:
$sql_orderby_query = "date"; // Last Edited
break;
case 1:
$sql_orderby_query = "id"; // Last Added
break;
}

require_once ( JPATH_SITE . "/administrator/components/com_booklibrary/functions.php" );
$s = getWhereUsergroupsString("c");

$selectstring = "SELECT a.*,bc.catid FROM #__booklibrary AS a
\nLEFT JOIN #__booklibrary_categories AS bc ON bc.bookid=a.id
\nLEFT JOIN #__booklibrary_main_categories AS c ON c.id=bc.catid
\nWHERE a.published=1 AND ({$s}) AND c.published='1' ".
"\nGROUP BY a.id
\nORDER BY ".$sql_orderby_query." DESC LIMIT 0,$count;";

$database->setQuery($selectstring);
$rows = $database->loadObjectList();

?>
<?php if($moduleclass_sfx!='') {?>
<div class="<?php echo $moduleclass_sfx;?>"> <?php }?>
<table cellpadding="1" cellspacing="1" class="basictable" width="30%">
<?php
if($displaytype==1) { // Display Horizontal
?>
<tr valign="top">
<?php
}
?>

<?php foreach ($rows as $row) {
$comment = $row->comment;
$prevwords = count(explode(" ",$comment));
if(trim($g_words == "" )) $words = $prevwords;
else $words = intval($g_words);
$text = implode(" ", array_slice(explode(" ",$comment), 0, $words));
if (count(explode(" ",$text))<$prevwords){
$text .= "";
}

$link1 = "index.php?option=com_booklibrary&task=view&Itemid=".$ItemId_tmp."&id=".$row->id."&catid=".$row->catid;

//for local images
$imageURL = $row->imageURL;
if($imageURL != '' && substr($imageURL,0,4) != "http")
{
$imageURL = JURI::base() . $row->imageURL;;
}
if($imageURL == ''){
$imageURL = "./components/com_booklibrary/images/no-img_eng.gif";
}

if($displaytype==1) { // Display Horizontal
if($showcover==1) {
?>
<noscript>Javascript is required to use Book Library <a href="http://ordasoft.com/Book-Library/booklibrary-versions-feature-comparison.html">Book Library - create book library, ebook, book collection </a>,

<a href="http://ordasoft.com/location-map.html">Book library book sowftware for Joomla</a></noscript>
<td>
<a href="<?php echo sefRelToAbs( $link1 ); ?>" target="_self">
<img src="<?php echo $imageURL; ?>" hspace="15" vspace="2" border="0" height="<?php echo $coversize; ?>" /></a>
</td>
<?php
} //End Show Image If
?>
<td valign="top">
<p><strong><?php
if ($showtitle == "1") {
echo $row->title;
} else {
print " ";
}
?></strong><br/>By <?php
if ($showauthor == "1") {
echo $row->authors;
} else {
print " ";
}
?><p><?php
//for 1.6
echo switchDescription ($text, $description);
// --
?></p>
<p><a class="readon" href="<?php echo sefRelToAbs( $link1 ); ?>" target="_self">Detaljnije...</a></p>
</td>
<?php
} else {
//Display Vertical
?>
<tr valign="top">
<td>
<a href="<?php echo sefRelToAbs( $link1 ); ?>" target="_self">
<?php if($showcover==1) { ?>
<img src="<?php echo $imageURL; ?>" hspace="2" vspace="2" border="0" height="<?php echo $coversize; ?>" /></a>
<?php } //End Show Image If?>
<?php
if ($showtitle == "1") {
echo $row->title;
} else {
echo " ";
}
?>

<?php
if ($showauthor == "1") {
echo "<br />".$row->authors;
} else {
echo " ";
}
?>
<br />
<p><?php echo switchDescription ($text, $description); //for 1.6 ?></p>
<p><a class="readon" href="<?php echo sefRelToAbs( $link1 ); ?>" target="_self">Detaljnije...</a></p>
</td>
</tr>
<tr> <td>  </td>
</tr>
<?php
} //End Display If
}
?>
<?php
if($displaytype==1) { // Display Horizontal
?>
</tr>
<?php
}
?>

</table>
<?php if($moduleclass_sfx!='') {?>
</div> <?php }?>

<?php
function switchDescription ($text, $description) {
// for 1.6
switch ($description) {
case 1:
$text = substr ($text, 0, 100); $text .= '...';
break;

case 2:
$text = substr ($text, 0, 500); $text .= '...';
break;

case 3:
break;

case 4:
$text = '';
break;
}
return $text;

}

//////




if ($strukupno > $trenutnastr && $trenutnastr <= 1){
echo ("Strana   ". $trenutnastr ."  od   {$strukupno}   <a href=\"?pgi={$naredna}\">SLEDECA-></a>   <a href=\"?pgi={$strukupno}\">POSLEDNJA</a>");
}

// ako nemamo dovoljno unosa u bazi da bi ih podelili na stranice, u paginaciji ćemo
//prikazati samo to da postoji jedna jedina strana, a možete jednostavno
//obrisati taj deo i ostaviti echo (""); da ne prikazujete ništa.

elseif ($trenutnastr == $strukupno && $strukupno == 1){
echo ("Strana   ". $trenutnastr ."  od   {$strukupno}   ");
}

// ako nismo ni na prvoj, a ni na poslednjoj strani prikazaćemo linkove
//i za prethodnu i za narednu stranu
elseif ($strukupno > $trenutnastr && $trenutnastr >= 1){
echo ("<a href=\"?pgi=1\">PRVA</a>   <a href=\"?pgi={$prethodna}\"><-PRETHODNA</a>  Strana   ". $trenutnastr ."  od   {$strukupno}   <a href=\"?pgi={$naredna}\">SLEDEĆA-></a>   <a href=\"?pgi={$strukupno}\">POSLEDNJA</a>");
}

// ako se nalazimo na poslednjoj strani, u paginaciji će biti prikazan samo
//link ka prethodnoj strani, jer naredna ne postoji
elseif ($strukupno == $trenutnastr){
echo ("<a href=\"?pgi=1\">PRVA</a>   <a href=\"?pgi={$prethodna}\"><-PRETHODNA</a>  Strana   ". $trenutnastr ."  od   {$strukupno}   ");
}

Ko je trenutno na forumu
 

Ukupno su 511 korisnika na forumu :: 5 registrovanih, 1 sakriven i 505 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., bigfoot, Mixelotti, sasa76, TBF1D