我从下拉列表中获取用户的多个值。我将这些值存储在php中的数组中。一切都好。现在我想使用这些数组值来查询我的数据库以提供所需的结果。 我的HTML代码是
<select multiple name="equipment[]">
<option value="all">ALL</option>
<option value="helmet">HEMLMET</option>
<option value="boots">BOOTS</option>
<option value="jacket">JACKET</option>
<option value="flask">FLASK</option>
</select>
$equipment=$_POST['equipment'];
我用这件作品来存储价值。
现在基于数组中的一个或多个值;我想过滤我的查询。
Select w,x,y,z from table_a inner join table_b where table_a.w="the values in array";
我尝试使用foreach循环,但它只取最后一个值。 谢谢你的帮助。
答案 0 :(得分:3)
请记住,HTML,PHP和MySQL是三种不同的处理环境,因此它们都不共享相同的内存(变量)或代码(例如循环)。
大致顺序:
因此,要从PHP获取MySQL的变量选择,您需要编写一个查询所有答案的“查询字符串”。
看起来像这样:
SELECT w,x,y,z
FROM table_a
INNER JOIN table_b
WHERE table_a.w IN ('helmet', 'boots', 'jacket');
有关此问题的更多帮助,请参阅MySQL Expression syntax。
要构建它,您需要非常小心地阅读“MySQL字符串注入”(使用您的网页的人可以更改您的数据库所做的调用)上面链接的问题,因为您正在从中获取值“user”/“client”(通过URL或表单发布)。
Can I bind an array to an IN() condition?的答案对于如何使用数组值构建查询字符串同时防止注入攻击有一些很好的建议。
答案 1 :(得分:1)
您正在寻找的IN子句:
select * from tableA inner join on tableB on ... where tableA.w in ('value1', 'value2')
你可以在php中使用循环或implode()函数来生成in子句。请注意,如果您只选择控件中的1个项目,那么$ _POST [&#39; equipment&#39;]将是一个字符串,而不是一个数组。因此,使用is_array()来确定是否选择了多个值。
答案 2 :(得分:0)
<form action='somepage.php' method='POST'>
.
.
<select multiple name="equipment[]">
<option value="all">ALL</option>
<option value="helmet">HEMLMET</option>
<option value="boots">BOOTS</option>
<option value="jacket">JACKET</option>
<option value="flask">FLASK</option>
</select>
.
.
</form>
<强> somepage.php 强>
<?
$equipment=$_POST['equipment'];
$TotalEquipment=sizeof($equipment); //Count total number of equipements selected
$values=""; //initialize values as empty.
for($i=0;$i<$TotalEquipment;$i++)
{
$valu=$equipment[$i];
if($i==0)
{
$values="'".$valu."',";
}
else
{
$values=$values."'".$valu."',";
}
}
$values=rtrim($values, ","); //For removing last comma (,) from the string
$Query="SELECT w,x,y,z
FROM table_a
INNER JOIN table_b
WHERE table_a.w IN ($values)";
//Here, execute your $Query with appropriate mysql functions
?>
享受编码。欢呼声。