2014-09-21 3 views
0

Эй, ребята, я немного застрял в данный момент, в основном я пытаюсь выяснить, как я могу фильтровать свои SQL-запросы, но с небольшими проблемами понимаю, как это можно сделать.PHP: Фильтрация SQL-запроса с опциями выбора

В основном я перечисляю все «Делает» брендов, которые у меня есть на моем сайте, в форму. Я просто беру столбец из таблицы продуктов, содержащий каждый продукт.

Вот пример кода, это PDO и выбор MySQL:

<?php 
include('database.php'); 
try { 
    $results = $db->query("SELECT Make, Model, Colour, FuelType, Year, Mileage, Bodytype, Doors, Variant, EngineSize, Price, Transmission, PictureRefs, ServiceHistory, PreviousOwners, Options, FourWheelDrive FROM import ORDER BY Make ASC"); 
} catch (Exception $e) { 
    echo "Error."; 
    exit; 
} 

try { 
    $filterres = $db->query("SELECT DISTINCT Make FROM import ORDER BY Make ASC"); 
} catch (Exception $e) { 
    echo "Error."; 
    exit; 
} 
?> 

Я добавил DISTINCT к этому блоку кода, поскольку есть дубликат «Make-х» в столбце SQL.

Здесь представлена ​​форма, так как вы можете видеть, что я использую цикл while, чтобы отображать каждый make в таблице в свой собственный вариант.

<form> 
<select class="form-control select-box"> 
       <option value="make-any">Make (Any)</option> 
       <?php while($make = $filterres->fetch(PDO::FETCH_ASSOC)) 
       { 
       echo ' 
       <option value="">'.$make["Make"].'</option> 
       '; 
       } ?> 
</select> 
<button href="#" class="btn btn-block car-search-button btn-lg btn-success"><span class="glyphicon car-search-g glyphicon-search"></span> Search cars 
</button> 
</form> 

Я использую этот код для отображения строки SQL в перечисленных результатов:

<?php while($row = $results->fetch(PDO::FETCH_ASSOC)) 
     { 
     echo ' 
     <div class="listing-container"> 
      <a href="carpage.php"><h3 class="model-listing-title clearfix">'.$row["Make"].' '.$row["Model"].' '.$row["Variant"].'</h3></a> 
      <h3 class="price-listing">£'.number_format($row['Price']).'</h3> 
     </div> 
     <div class="listing-container-spec"> 
     <img src="'.(explode(',', $row["PictureRefs"])[0]).'" class="stock-img-finder"/> 
      <div class="ul-listing-container"> 
      <ul class="overwrite-btstrp-ul"> 
       <li class="diesel-svg list-svg">'.$row["FuelType"].'</li> 
       <li class="saloon-svg list-svg">'.$row["Bodytype"].'</li> 
       <li class="gear-svg list-svg">'.$row["Transmission"].'</li> 
       <li class="color-svg list-svg">'.$row["Colour"].'</li> 
      </ul> 
      </div> 
      <ul class="overwrite-btstrp-ul other-specs-ul h4-style"> 
      <li>Mileage: '.number_format($row["Mileage"]).'</li> 
      <li>Engine size: '.$row["EngineSize"].'cc</li> 
      </ul> 
      <button href="#" class="btn h4-style checked-btn hover-listing-btn"><span class="glyphicon glyphicon-ok"></span> History checked 
      </button> 
      <button href="#" class="btn h4-style more-details-btn hover-listing-btn tst-mre-btn"><span class="glyphicon glyphicon-list"></span> More details 
      </button> 
      <button href="#" class="btn h4-style test-drive-btn hover-listing-btn tst-mre-btn"><span class="test-drive-glyph"></span> Test drive 
      </button> 
      <h4 class="h4-style listing-photos-count"><span class="glyphicon glyphicon-camera"></span> 5 More photos</h4> 
     </div> 
      '; 
     } ?> 

Мой вопрос, как я могу использовать элемент выбора для фильтрации точный «Make», так, например, если строка SQL содержит тот же «Make», который выбрал пользователь, поэтому мне хотелось бы, чтобы вся строка отображалась в списке, а любой другой - не показывать.

Любые примеры кода, как я могу это достичь?

Благодаря

+0

Фильтр - это предложение WHERE, которое требует добавления в команду SQL. – Popnoodles

+0

Привет, спасибо за то, что вернулись ко мне. Я все еще не знаю, когда дело доходит до PHP, я взглянул на предложение WHERE, но я изо всех сил пытаюсь понять, как я могу его реализовать. –

ответ

3

Вы должны иметь что-то вроде:

$where = ""; 
if (!!$selectedMake) { 
    $stmt = $db->prepare("SELECT Make, Model, Colour, FuelType, Year, Mileage, Bodytype, Doors, Variant, EngineSize, Price, Transmission, PictureRefs, ServiceHistory, PreviousOwners, Options, FourWheelDrive FROM import ORDER BY Make ASC"); 
    $stmt->execute(); 
} else { 
    $stmt = $db->prepare("SELECT Make, Model, Colour, FuelType, Year, Mileage, Bodytype, Doors, Variant, EngineSize, Price, Transmission, PictureRefs, ServiceHistory, PreviousOwners, Options, FourWheelDrive FROM import where Make = ?"); 
    $stmt->execute(array($selectedMake)); 
} 

Обратите внимание, что order by не нужен в else блоке, так как у вас есть уникальная Make. Если ваш Make является текстовым, тогда вам может понадобиться '%?%' вместо ? в запросе.

EDIT: Если я хорошо понял, у вас все еще есть проблема, а именно, вам не хватает знаний, чтобы определить, что должно значить значение $selectedMake. Прежде всего, вы должны иметь имя для вашего выбора тега, так что вы должны иметь это:

<select class="form-control select-box" name="selected-make"> 

Таким образом, когда вы отправите форму, значение выбранного тега будет отправлен на сервер. Поэтому, если вы хотите передать значение при отправке формы, вы должны дать данному тегу имя.

Форма может быть получена или отправлена. Если это get, то переданное значение должно быть в get. Попробуйте это:

echo var_dump($_GET); 

Если это сообщение, переданное значение должно быть в сообщении. Попробуйте с:

echo var_dump($_POST); 

Наконец, вы можете инициализировать $selectedMake так:

$selectedMake = ""; 
if (isset($_GET["selected-make"])) { 
    $selectedMake = $_GET["selected-make"]; 
} else if (isset($_POST["selected-make"])) { 
    $selectedMake = $_POST["selected-make"]; 
} 
+0

Здравствуйте, большое вам спасибо за помощь, я просто немного смущен тем, как я могу сделать этот блок кода правильно с помощью кнопки в моей форме. Например, когда пользователь выбрал «Сделать» и нажал кнопку в форме, как я могу использовать код, который вы предоставили. Мне жаль, что у меня недостаток знаний. Я все еще нелюбив. –

+0

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

0

Есть много способов для достижения этой цели, но вы можете использовать Ajax запрос здесь. Отправьте запрос ajax на страницу запроса sql с выбранным параметром в качестве параметра post.

На странице запроса вы можете передать этот параметр post в предложение where SQL-запроса. Затем заполните таблицу с ответом на успех ajax.

Смежные вопросы