2014-09-21 39 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成功响应表。