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: 3760
  • 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) :
[Link mogu videti samo ulogovani korisnici]

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3760
  • 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 [Link mogu videti samo ulogovani korisnici]

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 [Link mogu videti samo ulogovani korisnici] 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 936 korisnika na forumu :: 72 registrovanih, 6 sakrivenih i 858 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 20624 - dana 04 Apr 2026 04:18

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 015, 9k38, acatomic, amaterSRB, Asparagus, BB, bokicacar, bolenbgd, BOXRR, bozzo27, C-Gun, Colt D, Comyymoc, cyprus, debeli, dejan1972, Dobi, Doca, ElGenius, famoso, Futurama, g0xy, GH69, havoc995, howyesno, In_hero, Ir, ivan979, jalos, Jelly4183, JOntra, kapela, Kobrim, Kruger, Luka40, Marko43, Meklejn, Mercury, mikrimaus, milanpetkovicv, milenko crazy north, mushroom, Naturelo, oblivion, pacika, Panter, Parker, pceklic, PitterBg, plazma keks, Prašinar, prikolica, SamoGledam, Sharpshooter, Sioux7674, Smor, sokars, SOM, Srki98, Stoilkovic, suton, t.e.m.p.l.a.r., Trpe Grozni, vlajkox, Vojkan Petrovic, volimpivuvolimrakiju, vukajlo71, W123, wizzardone, YFSS33, zlatkoa987, zrno