Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] dynamiczne sortowanie danych
Forum PHP.pl > Forum > Przedszkole
fuks0
edit: wow fajnie że mi wcięło cały temat :/



  1. $tabela .= "<th><a href='index.php?dzial=katalog&tytul=
  2. $tytul&imie=$imie&nazwisko=$nazwisko&rodzaj_ksiazki=$nazwa&cena_od=$cena_od&cena_do=$cena_do&sortuj_po=cena&sortuj_kierunek=asc&strona=$strona'> + </a><a href='index.php?dzial=katalog&tytul=
  3. $tytul&imie=$imie&nazwisko=$nazwisko&rodzaj_ksiazki=$nazwa&cena_od=$cena_od&cena_do=$cena_do&sortuj_po=cena&sortuj_kierunek=desc&strona=$strona'> - </a></th>";


Na podstawie tego hiperlinku jest generowane zapytanie, gdy numer strony jest równy 0 (oznacza pierwszą stronę) bądź pusty, to wszystko jest ok. Natomiast gdy numer jest inny to zapytanie nie zwraca żadnych wyników...

Poniżej kod:


  1. <?
  2.  
  3. class katalog {
  4. /**
  5. * Poł?czenie do bazy.
  6. *
  7. * @var object
  8. */
  9. private $_connection;
  10.  
  11. /**
  12. * Ile rekordów ma być wy?wietlanych na stronie.
  13. *
  14. * @var int
  15. */
  16. private $_rekordowNaStronie = 3;
  17.  
  18. /**
  19. * Aktualnie wybrana strona wyników wyszukiwania.
  20. *
  21. * @var int
  22. */
  23. private $_strona;
  24.  
  25. /**
  26. * Przechowuje zapytanie pobieraj?ce okre?lone dane bez klauzuli LIMIT (wszystkie rekordy).
  27. *
  28. * @var string
  29. */
  30. private $_zapytanieBezLimit;
  31.  
  32. public function __construct() {
  33. $link = mysql_connect(dbHost, dbLogin, dbPassword) or die("Nie udało się poł?czyć z baz? danych.");
  34. mysql_select_db(dbName, $link) or die("Nie udało się wybrać bazy danych.");
  35. mysql_query("SET NAMES latin2");
  36. $this->_connection = $link;
  37.  
  38. if(!empty($_GET['strona']))
  39. $this->_strona = (int)$_GET['strona'];
  40. else
  41. $this->_strona = 0;
  42. }
  43.  
  44. /**
  45. * Buduje SQL z zapytaniem do bazy. Uwzględnia wszystkie warunki oraz wybran? stronę.
  46. *
  47. * @return string
  48. */
  49. public function zbudujZapytanie() {
  50. $query = "SELECT k.tytul, a.nazwisko, r.nazwa, k.cena, k.id ";
  51.  
  52. $query=$query. " FROM ksiazki k, rodzaje_ksiazek r, autorzy a ";
  53. $query=$query. " WHERE k.id_autora=a.id AND k.id_rodzaju=r.id ";
  54.  
  55.  
  56. // dodawanie warunków z formularza wyszukiwania
  57. if(!empty($_GET['tytul']))
  58. $query .= "AND k.tytul LIKE '%$_GET[tytul]%' ";
  59. if(!empty($_GET['nazwisko']))
  60. $query .= "AND a.nazwisko LIKE '%$_GET[nazwisko]%' ";
  61. if(!empty($_GET['imie']))
  62. $query .= "AND a.imie LIKE '%$_GET[imie]%' ";
  63. if(!empty($_GET['rodzaj_ksiazki']))
  64. $query .= "AND r.nazwa = '$_GET[rodzaj_ksiazki]' ";
  65. if(!empty($_GET['cena_od'])) {
  66. $cena_od = (int)$_GET['cena_od'];
  67. $query .= "AND k.cena >= $cena_od ";
  68. }
  69. if(!empty($_GET['cena_do'])) {
  70. $cena_do = (int)$_GET['cena_do'];
  71. $query .= "AND k.cena <= $cena_do ";
  72. }
  73.  
  74. $this->_zapytanieBezLimit = $query;
  75.  
  76. // dodanie warunkow sortowania
  77. if(!empty($_GET['sortuj_po'])) {
  78. if($_GET['sortuj_po'] == 'tytul')
  79. $query .= " ORDER BY k.tytul";
  80. if($_GET['sortuj_po'] == 'nazwisko')
  81. $query .= " ORDER BY a.nazwisko";
  82. if($_GET['sortuj_po'] == 'cena')
  83. $query .= " ORDER BY k.cena";
  84. if($_GET['sortuj_po'] == 'nazwa')
  85. $query .= " ORDER BY r.nazwa";
  86. if(!empty($_GET['sortuj_kierunek'])) {
  87. if($_GET['sortuj_kierunek'] == 'desc')
  88. $query .= " DESC";
  89. if($_GET['sortuj_kierunek'] == 'asc')
  90. $query .= " ASC";
  91. }
  92. }
  93.  
  94. $query .= " LIMIT ".($this->_strona*$this->_rekordowNaStronie).", ".$this->_rekordowNaStronie;
  95.  
  96. return $query;
  97. }
  98.  
  99. /**
  100. * Zwraca HTML z linkami do wszystkich stron wyników. Zachowuje informacje o parametrach wyszukiwania.
  101. *
  102. * @return string
  103. */
  104. public function zwrocLinkiStron() {
  105. $result = mysql_query($this->_zapytanieBezLimit);
  106.  
  107. if($result) {
  108. $liczbaRekordow = mysql_num_rows($result);
  109. $liczbaStron = ceil($liczbaRekordow / $this->_rekordowNaStronie);
  110. $queryString = str_replace("&strona=".$_GET['strona'], '', $_SERVER['QUERY_STRING']);
  111. $html = '';
  112.  
  113. for($i=0; $i<$liczbaStron; $i++)
  114. $html .= "<a href='index.php?$queryString&strona=$i'>".($i+1)."</a>";
  115.  
  116. return $html;
  117. }
  118.  
  119. return '';
  120. }
  121.  
  122. /**
  123. * Zwraca tabelę HTML z danymi.
  124. *
  125. * @param string $query Zapytanie, które nazleży wykonać
  126. * @return string
  127. */
  128. public function zwrocTabele($query) {
  129. $result = mysql_query($query);
  130.  
  131. $tabela = '';
  132. $i = $this->_strona*$this->_rekordowNaStronie+1;
  133. while($row = mysql_fetch_array($result)) {
  134. if($i%2 == 0)
  135. $tabela .= "<tr class='kolorowy'>";
  136. else
  137. $tabela .= "<tr>";
  138.  
  139.  
  140.  
  141.  
  142.  
  143. $tabela .= "<td align='center'>$i</td>";
  144. $tabela .= "<td align='center'>".$row['tytul']."</td>";
  145. $tabela .= "<td align='center'>".$row['nazwisko']."</td>";
  146. $tabela .= "<td align='center'>".$row['nazwa']."</td>";
  147. $tabela .= "<td align='center'>".$row['cena']."</td>";
  148. $tabela .= "<td align='center'><a href='index.php?dzial=detale&id=".$row['id']."'>szczegóły</a></td>";
  149. $tabela .= "</tr>";
  150. $i++;
  151. }
  152.  
  153. $zapytanie .="<th><a href='index.php?dzial=katalog&tytul=$tytul&imie=$imie&nazwisko=$nazwisko&rodzaj_ksiazki=$nazwa&cena_od=$cena_od&cena_do=$cena_do&sortuj_po='";
  154. $zapytanie2 .="&sortuj_kierunek=";
  155. $zapytanie3 .="&strona=$strona>";
  156. $zapytanie4 .=" </a></th>";
  157. $tabela.="<tr class='kolorowy' style='border:0';>";
  158.  
  159. //echo $tabela;
  160. //$tabela .="<tr>";
  161. // $tabela .= "<td>";
  162. //$tabela .= $zapytanie."tytul".zapytanie2."asc".zapytanie3." + //".zapytanie4."</td>";
  163. //$tabela.="</tr>";
  164.  
  165.  
  166.  
  167.  
  168. $nazwisko=$_GET['strona'];
  169. $imie=$_GET['imie'];
  170. $tytul=$_GET['tytul'];
  171. $nazwa=$_GET['rodzaj_ksiazki'];
  172. $cena_od=$_GET['cena_od'];
  173. $cena_do=$_GET['cena_do'];
  174. $strona=$_GET['strona'];
  175.  
  176.  
  177.  
  178.  
  179. $tabela.="<th/>";
  180. $tabela .= "<th><a href='index.php?dzial=katalog&tytul=
  181. $tytul&imie=$imie&nazwisko=$nazwisko&rodzaj_ksiazki=$nazwa&cena_od=$cena_od&cena_do=$cena_do&sortuj_po=tytul&sortuj_kierunek=asc&strona=$strona'> + </a><a href='index.php?dzial=katalog&tytul=
  182. $tytul&imie=$imie&nazwisko=$nazwisko&rodzaj_ksiazki=$nazwa&cena_od=$cena_od&cena_do=$cena_do&sortuj_po=tytul&sortuj_kierunek=desc&strona=$strona'> - </a></th>";
  183.  
  184. $tabela .= "<th><a href='index.php?dzial=katalog&tytul=
  185. $tytul&imie=$imie&nazwisko=$nazwisko&rodzaj_ksiazki=$nazwa&cena_od=$cena_od&cena_do=$cena_do&sortuj_po=nazwisko&sortuj_kierunek=asc&strona=$strona'> + </a><a href='index.php?dzial=katalog&tytul=
  186. $tytul&imie=$imie&nazwisko=$nazwisko&rodzaj_ksiazki=$nazwa&cena_od=$cena_od&cena_do=$cena_do&sortuj_po=nazwisko&sortuj_kierunek=desc&strona=$strona'> - </a></th>";
  187.  
  188. $tabela .= "<th><a href='index.php?dzial=katalog&tytul=
  189. $tytul&imie=$imie&nazwisko=$nazwisko&rodzaj_ksiazki=$nazwa&cena_od=$cena_od&cena_do=$cena_do&sortuj_po=nazwa&sortuj_kierunek=asc&strona=$strona'> + </a><a href='index.php?dzial=katalog&tytul=
  190. $tytul&imie=$imie&nazwisko=$nazwisko&rodzaj_ksiazki=$nazwa&cena_od=$cena_od&cena_do=$cena_do&sortuj_po=nazwa&sortuj_kierunek=desc&strona=$strona'> - </a></th>";
  191.  
  192. $tabela .= "<th><a href='index.php?dzial=katalog&tytul=
  193. $tytul&imie=$imie&nazwisko=$nazwisko&rodzaj_ksiazki=$nazwa&cena_od=$cena_od&cena_do=$cena_do&sortuj_po=cena&sortuj_kierunek=asc&strona=$strona'> + </a><a href='index.php?dzial=katalog&tytul=
  194. $tytul&imie=$imie&nazwisko=$nazwisko&rodzaj_ksiazki=$nazwa&cena_od=$cena_od&cena_do=$cena_do&sortuj_po=cena&sortuj_kierunek=desc&strona=$strona'> - </a></th>";
  195.  
  196.  
  197.  
  198. $tabela.="</tr>";
  199.  
  200.  
  201.  
  202. return $tabela;
  203. }
  204. }
  205.  
  206.  
  207. ?>
  208.  
  209. <table class="tabela" cellspacing="0" style="width: 90%; margin: 10px;">
  210. <tr>
  211. <th>Lp</th>
  212. <th>Tytuł</th>
  213. <th>Autor</th>
  214. <th>Rodzaj</th>
  215. <th>Cena</th>
  216. <th> </th>
  217. </tr>
  218.  
  219.  
  220. <?
  221.  
  222. $katalog = new katalog();
  223. $query = $katalog->zbudujZapytanie();
  224. echo $katalog->zwrocTabele($query);
  225.  
  226. ?>
  227. <tfoot>
  228. <tr>
  229. <td colspan="6">
  230. <?
  231.  
  232. echo $katalog->zwrocLinkiStron();
  233.  
  234. ?>
  235.  
  236. </td>
  237. </tr>
  238. </tfoot>
  239. </table>


Dlaczego to nie działa, w jaki sposób to naprawić?
potreb
Zrób sobie printy i var dumpy zapytań i otrzymasz odpowiedź.
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.