Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Filtrowanie rekordów.
Forum PHP.pl > Forum > PHP
x2008x
Witam, staram się zrobić filtrowanie wyników z bazy. Spoko, udało się, ale jest problem z czytelnością kodu.
Ogólnie wygląda to tak:
-wyszukiwarka,
-kategorie i podkategorie,
-stronnicowanie,
-filtrowanie ogłoszeń(typ: sprzedaj, kup, itp.)

Teraz mam problem, jak patrzę na kod, to odechciewa mi się cokolwiek przy nim robić, a muszę dodać podkategorie podkategorii( kategoria -> podkategoria -> jeszcze jedna podkategoria ). Przy takim czymś, nazwijmy to "kodem" musiałbym dodać ok. 5 if'ów.

Jak widać korzystam ze smartów. Oto plik:
  1. <?php
  2.  
  3. require('./libs/Smarty.class.php');
  4. $smarty = new Smarty;
  5. require('./inc/config.php');
  6.  
  7. $pg = $_GET['pg'];
  8. $katg = $_GET['kat'];
  9. $pod = $_GET['pod'];
  10. $filter = $_GET['filter'];
  11. $str = $_GET['str'];
  12. $search = $_GET['search'];
  13. $sercz = $_POST['search'];
  14. $get_f = $_GET['fraza'];
  15.  
  16. if(!$search == 'go') {
  17. $kategoria = mysql_fetch_array(mysql_query("SELECT * FROM `kategories` WHERE `id`='$pg' LIMIT 1"));
  18. $podkategoria = mysql_fetch_array(mysql_query("SELECT * FROM `kategories` WHERE `id`='$pod' LIMIT 1"));
  19.  
  20. $zapytanie=mysql_query("SELECT * FROM kategories WHERE parent_id = $pg");
  21. while($b = mysql_fetch_array($zapytanie)) {
  22. $kategories[] = $b;
  23. }
  24. $smarty -> assign('kategories', $kategories);
  25.  
  26. }
  27.  
  28. if(!$str) {
  29. $str = 1;
  30. $strona = 0;
  31. } else {
  32. $strona = $str-1;
  33. }
  34. $ilosc_strona = 2;
  35. $start = $strona*$ilosc_strona;
  36. $koniec = $ilosc_strona;
  37.  
  38.  
  39. if ($search == 'go' OR $_GET['fraza']) {
  40. if(empty($_GET['fraza']) == TRUE) {
  41. $fraza = $sercz;
  42. } elseif(empty($_GET['fraza']) == FALSE) {
  43. $fraza = $_GET['fraza'];
  44. }
  45.  
  46. if($filter) {
  47. $SQL = mysql_query("SELECT count(*) FROM ogl WHERE tytul LIKE '%$fraza%' AND typ = '$filter' AND akt = 1;");
  48. list($ilosc) = mysql_fetch_row($SQL);
  49. $zap = mysql_query("SELECT * FROM ogl WHERE tytul LIKE '%$fraza%' AND `typ` = '$filter' AND akt = 1 ORDER BY `data` DESC LIMIT $start, $koniec;");
  50. } else {
  51. $SQL = mysql_query("SELECT count(*) FROM ogl WHERE tytul LIKE '%$fraza%' AND akt = 1;");
  52. list($ilosc) = mysql_fetch_row($SQL);
  53. $zap = mysql_query("SELECT * FROM ogl WHERE tytul LIKE '%$fraza%' AND akt = 1 ORDER BY `data` DESC LIMIT $start, $koniec;");
  54. }
  55.  
  56. $ilosc_stron = ceil($ilosc/$ilosc_strona);
  57. $tytul = 'Wyniki Wyszukiwania';
  58. } elseif(!$pod AND !$filter) {
  59. $tytul = $kategoria['name'];
  60. $SQL = mysql_query("SELECT COUNT(*) FROM ogl WHERE kat = $pg AND akt = 1");
  61. list($ilosc) = mysql_fetch_row($SQL);
  62. $zap = mysql_query("SELECT * FROM ogl WHERE kat = $pg AND akt = 1 ORDER BY `data` DESC LIMIT $start, $koniec");
  63. $ilosc_stron = ceil($ilosc/$ilosc_strona);
  64. } elseif (empty($pod) == FALSE AND !$filter) {
  65. $tytul = ''.$kategoria['name'].' > '.$podkategoria['name'].'';
  66. $SQL = mysql_query("SELECT COUNT(*) FROM ogl WHERE kat = $pg AND podkat = $pod AND akt = 1");
  67. list($ilosc) = mysql_fetch_row($SQL);
  68. $zap=mysql_query("SELECT * FROM ogl WHERE kat = $pg AND podkat = $pod AND akt = 1 ORDER BY `data` DESC LIMIT $start, $koniec");
  69. $ilosc_stron = ceil($ilosc/$ilosc_strona);
  70. } elseif (empty($filter) == FALSE AND empty($pod) == FALSE) {
  71. $tytul = ''.$kategoria['name'].' > '.$podkategoria['name'].'';
  72. $SQL = mysql_query("SELECT COUNT(*) FROM `ogl` WHERE `kat` = '$pg' AND `typ` = '$filter' AND `podkat` = '$pod' AND `akt` = '1'");
  73. list($ilosc) = mysql_fetch_row($SQL);
  74. $zap = mysql_query("SELECT * FROM `ogl` WHERE `kat` = '$pg' AND `typ` = '$filter' AND `podkat` = '$pod' AND `akt` = '1' ORDER BY `data` DESC LIMIT $start, $koniec");
  75. $ilosc_stron = ceil($ilosc/$ilosc_strona);
  76. } elseif (empty($filter) == FALSE) {
  77. $tytul = $kategoria['name'];
  78. $SQL = mysql_query("SELECT COUNT(*) FROM `ogl` WHERE `kat` = '$pg' AND `typ` = '$filter' AND `akt` = '1'");
  79. list($ilosc) = mysql_fetch_row($SQL);
  80. $zap = mysql_query("SELECT * FROM `ogl` WHERE `kat` = '$pg' AND `typ` = '$filter' AND `akt` = '1' ORDER BY `data` DESC LIMIT $start, $koniec");
  81. $ilosc_stron = ceil($ilosc/$ilosc_strona);
  82.  
  83. } if($ilosc == 0) {
  84. $smarty->assign('error','<div class="error">Brak pasujących ogłoszeń.</div>');
  85. }
  86.  
  87. $ile = mysql_num_rows($zap);
  88. for ( $i=0; $i<$ile; $i++ ) {
  89. $wiersz = mysql_fetch_array($zap);
  90. $end_time = $wiersz['data'] - time();
  91. $wiersz['czas'] = time_difference($end_time);
  92. $ogl[$i] = $wiersz;
  93.  
  94. }
  95. $smarty -> assign('ogl', $ogl);
  96. $smarty->assign('czas', $wiersz['czas']);
  97.  
  98.  
  99. $smarty->assign('ilosc_stron', $ilosc_stron);
  100. $smarty->assign('czas', $czas['data']);
  101. $smarty->assign('debug', '{debug: true}');
  102. $smarty->assign('tytul',$tytul);
  103. $smarty->assign('filter', $filter);
  104. $smarty->assign('pode', $pod);
  105. $smarty->assign('str', $str);
  106. $smarty->assign('pg',$pg);
  107. $smarty->assign('fraza',$fraza);
  108. $smarty->assign('search',$search);
  109. $smarty->assign('kate', $kategoria['name']);
  110. $smarty->assign('pod', $podkategoria['name']);
  111. $smarty->assign('kateid', $kategoria['id']);
  112. $smarty->assign('podid', $podkategoria['id']);
  113. $smarty->display('show.tpl');
  114. ?>
nospor
Wyszukiwarke robi sie mniej wiecej tak:
http://nospor.pl/wyszukiwarka-zapytanie-za...d-warunkow.html
gdzie na podstawie warunkow budujesz zapytanie i potem to jedno zapytanie wykonujesz - jest to zdecydowanie czytelniejsze i bardziej optymalne. Nie trzeba sie bawic w zadne zagniezdzane i kombinowane IFELSE
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.