За последние 24 часа нас посетили 17587 программистов и 1723 робота. Сейчас ищут 939 программистов ...

ФИЛЬТРЫ ВЫВОДА

Тема в разделе "PHP и базы данных", создана пользователем GD26Rus, 14 апр 2016.

  1. GD26Rus

    GD26Rus Новичок

    С нами с:
    13 апр 2016
    Сообщения:
    30
    Симпатии:
    0
    Привет всем, народ, требуется помощь. я в СУБД новичок.

    Но надо сделать выборку по фильтру из базы данных.

    существует форма и обработчик. все на одной странице. обработчик очень корявый и выглядит как будто его писал школьник на первом уроке по программированию, но это было сделано буквально за пол часа. просто не знаю как сделать полностью рабочий вывод по фильтру. скину код всей страницы, а так же дам ссылку на нее. сайт корявый, не ругайтесь.

    PHP:
    1. <div class="search">
    2. <form action="?page=search" method="post" id="form">
    3. <select id="kyp" name="kyp">
    4. <option value="1">КУПИТЬ</option>
    5. <option value="2">СНЯТЬ</option></select>
    6. <select id="city" name="city">
    7. <option value="1">КВАРТИРУ</option>
    8. <option value="2">ДОМ</option></select>
    9. <select id="km" name="km">
    10. <option disable>КОЛИЧЕСТВО КОМНАТ</option>
    11. <?php
    12. for ($i=1; $i<=10; $i++) {
    13. echo "<option value='".$i."'>".$i."</option>";
    14. }
    15. ?>
    16. </select>
    17. <select id="tpobj" name="tpobj">
    18. <option disable>ТИП ОБЪЕКТА</option>
    19. <option value="1">ВТОРИЧКА</option>
    20. <option value="2">НОВОСТРОЙКА</option>
    21. </select>
    22. <select id="tphouse" name="tphouse">
    23. <option disable>ТИП ДОМА</option>
    24. <option value="1">КИРПИЧНЫЙ</option>
    25. <option value="2">ПАНЕЛЬНЫЙ</option>
    26. <option value="3">БЛОЧНЫЙ</option>
    27. <option value="4">МОНОЛИТНЫЙ</option>
    28. <option value="5">ДЕРЕВЯННЫЙ</option>
    29. </select>
    30. <select id="price" name="price">
    31. <option disable>ЦЕНА</option>
    32. <option value="1">500 000 - 1 000 000</option>
    33. <option value="2">1 000 000 - 1 500 000</option>
    34. <option value="3">1 500 000 - 2 000 000</option>
    35. <option value="4">2 000 000 - 2 500 000</option>
    36. <option value="5">2 500 000 - 3 000 000</option>
    37. <option value="6">3 000 000<</option>
    38. </select>
    39. <button>ПОИСК</button>
    40. </form>
    41. </div>
    42.  
    43. <div class="body">
    44. <div class="left">
    45. <div class="homes">
    46. <?php
    47. $db = "****************";
    48. $username = "**************";
    49. $password = "*********";
    50. mysql_connect($db, $username, $password);
    51. mysql_select_db("kmvned_db");
    52. if (!isset($_POST["kyp"])) {
    53. $query = mysql_query("SELECT * FROM `sale` ORDER BY `id` DESC");
    54. while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) {
    55. $id = $row["id"];
    56. $about = $row["about"];
    57. $type = $row["type"];
    58. $room = $row["room"];
    59. $obj = $row["object"];
    60. $type_house = $row["type_house"];
    61. $price = $row["price"];
    62. $img = $row["images"];
    63. echo '
    64. <div id="name1">'.$type.'</div>
    65. <img src="'.$img.'1.jpg">
    66. <div id="p">Количество комнат: '.$room.'.<br>Тип объекта: '.$obj.'.<br>Тип дома: '.$type_house.'<br>'.$about.'
    67. <div id="price">'.$price.' РУБ.</div>
    68. <a href="?page=home&id='.$id.'">ПОДРОБНЕЕ</a>
    69. </div>
    70. ';
    71. }
    72. } else {
    73. if ($_POST["kyp"] == "1") {
    74. $sale = "yes";
    75. } elseif ($_POST["kyp"] == "2") {
    76. $rate = "yes";
    77. }
    78. if ($_POST["city"] == "1") {
    79. $tp = "kv";
    80. } elseif ($_POST["city"] == "2") {
    81. $tp = "dm";
    82. }
    83. if ($_POST["km"] == "КОЛИЧЕСТВО КОМНАТ") {
    84. $km = "no";
    85. } elseif ($_POST["km"] == "1") {
    86. $km = 1;
    87. } elseif ($_POST["km"] == "2") {
    88. $km = 2;
    89. } elseif ($_POST["km"] == "3") {
    90. $km = 3;
    91. } elseif ($_POST["km"] == "4") {
    92. $km = 4;
    93. } elseif ($_POST["km"] == "5") {
    94. $km = 5;
    95. } elseif ($_POST["km"] == "6") {
    96. $km = 6;
    97. } elseif ($_POST["km"] == "7") {
    98. $km = 7;
    99. } elseif ($_POST["km"] == "8") {
    100. $km = 8;
    101. } elseif ($_POST["km"] == "9") {
    102. $km = 9;
    103. } elseif ($_POST["km"] == "10") {
    104. $km = 10;
    105. }
    106. if ($_POST["tpobj"] == "ТИП ОБЪЕКТА") {
    107. $to = "no";
    108. } elseif ($_POST["tpobj"] == "1") {
    109. $to = "new";
    110. } elseif ($_POST["tpobj"] == "2") {
    111. $to = "old";
    112. }
    113. if ($_POST["tphouse"] == "ТИП ДОМА") {
    114. $td = "no";
    115. } elseif ($_POST["tphouse"] == "1") {
    116. $td = "1";
    117. } elseif ($_POST["tphouse"] == "2") {
    118. $td = "2";
    119. } elseif ($_POST["tphouse"] == "3") {
    120. $td = "3";
    121. } elseif ($_POST["tphouse"] == "4") {
    122. $td = "4";
    123. } elseif ($_POST["tphouse"] == "5") {
    124. $td = "5";
    125. }
    126. if ($_POST["price"] == "ЦЕНА") {
    127. $pr = "no";
    128. } elseif ($_POST["price"] == "1") {
    129. $pr = "1000000";
    130. } elseif ($_POST["price"] == "2") {
    131. $pr = "1500000";
    132. } elseif ($_POST["price"] == "3") {
    133. $pr = "2000000";
    134. } elseif ($_POST["price"] == "4") {
    135. $pr = "2500000";
    136. } elseif ($_POST["price"] == "5") {
    137. $pr = "3000000";
    138. } elseif ($_POST["price"] == "6") {
    139. $pr = "10000000";
    140. }
    141. if ($sale == "yes") {
    142. if ($td == "no" || $km == "no" || $to == "no" || $pr == "no") {
    143. echo "Укажите все критерии";
    144. } else {
    145. if ($tp == "kv") {
    146. $tp = "квартира";
    147. }
    148. if ($tp == "dm") {
    149. $tp = "дом";
    150. }
    151. if ($to == "new") {
    152. $to = "новостройка";
    153. }
    154. if ($to == "old") {
    155. $to = "вторичка";
    156. }
    157. if ($td == "1") {
    158. $td = "кирпичный";
    159. }
    160. if ($td == "2") {
    161. $td = "панельный";
    162. }
    163. if ($td == "3") {
    164. $td = "блочный";
    165. }
    166. if ($td == "4") {
    167. $td = "монолитный";
    168. }
    169. if ($td == "5") {
    170. $td = "деревянный";
    171. }
    172.  
    173.  
    174.  
    175. $query = mysql_query("SELECT * FROM `sale` WHERE `type`='$tp' OR `type_house`='$td' OR `object`='$to' OR `price`<='$pr' ORDER BY `id` DESC");
    176. while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) {
    177. $id = $row["id"];
    178. $about = $row["about"];
    179. $type = $row["type"];
    180. $room = $row["room"];
    181. $obj = $row["object"];
    182. $type_house = $row["type_house"];
    183. $price = $row["price"];
    184. $img = $row["images"];
    185. echo '
    186. <div id="name1">'.$type.'</div>
    187. <img src="'.$img.'1.jpg">
    188. <div id="p">Количество комнат: '.$room.'.<br>Тип объекта: '.$obj.'.<br>Тип дома: '.$type_house.'<br>'.$about.'
    189. <div id="price">'.$price.' РУБ.</div>
    190. <a href="?page=home&id='.$id.'">ПОДРОБНЕЕ</a>
    191. </div>
    192. ';
    193. }
    194.  
    195.  
    196.  
    197. }
    198. }
    199. if ($rate == "yes") {
    200.  
    201. }
    202. }
    203. ?>
    204. </div>
    205. </div>
    206. </div>
    207. </div>
    и ссылка: http://kmvhome.com/?page=search
    надо сделать так, что все же можно было искать по одному из критериев, и чтоб оно искало.

    не знаю как сделать. просто не могу нормально додумать. вроде есть идеи но там столько говнокода будет. помогите этот оптимизировать по возможности, и сделать нормально рабочем.
    --- Добавлено ---
    если вдруг кому интересно, нашел вот такую функцию которая мне с этим очень помогла. переделать только под свои данные
    PHP:
    1.   function addWhere($where, $add, $and = true) {
    2.     if ($where) {
    3.       if ($and) $where .= " AND $add";
    4.       else $where .= " OR $add";
    5.     }
    6.     else $where = $add;
    7.     return $where;
    8.   }
    9.   if (!empty($_POST["filter"])) {
    10.     $where = "";
    11.     if ($_POST["price_start"]) $where = addWhere($where, "`price` >= '".htmlspecialchars($_POST["price_start"]))."'";
    12.     if ($_POST["price_end"]) $where = addWhere($where, "`price` <= '".htmlspecialchars($_POST["price_end"]))."'";
    13.     if ($_POST["manufacturers"]) $where = addWhere($where, "`manufacturer` IN (".htmlspecialchars(implode(",", $_POST["manufacturers"])).")");
    14.     if ($_POST["wifi"]) $where = addWhere($where, "`wifi` = '1'");
    15.     $sql = "SELECT * FROM `my_table`";
    16.     if ($where) $sql .= " WHERE $where";
    17.     echo $sql;
    18.   }
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    т.е.ни учиться, ни платить ты не собираешься?
     
  3. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    много воды и не понятно чего ты хочешь. нужно наоборот.
    точнее могут не только лишь все, но не каждый может это делать.