【发布时间】:2012-03-11 09:51:28
【问题描述】:
这几天我一直在尝试解决这个问题,但一直未能找到解决方案。很可能是因为我认为我问的问题不正确。
来了……
我正在尝试在我的网站上搜索律师名单。
Table 1
ID (primary)
Name
Category1 (fkey)
Category2 (fkey)
Category3 (fkey)
Category4 (fkey)
Category5 (fkey)
Location1 (fkey)
Location2 (fkey)
Location3 (fkey)
Location4 (fkey)
Location5 (fkey)
Table 2 - Locations
ID (primary)
Name
Table 3 - Categories
ID (primary)
Name
所以律师有多个类别和多个位置 -> 与表 2 和表 3 的一对多关系
第一个问题:我是否正确设置了表 1?我是否需要有多个位置和类别列(即位置 1、位置 2、位置 3 等...)还是让这变得复杂?
下一步...
我想在我的网站上进行复选框样式的搜索。用户可以按位置和/或按类别进行搜索。通过复选框,他们可以选择多个位置和/或类别。复选框值是位置和类别的 ID(不是名称)
这可以通过三种方式发生。
- 仅按位置搜索
- 仅按类别搜索
- 按位置内的类别搜索
我有两个问题。
- 我可以让场景 1 和 2 工作,但前提是选中一个复选框。
- 我什至不知道如何开始让方案 3 发挥作用。
这是我对场景 1 和 2 的内容
$AttorneyLocation = $_POST['AttorneyLocation'];
for ($i="0"; $i<count($AttorneyLocation); $i++) {
if (!is_numeric($AttorneyLocation[$i])) {
$AttorneyLocation[$i]="";
}
if (empty($AttorneyLocation[$i])) {
unset($AttorneyLocation[$i]);
}
}
$AttorneyLocation = implode (" OR ", $AttorneyLocation);
$sqlCommand = "SELECT att_id, att_name, att_logo, att_addy, att_town, att_profile_url FROM attorneys WHERE att_location1='$AttorneyLocation' OR att_location2='$AttorneyLocation' OR att_location3='$AttorneyLocation' OR att_location4='$AttorneyLocation' OR att_location5='$AttorneyLocation'";
Again, this works but only when ONE checkbox is selected, it fails when two or more are selected.基本上它似乎只搜索已选中的 LAST 复选框,而忽略它之前的复选框。
对于场景 3 - 我只是不确定从哪里开始,如何在位置搜索中加入类别搜索?
如果有人能指出我正确的方向,那就太好了,非常感谢!这是我第一次尝试创建这样的东西!
如果需要,这是我的表单代码 - 全部是动态创建的
<input type='checkbox' name='AttorneyCategory[]' value='$cat_id'> $category<br />
<input type='checkbox' name='AttorneyLocation[]' value='$loc_id'> $location<br />
【问题讨论】:
-
快速说明 - 使用 for 循环时,您不应使用
$i<count($AttorneyLocation)作为第二个表达式,因为每次迭代都会计算计数。您应该首先将 count 的值分配给一个变量,然后在 for 循环中使用它。在这种情况下,这并不重要,但这是一个坏习惯。