Jak zrobi膰 uniwersalne porcjowanie wynik贸w na stronie,珁 nie pokazywa艂a si臋逝俛 zawarto艣膰簔y趎ych2


[MySQL][PHP] Jak zrobi膰 uniwersalne porcjowanie wynik贸w na stronie, aby nie pokazywa艂a si臋 ca艂a zawarto艣膰 bazy danych?

0x01 graphic

Chcesz wyniki zapytania do bazy danych podzieli膰 na porcje, aby u偶ytkownik m贸g艂 przegl膮da膰 kilka mniejszych stron z wynikami zamiast jednej ogromnej. Chcesz decydowa膰 ile odpowiedzi znajdzie si臋 na ka偶dej ze stron i jak d艂ugi b臋dzie pasek nawigacyjny.

Zobacz jak opisywany skrypt dzia艂a w praktyce: porcjowanie

0x01 graphic

Porcjowanie wynik贸w zapytania to podstawowa czynno艣膰 podczas pracy z bazami danych, gdy wyniki przekraczaj膮 30 rekord贸w. Niekt贸re bazy danych licz膮 nawet kilkaset tysi臋cy wpis贸w i pokazanie ich wszystkich na jednej stronie WWW nie jest mo偶liwe.

Zamiast pokazywa膰 po kilkaset wynik贸w, mo偶na je 艂atwo porcjowa膰. Nie jest wa偶ne co porcjujesz - mog膮 to by膰 wpisy na forum, dedykacje w ksi臋gach go艣ci, informacje o ksi膮偶kach lub zawarto艣膰 katalogu produkt贸w w jakim艣 sklepie.

Opisany poni偶ej skrypt nie tylko 艣wietnie porcjuje dowolne zapytania do baz danych, ale jest niesamowicie elastyczny. Mo偶esz ustawia膰 ilo艣膰 danych przypadaj膮cych na jedn膮 stron臋, przekazywa膰 dodatkowe zmienne podczas przechodzenia pomi臋dzy stronami czy ustala膰 jak szeroki (np. od 1 do 10) b臋dzie pasek s艂u偶膮cy do poruszania si臋 pomi臋dzy stronami z wynikami.

Dodatkowo opr贸cz klikania na poszczeg贸lne strony mo偶esz wykorzysta膰 pola "nast臋pna" i "poprzednia", kt贸re automatycznie przenosz膮 o jedn膮 stron臋 do przodu lub do ty艂u. Zobacz jak napisa膰 uniwersalny skrypt do porcjowania wynik贸w:

<?

