Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [skrypt]Skrypt służący do paginacji stron
Forum PHP.pl > Inne > Oceny
snuffix
Witam , o to mój pierwszy skrypt do oceny na tym forum ( i w sumie pierwszy większy który dotychczas napisalem - php zajalem sie dopiero miesiąc temu ). Służy on do dzielenia , pobranych z bazy danych wyników na podstrony ( za operacje zwiazane z baza danych odpowiedzialna jest pierwsza klasa "Sql" do ktorej takze prosilbym o rady

Kilka moich uwag .
- Prosze wszystkie swoje zastrzeżenia zapisać niezależnie od tego jak błache lub jak ostre będą smile.gif .
- Komentarze sa po polsku gdyz bardzo sie spieszylem w napisaniu ich ; ) .
- Za literowki przepraszam ( patrz punkt wyzej ).
- W kilku miejscach miesza sie jezyk polski z jezykiem angielskim ( np zmienne sa po angielsku a niektore komunikaty po polsku ) . Tym takze zajme sie jak juz bede mogl
- Kod testowany przy pomocy apache dziala poprawnie .

To tyle slowem wstepu.

  1. <?php
  2.  
  3. abstract class Pagination
  4. {
  5. /** Zmienna zawierajaca wyniki zwrocone przez baze danych
  6. */
  7. var $results;
  8.  
  9. /** Zmienna zawierajaca wartosc okreslajaca limit wynikow na 1 stronie
  10. */
  11. var $limit;
  12.  
  13. /** Zmienna zawierajaca pelny adres strony www ktora ma zostac poddana dzialaniu poszczegolnych funkcji
  14. */
  15. var $www_name;
  16.  
  17. /** Zmienna zawierajaca wartosc okreslajaca ilosc podstron
  18. */
  19. var $pages;
  20.  
  21. /** Zmienna zawierajaca kopie polaczenia z baza danych
  22. */
  23. var $sql_connection;
  24.  
  25. /** Zmienna zawierajaca numer ostatniej podstrony
  26. */
  27. var $last_page;
  28.  
  29. /** Zmienna zawierajaca numer pierwszej podstrony
  30. */
  31. var $first_page;
  32.  
  33.  
  34.  
  35. /** Zmienna zawierajaca zapytanie ktore zostanie uzyte do wyswietlenia odp ilosci wynikow na strone( np wprowadzamy
  36. 'SELECT * from registered_users order by user_id' do tego zapytania zsostanie dodana odp linijka,
  37. */
  38. var $question_limit;
  39. /** Zmienna zawierajaca zapytanie ktore zostanie uzyte do wyliczenia wymaganej ilosci podstron np
  40. ' SELECT * from registered_users '
  41. */
  42. var $question_all;
  43.  
  44. /** Funkcja odpowiedzalna za pobranie odpowiednich parametrow i sprawdzenie ich wartosci
  45. * @parametr $data(Tablica zawierajaca kolejno ,
  46. * pelna nazwe strony ktora zostanie podzielona na podstrony,
  47. * zapytanie ktore zostanie uzyte do wyswietlenia odp ilosci wynikow na strone( np wprowadzamy
  48. 'SELECT * from registered_users order by user_id' do tego zapytania zostanie dodana odp linijka,
  49. * zapytanie ktore zostanie uzyte do wyliczenia wymaganej ilosci podstron np ' SELECT * from registered_users ',
  50. * limit wynikow na jednej podstronie
  51. * @parametr $sql_connection( Zmienna zawierajaca kopie polaczenia z baza danych)
  52. */
  53. public function create($data = '' , $sql_connection)
  54. {
  55. $this->www_name = $data[0];
  56. $this->question_limit = $data[1];
  57. $this->question_all = $data[2];
  58. $this->limit = $data[3];
  59. $this->sql_connection = $sql_connection;
  60. $sql_connection->disconnect();
  61. try
  62. {
  63. if(!isset($this->www_name) || empty($this->www_name))
  64. {
  65. throw new Exception('Nie podano wartosci zmiennej www_name');
  66. }
  67. if(!isset($this->question_limit) || empty($this->question_limit))
  68. {
  69. throw new Exception('Nie podano wartosci zmienniej question_all');
  70. }
  71. if(!isset($this->question_all) || empty($this->question_all))
  72. {
  73. throw new Exception('Nie podano wartosci zmienniej question_all');
  74. }
  75. if(!isset($this->limit) || empty($this->limit))
  76. {
  77. throw new Exception('Nie podano wartosc zmiennej limit');
  78. }
  79. if(!isset($this->sql_connection) || empty($this->sql_connection))
  80. {
  81. throw new Exception('Nie podano wartosci zmiennej sql_connection');
  82. }
  83. }
  84. catch (Exception $e)
  85. {
  86. echo $e->getMessage();
  87. }
  88.  
  89. $sql = $this->sql_connection;
  90. $sql->question($this->question_all);
  91. $this->results = $sql->num_rows();
  92.  
  93. /** Przypisanie odp wartosci do zmiennych pages i results
  94. */
  95. /** Jezeli ilosc wynikow na ostatniej stronie jest mniejsza niz wartosc zmiennej limit
  96. */
  97. if(($this->results)%($this->limit))
  98. {
  99. /** $last_page - zmienna okreslajaca ilosc wyniko na ostatniej stronie
  100. */
  101. $last_page = $this->results % $this->limit;
  102.  
  103. /** Obliczenie potrzebnej ilosc podstron
  104. * Przyklad
  105. * Ilosc wynikow = 23
  106. * Limit wynikow na stronie = 4
  107. * Ilosc wynikow na ostatniej stronie(obliczona wczesniej) = 3
  108. * ILOSC PODSTRON = ((23-3)/4)+1 = 6
  109. */
  110. $this->pages = ((($this->results-$last_page)/$this->limit)+1);
  111. }
  112. /** Jezeli nie jest mniejsza czyli jest rowna
  113. */
  114. else
  115. {
  116. $this->pages = $this->results / $this->limit;
  117. }
  118.  
  119. $this->last_page = $this->pages;
  120. $this->first_page = 1;
  121. }
  122.  
  123. abstract protected function make($fields='');
  124. }
  125.  
  126.  
  127. class NewsPagination extends Pagination
  128. {
  129. /** Funkcja odpowiedzalna za wyswietlenie wynikow i podzielelnie ich na podstrony
  130. * @parametr $fields jest odpowidzialny za zamiane domyslnych pol "field" z bazy danych podczas wyswietlania wynikow
  131. */
  132.  
  133. public function make($fields='')
  134. {
  135.  
  136. if(isset($_GET['page']))
  137. {
  138. $id = $_GET['page'];
  139. }
  140. else
  141. {
  142. $id = 1;
  143. }
  144.  
  145. /** Aktualizacja zapytania question_limit tak aby nadawalo sie do wyswietlania odp ilosc wynikow
  146. */
  147. $this->sql_connection->question($this->question_limit.' LIMIT '.(($id*$this->limit)-4).','.$this->limit.';');
  148.  
  149. /** Wyswietlenie wynikow na stronie
  150. */
  151. $this->sql_connection->write_news($fields,'news',$www_name);
  152.  
  153. /** Kod odpowiedzialny za stronicowanie wynikow
  154. */
  155.  
  156. /** Jezeli w adresie wartosc $_GET['page'] jest poza zakresem podstron ( np ktos ja tam wpisal ) to skrypt
  157. * nie wyswietla nic
  158. */
  159. if($id<1 || $id>$this->last_page){ exit; }
  160. echo '<div class="pagination">';
  161. echo '<a href="'.$www_name.'?page=1"> <<< </a>';
  162.  
  163. /** Jezeli jestesmy na pierwszej podstronie to link POPRZEDNIA przekieruje nas do tej podstrony
  164. */
  165. if($id==1)
  166. {
  167. echo '<a href="'.$www_name.'?page='.$id.'">POPRZEDNIA</a>';
  168. }
  169.  
  170. /** Jezeli nie to zostaniemy przekierowani do podstrony o numerze o 1 mniejszym
  171. */
  172. else
  173. {
  174. echo '<a href="'.$www_name.'?page='.($id-1).'">POPRZEDNIA</a>';
  175. }
  176. echo '&nbsp&nbsp&nbsp&nbsp';
  177. /** Jezeli jestesmy na ktorejs z podstron o numerach [1,6] to wykonaj
  178. */
  179. if($id<=6)
  180. {
  181. /** Jezeli jest mniej niz 10 podstron wynikow to wykonaj
  182. */
  183. if($this->last_page<10)
  184. {
  185. /** Petla wypisujaca podstrony z przedzialu [1,strona ostatnia]
  186. */
  187. for($i=1;$i<=$this->last_page;$i++)
  188. {
  189. echo '&nbsp&nbsp';
  190.  
  191. /** Numer strony na ktorej jestesmy zostanie dodatkowo odsuniety spacjami od sasiadujacych numerow
  192. */
  193. if($id==$i)
  194. {
  195. echo '&nbsp&nbsp';
  196. echo '<a href="'.$www_name.'?page='.$i.'" style="color: red;">['.$i.']</a>';
  197. echo '&nbsp&nbsp';
  198. }
  199. /** Reszta linkow zostanie zapisana normalnie
  200. */
  201. else
  202. {
  203. echo '<a href="'.$www_name.'?page='.$i.'">['.$i.']</a>';
  204. }
  205. }
  206. }
  207. /** Jezeli jest wiecej niz 10 podstron wynikow
  208. */
  209. else
  210. {
  211. /** Petla wypisujaca podstrony z przedzialu [1,10]
  212. */
  213. for($i=1;$i<=10;$i++)
  214. {
  215. /** Dzialamy analogicznie jak w czesci powyzej
  216. */
  217. echo '&nbsp&nbsp';
  218. if($id==$i)
  219. {
  220. echo '&nbsp&nbsp';
  221. echo '<a href="'.$www_name.'?page='.$i.'" style="color: red;">['.$i.']</a>';
  222. echo '&nbsp&nbsp';
  223. }
  224. else
  225. {
  226. echo '<a href="'.$www_name.'?page='.$i.'">['.$i.']</a>';
  227. }
  228. }
  229. }
  230. }
  231. /** Jezeli jestesmy na podstronie oddalonej od strony ostatniej o 5 wynikow lub wiecej to wykonaj
  232. */
  233. else if($id >= $this->last_page-5)
  234. {
  235. /** Petla dzieki ktorej nie wyswietla sie numery podstron wiekszych od numeru ostatniej podstrony
  236. */
  237. for($i=($id-5);$i<=($this->www_name);$i++)
  238. {
  239. /** Dzialamy analogicznie jak w czesci powyzej
  240. */
  241. echo '&nbsp&nbsp';
  242. if($id == $i)
  243. {
  244. echo '&nbsp&nbsp';
  245. echo '<a href="'.$www_name.'?page='.$i.'" style="color: red; ">['.$i.']</a>';
  246. echo '&nbsp&nbsp';
  247. }
  248. else
  249. {
  250. echo '<a href="'.$www_name.'?page='.$i.'">['.$i.']</a>';
  251. }
  252. }
  253. }
  254. /** Jezeli jestesmy na stronie z przedzialu [7,ostatnia_strona-6]
  255. */
  256. else
  257. {
  258. for($i=($id-5);$i<=($id+5);$i++)
  259. {
  260.  
  261. echo '&nbsp&nbsp';
  262. if($id == $i)
  263. {
  264. echo '&nbsp&nbsp';
  265. echo '<a href="'.$www_name.'?page='.$i.'" style="color: red; ">['.$i.']</a>';
  266. echo '&nbsp&nbsp';
  267. }
  268. else
  269. {
  270. echo '<a href="'.$www_name.'?page='.$i.'">['.$i.']</a>';
  271. }
  272. }
  273. }
  274. echo '&nbsp&nbsp&nbsp&nbsp';
  275. if($id == $this->last_page)
  276. {
  277.  
  278. echo '<a href="'.$www_name.'?page='.$this->last_page.'">NASTEPNA</a>';
  279. }
  280. else
  281. {
  282.  
  283. echo '<a href="'.$www_name.'?page='.($id+1).'">NASTEPNA</a>';
  284. }
  285. echo '<a href="'.$www_name.'?page='.$this->last_page.'"> >>> </a>';
  286. echo '</div>';
  287.  
  288. }
  289.  
  290. }
  291.  
  292.  
  293. ?>


