嘿,伙计们,我现在有点卡住了,基本上我正在努力找出如何过滤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添加到该代码块中,因为SQL列中存在重复的"Make’s"。
这是表单,正如您所看到的,我正在使用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>
';
} ?>
我的问题是,我如何使用select元素来筛选确切的"Make",例如,如果SQL行包含与用户所选相同的"Make",那么我希望整行显示在列表中,而不显示任何其他Make。
有什么代码示例可以说明我如何做到这一点?
感谢
您需要类似以下内容:
$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));
}
请注意,else
块中不需要order by
,因为您有一个唯一的Make
。如果您的Make
是文本的,那么在查询中可能需要'%?%'
而不是?
。
编辑:如果我理解得很好,你仍然有一个问题,即你缺乏确定$selectedMake
的值的知识。首先,你应该为你的选择标签有一个名称,所以你应该有这个:
<select class="form-control select-box" name="selected-make">
这样,当您提交表单时,所选标记的值将被发送到服务器。因此,如果您想在表单提交时传递一个值,您应该为给定的标记指定一个名称。
可以获取或张贴表格。如果是get,那么传递的值应该在get中。试用:
echo var_dump($_GET);
如果是post,则传递的值应该在post中。试用:
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"];
}
有很多方法可以实现这一点,但您可以在这里使用ajax请求。将ajax post请求发送到您的sql查询页面,并将所选选项作为post参数。
在查询页面上,您可以将post参数传递到sql查询的where子句中。然后填写ajax成功响应表。