2017-03-29 48 views
-2

我需要帮助。我知道我可以在PHP中使用“if ... elseif”,但问题是当前的情况已经存在于一个很长的“elseif”中,所以我不希望它通过在里面创建另一个“if ...”来嵌套它。如何执行第二个MySQL条件如果第一个失败(PHP/MySQLi)

我有我的搜索表单(请参阅下图)和我的mysqli声明,只适用于一侧(价格)。 我希望能够:当用户选择“Coach”之类的“类别”,并输入价格(从&到)之一时,搜索必须按预期正常工作。 如果用户只输入“价格来源”,则声明按输入的金额工作,如果他输入“价格给”,则声明也对输入的金额有效。

我试图使用许多操作符(OR/AND ...),但仍然没有达到我想要的。

elseif ($category=="coach"){ 
echo "3 !!!!!!!" ."<br>"; 
$result = $connection->query("select * 
          from tblcoach 
          where price>='$pricefrom' 
          and price<='$priceto'"); 
} 

下面是我的sql语句,只有当我 ,我想

工作image of web form

+0

我想你将不得不在动态变量中构建WHERE子句。显示上面显示的代码 – RiggsFolly

+0

这是代码:elseif($ category ==“asia”) $ result = $ connection-> query(“select * from tblasia where price> ='$ pricefrom'and price <= '$ priceto'“); elseif($ category ==“australia”) $ result = $ connection-> query(“select * from tblaustralia where price> ='$ pricefrom'and price <='$ priceto'”); elseif($ category ==“coach”){ echo“3 !!!!!!!” “
”; $ result = $ connection-> query(“select * from tblcoach where price> ='$ pricefrom'and price <='$ priceto' UNION select * from tblcoach where price <='$ priceto'or price> = '$包含pricefrom'“); –

+0

你可以阅读代码**在评论**我不能。使用该问题下的[edit](http://stackoverflow.com/posts/43093173/edit)链接,以便我们可以阅读它 – RiggsFolly

回答

0

一种常见的做法是一种“或输入为空”的条款添加到您的WHERE条款。从逻辑上讲它可能是这个样子:

select * 
from tblcoach 
where (price >= ? or ? is null) 
    and (price <= ? or ? is null) 

那么你还是“从价”值和第二两个参数的“价格”值的前两个参数的绑定。

提示:这是开始使用查询参数和准备语句的好时机。它会使这个和其他事情更容易。您可以对您当前的潜在SQL注入代码做同样的事情,可能与空字符串或默认值比较,而不是null。但这个想法是一样的。如果存在的话,逻辑本质上是使用该值进行比较,如果它不存在,则不进行有意义的比较。

+0

感谢David。我写了这个($ result = $ connection-> query(“select * from tblcoach where price(='$ pricefrom'或'$ pricefrom'为空) 和(price <='$ priceto'或'$ priceto'为null)“);)结果是:它只适用于”Price to“。如果我输入“价格来源”,屏幕上什么都没有。我不是为什么! –

+0

@ J.Doe:“屏幕上没有任何东西”是否意味着一个完全空白的页面?听起来像有一个PHP错误。检查PHP日志,打开错误报告等。另外,由于您仍在使用字符串连接/插值来构建SQL查询,因此还需要检查执行时的* actual *查询在运行时的状态。变量名称告诉我们什么变量包含什么。 – David

+0

抱歉不明确。不,如果我输入“价格来源”,我没有从查询语句中得到任何结果。如果我在“price to”输入一个数字,我只有确切的结果。这不是一个空白页面,但我没有得到任何结果。顺便说一句,他们的方式我添加的参数是正确的? –

相关问题