[:sr]Ако програмирате у PHP, готово сигурно ћете једном доћи у ситуацију у којој је потребно велики број уноса из базе приказати на више страница.Ово је можда и најједноставнији начин да ово обавите.Обратите пажњу и на коментаре у самом коду, могу вам пружити корисне информације.
Не заборавите да направите повезивање са базом пре него што почнете.
Прво „бројимо“ број уноса који постоје у бази, а затим одређујемо и колико ће се уноса приказивати на једној страни.Затим једноставним дељењем добијамо број страница.
//ukupan broj unosa u bazi//
$brojunosa = mysql_num_rows(mysql_query("SELECT * FROM table"));
//broj unosa koji ce se prikazivati po (jednoj) strani//
$prikaz = 5;
//deljenjem ukupnog broja unosa i broja unosa koji će se prikazivati
// na jednoj strani izračunato je koliko će strana postojati
$strukupno = ceil($brojunosa/$prikaz);
Ceil функција ће добијени резултат дељења заокружити на први већи број, тако да ћемо у случају да је број уноса 11 и када га поделимо са 5 добити 3 стране за приказ (уместо 2.2 које је немогуће приказати).Идемо даље…
Као што можете видети испод, захтеве за одређеном страницом ћемо добијати путем GET методе.Затим контролишемо добијену вредност, да се не би десиле грешке при наредним корацима: ако је захтевана страна неким случајем не псотоји (на пример постоји 10 страна, а захтевана је страна број 12), скрипти се говори да се прикаже последња страница.
$trenutnastr = $_GET['pagе'];
if ($trenutnastr < 1) { $trenutnastr = 1; } elseif ($trenutnastr > $strukupno) {
$trenutnastr = $lastpage;
}
У ко́ду испод можемо видети MySQL операцију LIMIT помоћу које ограничавамо приказ уноса.Како посетилац бира страну, ми динамички одређујемо вредност ($poc) од које ће почети приказивање следеће групе уноса.Пример: LIMIT 10, 3 ће нам приказати ставке 11, 12, 13.Стринг $prikaz смо већ дефинисали на почетку.
$poc = ($trenutnastr - 1) * $prikaz;
//-1 je neophodno da ne bi prikazali pogrešne unose na trenutnoj strani
//npr. bez ovoga bi na strani 4 prikazali unose za stranu 5
$result = mysql_query("SELECT * FROM tabela LIMIT $poc, $prikaz");
Испод израчунавамо претходну и следећу страну једноставним одузимањем или додавањем 1 на тренутну страну:
$prethodna = $trenutnastr - 1;
$naredna = $trenutnastr + 1;
Следи приказ саме пагинације, у којој морамо обратити пажнју на неколико елемената, у зависности од тога на којој се страни тренутно налазимо:
// ako smo trenutno na prvoj strani, u paginaciji ne prikazujemo
// link ka prethodnoj strani, jer ona ne postoji
if ($strukupno > $trenutnastr && $trenutnastr <= 1){
echo ("Strana &nbsp ". $trenutnastr ."&nbsp od &nbsp {$strukupno} &nbsp <a href="?pgi={$naredna}">SLEDECA-></a> &nbsp <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 &nbsp ". $trenutnastr ."&nbsp od &nbsp {$strukupno} &nbsp ");
}
// 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> &nbsp <a href="?pgi={$prethodna}"><-PRETHODNA</a>&nbsp Strana &nbsp ". $trenutnastr ."&nbsp od &nbsp {$strukupno} &nbsp <a href="?pgi={$naredna}">SLEDEĆA-></a> &nbsp <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> &nbsp <a href="?pgi={$prethodna}"><-PRETHODNA</a>&nbsp Strana &nbsp ". $trenutnastr ."&nbsp od &nbsp {$strukupno} &nbsp ");
}
Скрипту на делу можете видети на ОВОЈ страни.
Да би скинули цео пример, кликните ОВДЕ (величина: ~ 2 Kb, компресија: .ZIP).
Овај пример пагинације је могуће унапредити на пуно начина, уз мало вежбе можете додати drop box из ког посетилац може бирти страну, box у који посетилац може укуцати број стране који жели да посети, бројеве страна на које посетиоци могу да кликну…Могућности је доста.[:en]Ако програмирате у PHP, готово сигурно ћете једном доћи у ситуацију у којој је потребно велики број уноса из базе приказати на више страница.Ово је можда и најједноставнији начин да ово обавите.Обратите пажњу и на коментаре у самом коду, могу вам пружити корисне информације.
Не заборавите да направите повезивање са базом пре него што почнете.
Прво „бројимо“ број уноса који постоје у бази, а затим одређујемо и колико ће се уноса приказивати на једној страни.Затим једноставним дељењем добијамо број страница.
//ukupan broj unosa u bazi//
$brojunosa = mysql_num_rows(mysql_query("SELECT * FROM table"));
//broj unosa koji ce se prikazivati po (jednoj) strani//
$prikaz = 5;
//deljenjem ukupnog broja unosa i broja unosa koji će se prikazivati
// na jednoj strani izračunato je koliko će strana postojati
$strukupno = ceil($brojunosa/$prikaz);
Ceil функција ће добијени резултат дељења заокружити на први већи број, тако да ћемо у случају да је број уноса 11 и када га поделимо са 5 добити 3 стране за приказ (уместо 2.2 које је немогуће приказати).Идемо даље…
Као што можете видети испод, захтеве за одређеном страницом ћемо добијати путем GET методе.Затим контролишемо добијену вредност, да се не би десиле грешке при наредним корацима: ако је захтевана страна неким случајем не псотоји (на пример постоји 10 страна, а захтевана је страна број 12), скрипти се говори да се прикаже последња страница.
$trenutnastr = $_GET['pagе'];
if ($trenutnastr < 1) {
$trenutnastr = 1;
}
elseif ($trenutnastr > $strukupno) {
$trenutnastr = $lastpage;
}
У ко́ду испод можемо видети MySQL операцију LIMIT помоћу које ограничавамо приказ уноса.Како посетилац бира страну, ми динамички одређујемо вредност ($poc) од које ће почети приказивање следеће групе уноса.Пример: LIMIT 10, 3 ће нам приказати ставке 11, 12, 13.Стринг $prikaz смо већ дефинисали на почетку.
$poc = ($trenutnastr - 1) * $prikaz;
//-1 je neophodno da ne bi prikazali pogrešne unose na trenutnoj strani
//npr. bez ovoga bi na strani 4 prikazali unose za stranu 5
$result = mysql_query("SELECT * FROM tabela LIMIT $poc, $prikaz");
Испод израчунавамо претходну и следећу страну једноставним одузимањем или додавањем 1 на тренутну страну:
$prethodna = $trenutnastr - 1;
$naredna = $trenutnastr + 1;
Следи приказ саме пагинације, у којој морамо обратити пажнју на неколико елемената, у зависности од тога на којој се страни тренутно налазимо:
// ako smo trenutno na prvoj strani, u paginaciji ne prikazujemo
// link ka prethodnoj strani, jer ona ne postoji
if ($strukupno > $trenutnastr && $trenutnastr <= 1){
echo ("Strana   ". $trenutnastr ."  od   {$strukupno}   SLEDECA->   POSLEDNJA");
}
// 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 ("PRVA   <-PRETHODNA  Strana   ". $trenutnastr ."  od   {$strukupno}   SLEDEĆA->   POSLEDNJA");
}
// ako se nalazimo na poslednjoj strani, u paginaciji će biti prikazan samo
//link ka prethodnoj strani, jer naredna ne postoji
elseif ($strukupno == $trenutnastr){
echo ("PRVA   <-PRETHODNA  Strana   ". $trenutnastr ."  od   {$strukupno}   ");
}
Скрипту на делу можете видети на ОВОЈ страни.
Да би скинули цео пример, кликните ОВДЕ (величина: ~ 2 Kb, компресија: .ZIP).
Овај пример пагианције је могуће унапредити на пуно начина, уз мало вежбе можете додати drop box из ког посетилац може бирти страну, box у који посетилац може укуцати број стране који жели да посети, бројеве страна на које посетиоци могу да кликну…Могућности је доста.
[:]
Izbacuje gresku ako postoji samo jedna strana pa sam umesto ovog koda:
$trenutnastr = $_GET[‘page’];
if ($trenutnastr $strukupno) {
$trenutnastr = $lastpage;
}
ubacio ovaj:
if(isset ($_GET[‘strana’])){
$trenutnastr = $_GET[‘strana’];
}
else{
$trenutnastr = 1;
}
if ($trenutnastr > $strukupno) {
$trenutnastr = $strukupno;
}
Pozdrav!
Pozdrav, pokušao sam da nađem grešku, ali je ne uspevam da je reprodukujem, ma šta radio. Svejedno, ako neko bude imao problem, nek pogleda tvoje rešenje 🙂
Imam isti problem.
možeš li mi poslati cijeli kod ili preciznije reći što se u Džonijevoj scripti tačno mijenja.
Pozdrav Andrija.
Džoni scripta je sjajna.
Da li bi htio da mi pomogneš, meni treba dopuna za ovu skriptu sa pretraživanjem ključne riječi, još kada bi htio da kažeš strukturu baze i gdje da je smjestim.
Ja koristim WAMP a on se instalacijom setuje c:/wamp/www
Mnogo bi mi pomogao.
U svakom slučaju hvala.
Pozdrav Andrija, možeš li da mi objasniš na šat si mislio kad kažeš pretraživanje ključne reči? Pretpostavljam da imaš pretragu i da želiš da dodaš da rezultati budu prikazani sa paginacijom?
Struktura baze, to je obična tabela sa 2 kolone: „id“ i „text“, smeštaš je gde i sve ostale baze (nisam baš siguran za WAMP, nisam odavno radio sa njim). Inače, evo baze: http://ge.tt/8yxsZRU/v/0?c
Hvala Džoni i pozdrav od Andrije
Nemam pretraživač. Ova skripta lista bazu od početka do kraja a ja bih želio da se unosi ključna riječ, pretraži po njoj i listaju podaci vezani za ključnu riječ odnosno od nje na dalje.
Hvala.
U osnovi, to se može lako postići, tako što prilikom selektovanja podataka iz baze dodaš: WHERE ime_kolone LIKE termin_za_pretragu .
Da pojasnim kako primeniti u praksi, ovom mom primeru datom u članku treba dodati if/else petlju kao u primeru i izmeniti 2 upita iz baze, evo koda: http://pastebin.com/7PhtBeYi
Džoni pozdrav od Andrije
I da ti umjesto nove godine čestitam Božićne blage dane.
Dobio sam od tebe dva programa prvi za paginaciju i drugi za pretraživanje i listanje po ključnoj riječi. Ja pokušavam da ih povežem u jednu cjelinu ali ne uspijevam. Ne znam koliko je korektno da te zamolim da to povežeš u jednu cjelinu jer si mi i onako dosta pomogao. Ja ipak nemam dovoljno iskustva i znanja za to.
U svakom slučaju hvala za sve što sam dobio od tebe.
Pozdrav i takođe srećni protekli i predstojeći praznici. U osnovi ovaj kod što sam ti dao je trebalo sjediniti sa ovim koji sam dao u članku, evo ovako: http://pastebin.com/WihyGuLW . Dakle, ostaje ti samo da napraviš formu sa poljem i submit dugmetom gde bi neko uneo termin za pretragu.
Džoni pozdrav od Andrije.
Konačno sam uspio da riješim svoj problem uz tvoje sugestije i Mladenovu ispraku.
Cod je sjajan upravo zato što je jednostavan, Naravno, uvijek se može po nešto novo dodati.
Još jednom hvala.
možeš li mi pomoći: kako da spojim dvije tabele u istoj bazi MSQL i može li se uvesti exelova tabela u NSQL
Unos podataka u MySQL
može li mi ko pomoći
baza se zove: SVE a tabela PROBA
ima 2 text polja: zbirka i autor
ja koristim WAMP
a evo coda
<?php
header('Content-Type: text/html; charset=UTF-8');
putenv("TZ=Europe/Belgrade");
$host="localhost"; // Lokacija baze
$user="root"; // username
$password=""; // lozinka
$baza="sve"; // ime baze
mysql_connect($host,$user,$password); // Konekcija na bazu
mysql_select_db($baza);
mysql_query('INSERT [INTO] proba [(zbirka, autor)] VALUES (Petar Milic, Negotin)')
$sql = "insert into proba (zbirka, autor) values (NULL, 'Petar Milic','Negotin')";
if (mysql_query($sql)){
echo "Uspesno je pohranjeno";
}else{
echo "Nastala je greska pri unosu“;
}
?>
zašto ovo ne radi