我正在使用PHP。是否可以在value
属性中写出逻辑表达式,如下所示:
<form action="...php">
<select name="formLocation" multiple>
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
//Here I try to use logical expression. But it does not work:
<option value="'DE' OR 'IL' OR 'IN'">myTerritory</option>
</form>
然后该选项的值进入mySQL查询,例如SELECT * FROM 'table1' WHERE 'states' LIKE '%states%'
我想创建一个唯一的mySQL $query=SELECT * FROM 'table1' WHERE 'states' LIKE '%states%'
,而不是指定myTerritory
作为一个例外。
PS:我本可以使用以下代码:SELECT * FROM 'table1' WHERE 'states' LIKE '%DE%' OR 'states' LIKE '%IL%' OR 'states' LIKE '%IN%'
但这会使代码过于复杂,无法进行更复杂的搜索…
由于您的<select>
允许多个选择,您只需要更改名称以允许将数据数组发送到PHP:
<!-- HTML -->
<select name="formLocation[]" multiple>
可以在PHP中使用implode()
,在MySQL中使用IN()
。确保您正在对输入进行序列化或使用参数化查询!这里没有显示!
<?php
$states = implode(',', $_POST['formLocation']);
?>
// your query
SELECT * FROM 'table1' WHERE 'states' IN($states)
您可能需要重新考虑一下您的模型。听起来州和地区之间有关系,您可能希望您的表反映出这一点。
也许你的表看起来像这样:
State:
+----------------------------+-------+
| abbreviation | territoryId | sales |
+----------------------------+-------+
| AL | 1 | 300 |
| AK | 2 | 350 |
| DE | 3 | 250 |
| IN | 3 | 100 |
| IL | 3 | 200 |
+----------------------------+-------+
那么你的表单可以简化如下:
<form action="...php">
<select name="formLocation" multiple>
<option value="1">My Territory</option>
<option value="2">Your Territory</option>
<option value="3">Her Territory</option>
</form>
你的查询应该是这样的:
SELECT SUM(sales) FROM State WHERE territoryId = 3;
这样可以更好地使用MySQL作为关系数据库。当然,您的模型可能还有很多要做的事情,但希望这只是一个开始。