【发布时间】:2012-02-06 06:07:33
【问题描述】:
我开发了一个包含多个字段的数据库——大约 65 个字段。我希望为我的用户提供多个搜索条件,即通过在下拉菜单中选择各种字段名称。我无法通过使用简单的 IF-ELSEIF-ELSE 语句来执行它。它只给出第一个 IF 语句的结果,而忽略其余的。
下面是html页面:
<form name="frm" action="search_plants.php" method="get">
<table>
<tr>
<td width="155" height="24">Select Scientific Name:</td>
<td width="275">
<select name="spnm" size="1">
<option value="0"> All</option>
<option value="Abrus precatorius"> Abrus precatorius</option>
<option value="Abutilon indicum"> Abutilon indicum</option>
<option value="Abutilon theophrasti"> Abutilon theophrasti</option>
</select>
</td>
</tr>
<tr>
<td>Select Family Name:</td>
<td>
<select name="fmnm" size="1">
<option value="0"> All</option>
<option value="Fabaceae">Fabaceae</option>
<option value="Malvaceae">Malvaceae</option>
<option value="Mimosaceae">Mimosaceae</option>
</select>
</td>
</tr>
<tr>
<td>Select Geographic Location:</td>
<td>
<select name="znm" size="1">
<option value="0"> All</option>
<option value="North Gujarat">North Gujarat</option>
<option value="South Gujarat">South Gujarat</option>
<option value="South East Gujarat">South East Gujarat</option>
<option value="Central Gujarat">Central Gujarat</option>
<option value="Kachchh">Kachchh</option>
<option value="Saurashtra">Saurashtra</option>
</select>
</td>
</tr>
<tr>
<tr>
<td>Select Marker:</td>
<td>
<select name="pnm" size="1">
<option value="0"> All</option>
<option value="rbcL">rbcL</option>
<option value="psbA-trnH">psbA-trnH</option>
<option value="matK">matK</option>
<option value="rpoC1">rpoC1</option>
<option value="ITS2">ITS2</option>
<option value="ycf5">ycf5</option>
</select>
</td>
</tr>
<tr>
<td>
<input type="submit" value="Go" name="action">
<label>
<input type="reset" name="Reset" id="button" value="Reset">
</label> </td>
</tr>
</table>
</form>
而表单动作页面如下,只描绘了整个编码的一部分。我想给用户一个选择任何/所有字段的选项,并能够通过从数据库中进行选择性搜索来显示它。请帮帮我。
if (($species == 0) || ($family == 0) || ($zones ==0 ) || ($marker == 0))
{
if(($species==0) && ($family==0) && ($zones==0))
{
$sql="SELECT * FROM `ncbi_bold_ plants` WHERE Marker LIKE '$marker%'" ;
}
elseif($species==0 && $family==0 && $marker==0)
{
$sql="SELECT * FROM `ncbi_bold_ plants` WHERE Zones LIKE '%$zones%'";
}
elseif($family==0 && $zones==0 && $marker==0)
{
$sql="select * from `ncbi_bold_ plants` where Speciesname like '$species%'";
}
elseif($species==0 && $zones==0 && $marker==0)
{
$sql="select * from `ncbi_bold_ plants` where Family like '$family%'";
}
/*
elseif($species==0 && $marker==0)
{
$sql="select * from `ncbi_bold_ plants` where Family like '$family%' AND Zones like '%$zones%'";
$search_sql=mysql_query($sql) or trigger_error("There was an error.<br/>" . mysql_error() . "<br />SQL Was: {$sql}");
}
elseif($family==0 && $zones==0 && $marker==0)
{
$sql="select * from `ncbi_bold_ plants` where Speciesname like '$species%'";
$search_sql=mysql_query($sql) or trigger_error("There was an error.<br/>" . mysql_error() . "<br />SQL Was: {$sql}");
}
elseif($species==0 && $family==0)
{
$sql="select * from `ncbi_bold_ plants` where Zones like '%$zones%' AND marker like '$marker%'";
$search_sql=mysql_query($sql) or trigger_error("There was an error.<br/>" . mysql_error() . "<br />SQL Was: {$sql}");
}
elseif($species==0 && $zones==0)
{
$sql="select * from `ncbi_bold_ plants` where Family like '$family%' AND marker like '$marker%'";
$search_sql=mysql_query($sql) or trigger_error("There was an error.<br/>" . mysql_error() . "<br />SQL Was: {$sql}");
}
elseif($species==0 && $marker==0)
{
$sql="select * from `ncbi_bold_ plants` where Family like '$family%' AND Zones like '%$zones%'";
$search_sql=mysql_query($sql) or trigger_error("There was an error.<br/>" . mysql_error() . "<br />SQL Was: {$sql}");
}
*/
else
{
$sql="SELECT * FROM `ncbi_bold_ plants` " ;
}
}
else
{
$sql="select * from `ncbi_bold_ plants` where Speciesname like '$species%' and Family like '$family%' and Zones like '%$zones%' and Marker like '$marker%'";
}
$search_sql=mysql_query($sql) or trigger_error("There was an error.<br/>" . mysql_error() . "<br />SQL Was: {$sql}");
请帮助我。我在 if 语句中找不到缺陷。
【问题讨论】:
-
您能否尝试手动输入一些
$species、$family、$zones和$marker并打印出结果$sql?例如(0,1,1,1) (将给出 "SELECT * FROM nci_bold_ 植物"), (0,0,0,1), (0,1,0,0), ... -
实际上我已经通过下拉菜单给出了这些值,通过在下拉菜单中获取这些 0,1 等值-->“选项”值。
-
然后尝试在
if语句之前打印出您的$species、$family等,并带有相应的输出$sql,这样您就可以验证是否确实发生了错误(错误不符合句法的最难追踪)。 -
我确实尝试过,它准确地打印了特定的物种名称。我认为是 IF 语句本身存在一些问题。
-
你能用这些测试的输出编辑你的问题吗?这样我们也可以验证? (与相应的 $sql)。