2014-09-21 64 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; 
} 
?> 

,因爲有重複的「製作的」在SQL專欄中,我已經添加到DISTINCT代碼塊。

這裏是表格,你可以看到我正在使用一個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> 
      '; 
     } ?> 

我的問題是如何使用選擇元件過濾精確「製作」,因此,例如,如果SQL行包含與用戶選擇的'Make'相同的'Make',那麼我希望整行顯示在列表中,而其他任何行都不顯示。

任何代碼示例,以我如何能夠實現這一目標?

感謝

+0

該過濾器是一個'WHERE'子句,需要添加到SQL命令中。 – Popnoodles 2014-09-21 02:26:35

+0

嗨,謝謝你回到我身邊當談到PHP時,我仍然很不情願,我看了一下WHERE子句,但是我很努力地理解我如何實現它。 – 2014-09-21 02:33:00

回答

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是文本的,那麼在查詢中您可能需要'%?%'而不是?

編輯: 如果我理解得很好,你仍然有一個問題,即你缺乏知識來確定$selectedMake應該是什麼值。首先,你應該有你的選擇標籤的名字,所以你應該有這樣的:

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

當您提交表單這樣,你的選擇標籤的值將被髮送到服務器。所以如果你想在表單提交時傳遞一個值,你應該給給定的標籤一個名字。

表單可以獲取或發佈。如果它得到,那麼傳遞的值應該得到。試試看:

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

你好,非常感謝你的幫助,我只是有點困惑,我可以如何使我的表單中的按鈕正常工作的代碼塊功能。例如,當用戶選擇「製作」並按下按鈕時,我如何使用您提供的代碼。我很抱歉缺乏知識我仍然不知所措 – 2014-09-21 03:02:10

+0

@DaleDoback,沒有問題,沒有人是作爲編程專家出生的,我們都必須改進並通過進化步驟。看到我編輯的帖子,這可能會有所幫助。 – 2014-09-21 03:41:02

0

有很多方法可以做到這一點,但你可以在這裏使用Ajax請求。 發送ajax發佈請求到您的sql查詢頁面,並將所選選項作爲發佈參數。

在查詢頁面上,可以將該post參數傳遞給sql查詢的where子句。 然後填寫Ajax成功響應表。