我在产品搜索页面添加了一个排序功能。用户可以选择按价格,升序或降序以及产品名称,升序或降序进行排序。默认值是按PRoduct ID排序。
首先,我检查一下' sortBy'未设置,如果不是我使用ProductID的默认SQL查询排序。其次,我检查一下' $ orderBy'进入GET的变量是NameA2Z'或者' NameZ2A',如果是,我使用三元运算符来相应地分配ASC或DESC。
以下是问题所在,我在下面做同样的事情'否则'声明,只有我检查' $ orderBy是否是' PriceH2L'或者' PriceL2H'但无论我在查询字符串中传递给它,它都永远不会到达。
似乎elseif($_GET["sortOrder"] == "NameA2Z" || "NameZ2A")
总是评估为TRUE,无论如何。
$searchTerm = "";
$orderBy = "";
$searchSQL = "";
$searchTerm ="";
$searchTerm = $_GET["searchItem"];
if(!isset($_GET['sortOrder'])){
$searchSQL = 'SELECT * FROM Products WHERE ProductName LIKE "%' . $searchTerm . '%" ORDER BY ProductID';
}
elseif($_GET["sortOrder"] == "NameA2Z" || "NameZ2A"){
$orderBy = ($_GET["sortOrder"] == "NameZ2A" ? "DESC" : "ASC");
$searchSQL = 'SELECT * FROM Products WHERE ProductName LIKE "%' . $searchTerm . '%" ORDER BY ProductName '. $orderBy . ' ' ;
}
else{
$orderBy = ($_GET["sortOrder"] == "PriceH2L" ? "DESC" : "ASC");
$searchSQL = 'SELECT * FROM Products WHERE ProductName LIKE "%' . $searchTerm . '%" ORDER BY ProductPrice ' . $orderBy . ' ';
echo ' Sort from second else is: ' . $orderBy;
}
以下是HTML以防:
<select id="searchSort" searchterm='<?php echo $searchTerm ?>' >
<option value="husker">Sort results by</option>
<option value="PriceH2L">Price - Lowest to highest</option>
<option value="PriceL2H">Price - Highest to lowest</option>
<option value="NameA2Z">Name - A to Z</option>
<option value="NameZ2A">Name = Z to A</option>
</select>
答案 0 :(得分:0)
请注意elseif
中的条件:
$_GET["sortOrder"] == "NameA2Z" || "NameZ2A"
这是:$_GET["sortOrder"]
等于"NameA2Z"
,还是字符串"NameZ2A"
是真的?
字符串"NameZ2A"
将始终为true。您可能想要这样做:
$_GET["sortOrder"] == "NameA2Z" || $_GET["sortOrder"] == "NameZ2A"