function pasek($l_odp,$l_odp_nastronie,$l_odp_napasku,$skrypt,$a) {

$l_odp_podz = intval($l_odp / $l_odp_nastronie);

$l_odp_podz_mod = $l_odp % $l_odp_nastronie;

if ($l_odp_podz_mod>0) $l_odp_podz++;

if ($a<0) $a=0;

if ($a>=$l_odp_podz) $a=$l_odp_podz-1;

$start = $a-1;

if ($a>0) {$pop="<a href=\"".$skrypt."a=$start\">&lt;&lt;&lt;

poprzednia</a> - &nbsp;";}

else {$pop = "<font color=gray>&lt;&lt;&lt; poprzednia </font> - &nbsp;";}

if ($a<$l_odp_napasku) {$koniec = $l_odp_napasku*2+1;}

else {$koniec = $a+$l_odp_napasku+1;}

if ($a<=$koniec-$l_odp_napasku) {$star=$a-$l_odp_napasku;}

if ($a>=$l_odp_podz-$l_odp_napasku) {$star=$l_odp_podz-$l_odp_napasku*2-1;}

if ($koniec>$l_odp_podz) $koniec = $l_odp_podz;

if ($star<0) $star=0;

for ($i=$star; $i<$koniec; $i++) {

if ($i <> $a) { $pasek .= "<a href=\"".$skrypt."a=$i\">";}

else { $pasek .= "<font color=red><b>"; }

if ($l_odp_podz<>1) {$pomocniczy = $i+1;}

if ($i<>$a) { $pasek .= "$pomocniczy</a> &nbsp;"; }

else {$pasek .= "$pomocniczy</b></font> &nbsp;";}

}

$dalej = $a+1;

if ($a<$l_odp_podz-1)

{$nas="- <a href=\"".$skrypt."a=$dalej\">nast臋pna &gt;&gt;&gt; </a>";}

else { $nas = "- <font color=gray>nast臋pna &gt;&gt;&gt; </font>";}

if ($pomocniczy>0) {$br= "<br> $pop $pasek $nas"; }

echo "<center> znalezionych: <b>$l_odp</b> na <b>$l_odp_podz</b>

stronach $br</center>";

}

$l_odp_nastronie=10;

$l_odp_napasku=5;

$skrypt="index.php?";

// po艂膮czenie z baz膮

$baza = mysql_connect("localhost", "admin", "admin");

mysql_select_db("baza1",$baza);

// ustalenie ilo艣ci wszystkich rekord贸w spe艂niaj膮cych warunek

$wynik = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM ludzie"));

$l_odp = $wynik[0];

// pobranie porcji informacji

$start=$a*$l_odp_nastronie;

$wynik = mysql_query("SELECT * FROM ludzie LIMIT

$start,$l_odp_nastronie",$baza);

mysql_close($baza);

// pokazanie paska nawigacyjnego

pasek($l_odp,$l_odp_nastronie,$l_odp_napasku,$skrypt,$a);

// wy艣wietlenie wynik贸w z bazy danych

$wierszy = mysql_num_rows($wynik);

$pol = mysql_num_fields($wynik);

for ($i=0;$i<$wierszy;$i++) {

$wiersz = mysql_fetch_row($wynik);

for ($j=0;$j<$pol;$j++) echo $wiersz[$j]." ";

echo "<br>";

}

?>

Dzia艂ania funkcji pasek() opisywa膰 nie b臋d臋, poniewa偶 algorytm jest dosy膰 z艂o偶ony i zale偶y od wielu warunk贸w. Generalnie wszystko jest czyst膮 matematyk膮. Funkcja rozbija liczb臋 wszystkich odpowiedzi na poszczeg贸lne sk艂adowe, a wi臋c liczb臋 stron, aktualn膮 pozycj臋 czy ilo艣膰 cyfr w menu. Obliczenia s膮 uzale偶nione od wielu czynnik贸w i warunk贸w pocz膮tkowych.

Wa偶ne aby do funkcji pasek() przekaza膰 pi臋膰 zmiennych:

$l_odp - liczba wszystkich rekord贸w w bazie (mo偶liwych odpowiedzi)

$l_odp_nastronie - liczba rekord贸w na jednej stronie

$l_odp_napasku - liczba cyfr na pasku - wystarczy poda膰 tylko po艂ow臋 planowanej liczby zwi臋kszonej o jeden, np. 5 to w rzeczywisto艣ci 11 cyfr (1,2,3,4,5),6,(7,8,9,10,11). Okre艣la ona ilo艣膰 cyfr po prawej i lewej stronie wzgl臋dem 艣rodka.

$skrypt - nazwa skryptu bez parametr贸w np. index.php? lub z dodatkowymi parametrami index.php?x=123&c=sort&

$a - zmienna okre艣laj膮ca numer strony z wynikami - to w艂a艣nie ona okre艣la, kt贸ra porcja wynik贸w b臋dzie pokazana

Warto poeksperymentowa膰 z r贸偶nymi opcjami aby dostowa膰 skrypt do w艂asnych potrzeb. Opcje s膮 bardzo elastyczne i z powodzeniem mo偶na skrypt zastosowa膰 do dowolnych projekt贸w.

Funkcja pasek() tak na prawd臋 nie porcjuje wynik贸w... Tworzy ona jedynie pasek do nawigacji pomi臋dzy stronami z wynikami i ustala zmienn膮 $a. W艂a艣ciwe porcjowanie zachodzi na etapie zadawania pytania SQL do bazy danych.

Polecenie LIMIT wywo艂ane z dwoma parametrami pokazuje wyniki od numeru rekordu z pierwszego parametru. Drugi parametr okre艣la ile tych wynik贸w chcemy pobra膰. Poniewa偶 ilo艣膰 rekord贸w na stronie jest sta艂a, wystarczy zmodyfikowa膰 tylko pierwszy parametr aby uzyska膰 np. pi膮t膮 dziesi膮tk臋 wynik贸w.

Liczb臋 odpowiedzi przypadaj膮cych na stron臋 podajemy pod funkcj膮 pasek(), ustalamy tam r贸wnie偶 liczb臋 cyfr na pasku i skrypt (oraz ewentualne parametry jakie ma przekazywa膰). Brakuje jeszcze ilo艣ci wszystkich rekord贸w. Pierwsze pytanie SQL pobiera brakuj膮c膮 ilo艣膰 rekord贸w (COUNT(*)). Je偶eli liczba rekord贸w w tabeli nie zmienia si臋, mo偶esz t膮 warto艣膰 przypisa膰 na sta艂e i usun膮膰 dwie linijki skryptu.

Gdy masz ju偶 wszystkie zmienne mo偶na zada膰 w艂a艣ciwe pytanie. Nast臋pnie wy艣wietlany jest pasek nawigacyjny i wybrana porcja wynik贸w. Kolejno艣膰 mo偶e by膰 dowolna - najpierw porcja wynik贸w, a na dole pasek nawigacyjny.

Jak widzisz, bez problemu mo偶na w ten spos贸b przegl膮da膰 bazy danych o tysi膮cach czy setkach tysi臋cy rekord贸w. Wszystko odbywa si臋 szybko i bardzo wygodnie dla u偶ytkownika.

Pytanie SQL nie musi zwraca膰 wszystkich rekord贸w - mo偶e zawiera膰 dodatkowe warunki np. sortowanie i wyszukiwanie rekord贸w. W tym celu musisz zmodyfikowa膰 je w dw贸ch miejscach w skrypcie.



Wyszukiwarka

Podobne podstrony:
Jak zrobi膰 uniwersalne porcjowanie wynik贸w na stronie,?y nie pokazywa艂a si臋?艂a zawarto艣膰?zy?nych
Jak zrobi膰 uniwersalne porcjowanie wynik贸w na stronie, aby nie pokazywa艂a si臋 ca艂a zawarto艣膰 tablicy
Jak zrobi膰 przekierowanie z jednej strony na drug膮, PHP Skrypty
Jak zrobi膰 prawdziwy barszcz czerwony na zakwasie
JAK ZROBI膯 Z PAPIERU OZDOBN膭 RAMK臉 NA ZDJ臉CIA NA DZIE艃 MATKI(1)
Jak zwi臋kszy膰 ruch na stronie
jak zrobi膰 dridy na maszyn臋 do ls 08 ls 09 i ls2011
Jak zrobi膰 torebk臋 na prezent
Jak zrobi膰 na klawiaturze taki znak jak serce lub inne fajne rzeczy Zapytaj onet
120 porad Jak zwi臋kszy膰 ruch na stronie WWW
Jak zwi臋kszy膰 ruch na stronie www
Jak zrobi膰 stron臋 dost臋pn膮 na has艂o tylko dla wybranych u偶ytkownik贸w, PHP Skrypty
Jak zwi臋kszy膰 ruch na stronie WWW 120 praktycznych wskaz贸wek (2)
Jak chroni膰 adres e-mail na stronie przed spamem stosuj膮c przekierowanie, PHP Skrypty
Jak zrobi膰 艣nie偶ynk臋 na choink臋
Jak zrobi膰 kartk臋 na urodziny, R臋kodzie艂o, Kartki
jak zrobic strona dostepna na haslo tylko dla wybranych zytkownikow z wykorzystaniem cookies
Jak zrobi膰 sowy z filcu na choink臋
Jak zrobi膰 etui na okulary

wi臋cej podobnych podstron