CategoriesPHP

Једноставна PHP/PDO/MySQL пагинација – UPDATE

Од мог претходног чланка о пагинацији је прошло готово 7 година, неке ствари су се у међувремену промениле, и стога сам одлучио да освежим стари чланак са новим информацијама.

На пример, у време писања чланка (2011), још увек није објављена PHP 5.5 верзија (тек 2013), у којој је mysql_connect функција проглашена застарелом (deprecated) а у верзији 7.0 и избачена. Сада користимо PDO, који је укратко објашњено: database access layer, који, између осталог, подржава и MySQL. Уколико не желите да истражујете превише, битно је да знате да је објектно оријентисан, садржи
prepared statements које значајно олакшавају рад са базама, сигурнији је и подржава различите типове база података.

Дакле, прво остварујемо конекцију користећи PDO:

$konekcija = new PDO('mysql:host='.$hostname.';dbname='.$database.';', $user, $password);

Затим идемо на пребројавање свих ставки у табели „pagi“ како би добили коначан број на основу ког ћемо касније креирати пагинацију:

$query = $konekcija->prepare("SELECT id FROM pagi");

Овде у променљиву смештамо информацију о томе колико ће се ставки приказивати на једној страни:

$prikaz = 4;

Ако једноставно поделимо укупан број свих ставки у табели и број ставки који желимо да прикажемо на једној страни, добијамо број страна:

$strukupno = ceil($brojunosa/$prikaz);

Напомена: користимо функцију ceil која ће, уколико је резултат дељења децимални број, заокружити тај резултат на први већи број. Дакле, уколико је број уноса у табели 30, а одредили смо да се по страни приказује 7 ставки, резултат ће бити 4.28, и ceil функција ће то заокружити на 5 – дакле имаћемо 5 страна. Пета страна ће приказивати само 2 ставке.

Затим, користећи GET методу, у URL-у добијамо информацију на којој се тренутно страни налазимо, преко променљиве page:

$trenutnastr = isset($_GET['page']) ? $_GET['page'] : '';

Наравно, можемо користити и само $trenutnastr = $_GET[‘page’]; али ако је приказивање грешака укључено, добијаћемо „Notice: Undefined variable…“ грешку, а ово је један од начина да то заобиђемо. Наравно, увек можете и дефинисати празну променљиву како избегли ту грешку: $trenutnastr = “;.

Даље, постављамо ограничења која ће спречити да се манипулацијом променљиве page позове непостојећа страна (на пример страна -2 или страна број 8 а имамо само 5 страна).

if ($trenutnastr < 1){
    $trenutnastr = 1;
}
elseif ($trenutnastr > $strukupno) {
    $trenutnastr = $strukupno;
}

И најзад, следи позивање ставки из базе, можете приметити да користимо bindValue

$query2 = $konekcija->prepare("SELECT * FROM pagi LIMIT :pocetak, :prikaz");
$query2->bindValue(':pocetak', (int) $pocetak, PDO::PARAM_INT);
$query2->bindValue(':prikaz', (int) $prikaz, PDO::PARAM_INT);
$query2->execute();

Даље, остаје вам само да прикажете податке и пагинацију, као што можете да видите у примеру који се може преузети испод. Читајте и коментаре у коду, где сам укључио још нека објашњења.

НАПОМЕНА: Ово је јако поједностављен пример пагинације који може послужити како би схватили основе функционисања исте, а то му је и сврха. Због могућих проблема са сигурношћу, компатибилношћу итд. не саветујем употребу истог у пројектима, нити је томе намењен.

Величина: ~ 4 Kb, .zip фајл
Садржи пример скрипте (морате унети своје податке за повезивање са базом), као и пример табеле коју можете импортовати у своју базу како би је користили са овим примером пагинације

Ево и неколико примера/ресурса за даље читање, уколико желите да сазнате више о PDO и пагинацији:

2 коментара на “Једноставна PHP/PDO/MySQL пагинација – UPDATE”

Veruj mi, nema boljeg načina da osvežiš pamćenje od novog projekta (malog za početak) i obilne upotrebe Google i StackOverflow 😉

Što se tiče facelifta, hvala, išao sam na to da bude što jednostavnije 🙂

Оставите одговор

Ваша адреса е-поште неће бити објављена. Неопходна поља су означена *