A tutaj wrzucam kod klasy Sql ( w pierwszym poscie nie bylo miejsca )
  1.  
  2.  
  3. class Sql
  4. {
  5. /** ZMIENNA ZAWIERAJACA NAZWE HOSTA
  6. */
  7.  
  8. var $db_host;
  9.  
  10. /** ZMIENNA ZAWIERAJACA LOGIN UZYTKOWNIKA DO BAZY DANYCH
  11. */
  12. var $db_login;
  13.  
  14. /** ZMIENNA ZAWIERAJACA HASLO UZYTKOWNIKA DO BAZY DANYCH
  15. */
  16. var $db_password;
  17.  
  18. /** ZMIENNA ZAWIERAJACA NAZWE WYBRANEJ BAZY DANYCH
  19. */
  20. var $db_name;
  21.  
  22. /** ZMIENNA ZAWIERAJACA REZULTAT Z PROBY POLACZENIA Z BAZA DANYCH
  23. */
  24. var $db_connection;
  25.  
  26. /** ZMIENNA ZAWIERAJACA REZULTAT WYSLANIA ZAPYTANIA DO BAZY DANYCH W POSTACI TABLICY
  27. */
  28. var $db_result = array();
  29.  
  30. /** ZMIENNA ZAWIERAJACA TABLICE REKORDOW
  31. */
  32. var $db_records = array();
  33.  
  34. var $db_lastid;
  35.  
  36. /** ZMIENNA ZAWIERAJACA ZAPYTANIE WYSLANIE DO BAZY DANYCH
  37. */
  38. var $db_question;
  39.  
  40. /** FUNKCJA ODPOWIADAJACA ZA WYPISANIE KOMUNIKATU O BLEDZIE
  41. */
  42. var $db_data = '';
  43. function error()
  44. {
  45. echo '<b>'.mysql_errno().'</b>'.' : '.mysql_error().'<br />';
  46. }
  47.  
  48. /** FUNKCJA ODPOWIEDZIALNA ZA NAWIAZANIE POLACZENIA Z BAZA DANYCH
  49. * @param $db_name - zmienna przechowujaca nazwe bazy danych
  50. */
  51. function connect($db_data)
  52. {
  53. $this->db_data = $db_data;
  54. $this->db_host = $db_data[0];
  55. $this->db_login = $db_data[1];
  56. $this->db_password = $db_data[2];
  57. $this->db_name = $db_data[3];
  58. try
  59. {
  60. if(!isset($this->db_name) || empty($this->db_name))
  61. {
  62. throw new Exception('Wartosc zmiennej db_name jest nieprawidlowa!');
  63. }
  64. if(!isset($this->db_host) || empty($this->db_host))
  65. {
  66. throw new Exception('Wartosc zmiennej db_host jest nieprawidlowa!');
  67. }
  68. if(!isset($this->db_login) || empty($this->db_login))
  69. {
  70. throw new Exception('Wartosc zmiennej db_login jest nieprawidlowa!');
  71. }
  72. if(!isset($this->db_password) || empty($this->db_password))
  73. {
  74. throw new Exception('Wartosc zmiennej db_password jest nieprawidlowa!');
  75. }
  76. }
  77. catch(Exception $e)
  78. {
  79. echo '<br/ >Problem : '.$e->getmessage().'<br />';
  80. return false;
  81. }
  82.  
  83. $this->db_connection = new mysqli($this->db_host,$this->db_login,$this->db_password);
  84. $connection = $this->db_connection;
  85.  
  86. if(isset($connection) && !empty($connection))
  87. {
  88. $connection->select_db($this->db_name);
  89. return true;
  90. }
  91. else
  92. {
  93. $this->error();
  94. return false;
  95. }
  96. }
  97.  
  98. /** FUNKCJA ODPOWIEDZIALNA ZA WYSLANIE ZAPYTANIA DO BAZY DANYCH
  99. * @param $db_question - zmienna przechowujaca zapytanie do bazy danych
  100. */
  101. function question($db_question)
  102. {
  103. if(isset($db_question) && !empty($db_question))
  104. {
  105. $this->db_question = $db_question;
  106. if(isset($this->db_connection) && !empty($this->db_connection))
  107. {
  108. $connection = $this->db_connection;
  109. $this->db_result = $connection->query($db_question);
  110.  
  111. if(isset($this->db_result) && !empty($this->db_result))
  112. {
  113. return true;
  114. }
  115. else
  116. {
  117. $this->error();
  118. return false;
  119. }
  120.  
  121. }
  122. else
  123. {
  124. $this->error();
  125. return false;
  126. }
  127. }
  128. else
  129. {
  130. echo 'Wartosc zmiennej db_question jest niepoprawna !';
  131. return false;
  132. }
  133. }
  134.  
  135. /** FUNKCJA ODPOWIEDZIALNA ZA PRZYPISANIE WYNIKOW DO ODP ZMIENNEJ (OTRZYMANYCH W WYNIKU ZAPYTANIA DO ODP ZMIENNEJ)
  136. */
  137. function fetch()
  138. {
  139.  
  140. if(isset($this->db_result) && !empty($this->db_result))
  141. {
  142. $record = $this->db_result->fetch_array();
  143. if(isset($record) && !empty ($record) && is_array($record))
  144. {
  145. $this->db_records = $record;
  146. return $record;
  147. }
  148. else
  149. {
  150. $this->error();
  151. return false;
  152. }
  153. }
  154. else
  155. {
  156. return false;
  157. }
  158.  
  159. }
  160.  
  161. /** FUNKCJA ODPOWIADAJACA ZA PODANIE ILOSCI "num_rows"
  162. */
  163. function num_rows()
  164. {
  165. return $this->db_result->num_rows;
  166. }
  167.  
  168. /** FUNKCJA ODPOWIADAJACA ZA WYPISANIE WYNIKOW Z BAZY DANYCH NA EKRANIE
  169. * @param $fields - zmienna przechowujaca tablice nazw pol ktorych chcemy uzyc jako alternatywe dla pol
  170. * typu "field" z bazy danych mysql
  171. * @param $table - zmienna przechowujaca nazwe columny
  172. */
  173. function write($fields = '',$table='')
  174. {
  175.  
  176. $sql = new Sql();
  177. $sql->connect($this->db_data);
  178. $sql->question('SHOW COLUMNS from '.$table);
  179. $amount_of_fields = count($fields);
  180.  
  181. if(isset($fields) && !empty($fields))
  182. {
  183. for( $n = 0 ; $n < $amount_of_fields ; $n++)
  184. {
  185. $field[$n] = $sql->fetch();
  186. }
  187. while($row = $this->fetch())
  188. {
  189. $column = 0;
  190. echo '<div style="margin:0; padding:0; width: 550px; border: 1px solid #0e44f6;">';
  191. for($i = 0; $i<$amount_of_fields; $i++)
  192. {
  193. if($column == 0)
  194. {
  195. echo '<div style="margin:0; padding:0; width: 550px; background-color:#93ffc1">';
  196. echo $fields[$i].' : '.$row[$field[$i]['Field']].'<br />';
  197. echo '</div>';
  198. $column++;
  199.  
  200. }
  201. else if($column == 1)
  202. {
  203. echo '<div style="margin:0; padding:0; width: 550px; background-color:#93acff">';
  204. echo $fields[$i].' : '.$row[$field[$i]['Field']].'<br />';
  205. echo '</div>';
  206. $column--;
  207. }
  208. }
  209. echo '</div><br />';
  210. }
  211. }
  212. else
  213. {
  214. for( $i = 0 ; $i < ($sql->num_rows()+1) ; $i++)
  215. {
  216. $field[$i] = $sql->fetch();
  217. }
  218. while($row = $this->fetch())
  219. {
  220. for($i = 0; $i < $sql->num_rows() ; $i++)
  221. {
  222. echo $field[$i]['Field'].' : '.$row[$field[$i]['Field']].'<br />';
  223. }
  224. }
  225. }
  226. unset($row);
  227. unset($fields);
  228. unset($field);
  229. }
  230.  
  231.  
  232.  
  233. /** FUNKCJA ODPOWIADAJACA ZA ZMIANE BAZY DANYCH
  234. * @param $db_name - zmienna przechowujaca nazwe bazy danych do ktorej chcemy sie przelaczyc
  235. */
  236. function change_database($db_name)
  237. {
  238. $this->db_name = $db_name;
  239. $this->disconnect();
  240. $this->connect($db_name);
  241. }
  242.  
  243. /** FUNKCJA ODPOWIADAJACA ZA ROZLACZENIE SIE Z BAZA DANYCH
  244. */
  245. function disconnect()
  246. {
  247. if(isset($db_result) && !empty($db_result))
  248. {
  249. $db_result->free();
  250. unset($db_host);
  251. unset($db_login);
  252. unset($db_password);
  253. unset($db_database);
  254. unset($db_connection);
  255. unset($db_result);
  256. unset($db_records);
  257. unset($db_lastid);
  258. unset($db_question);
  259. unset($db_data);
  260. }
  261. }
  262. }
Spawnm
sql w paginacji ? A co jak chcę paginację dla plików/obrazków/tablicy z 1 pliku ?
Dodatkowo echo w klasie i narzucenie stylu paginacji ... słabe tongue.gif
Dodatkowo co to za var? Mamy php5 !
piotrooo89
jak już wspomniał ~Spawnm, słabo. obiekt maja zwracać wartości a nie wyświetlać wyniki to po pierwsze. kolejno słabo przenośne to jest, bo masz tylko do sql (to o czym również wspomniał ~Spawnm), ogólnie zbiór funkcji (kodu - nie wiem jak nazwać) zapakowany w classę. mało ma to wspólnego z OOP.
snuffix
W "PHP i MYSQL Tworzenie stron www Vademecum profesjonalisty...." bodajże to var było ,więc to chyba z tego mi się wzięło winksmiley.jpg . W takim razie po prostu skupie się na tym aby kod ten miał szerszy zakres zastosowań ( narazie tylko kod ten porzebny był do wyświetlania wyników z bazy danych winksmiley.jpg ) . A za OOP się wezme jak zdobęde większą wiedze na ten temat ( trzeba bedzie poszukac jakiejs dobrej ksiazkowej pozycji winksmiley.jpg ) .
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.