【发布时间】:2015-03-26 12:43:28
【问题描述】:
我有以下疑问:
$get_crs_mysqli = "select * from courses where course_date1 >= CURRENT_DATE() AND ((course_title like '%" . $_SESSION['userSearch'] . "%')
AND ((course_duration = '" . $duration1 . "' AND course_title like '%" . $_SESSION['userSearch'] . "%')
OR (course_duration = '" . $duration2 . "' AND course_title like '%" . $_SESSION['userSearch'] . "%')
OR (course_duration = '" . $duration3 . "' AND course_title like '%" . $_SESSION['userSearch'] . "%')
OR (course_delivery2 = '" . $delivery2 . "' AND course_title like '%" . $_SESSION['userSearch'] . "%')
OR (course_guarantee = '" . $guarantee1 . "' AND course_title like '%" . $_SESSION['userSearch'] . "%')
OR (course_guarantee = '" . $guarantee2 . "' AND course_title like '%" . $_SESSION['userSearch'] . "%')
OR (course_city = '" . $city . "' AND course_title like '%" . $_SESSION['userSearch'] . "%')
OR (course_subc1 = '" . $category1 . "' AND course_title like '%" . $_SESSION['userSearch'] . "%')
OR (course_subc2 = '" . $category2 . "' AND course_title like '%" . $_SESSION['userSearch'] . "%')
OR (course_subc3 = '" . $category3 . "' AND course_title like '%" . $_SESSION['userSearch'] . "%')
OR (course_subc4 = '" . $category4 . "' AND course_title like '%" . $_SESSION['userSearch'] . "%')
OR (course_subc5 = '" . $category5 . "' AND course_title like '%" . $_SESSION['userSearch'] . "%')
OR (course_delivery2 = '" . $delivery2 . "' AND course_title like '%" . $_SESSION['userSearch'] . "%')
OR (course_delivery = '" . $delivery1 . "' AND course_title like '%" . $_SESSION['userSearch'] . "%'))) ORDER BY course_date1 ASC LIMIT $position, $item_per_page";
本质上发生的是用户搜索课程,然后当他们应用可选的搜索过滤器时,它会被修改以反映过滤器。例如,他们搜索所有 html,它会加载所有 html,如果他们选择持续时间 1,那么它应该只显示持续时间为 1 的 html 课程。
在当前状态下,当一个可选过滤器被选中时,它保持不变,如果我改变它
(course_duration = '" . $duration1 . "' AND course_title like '%" . $_SESSION['userSearch'] . "%')
到
(course_duration = '" . $duration1 . "' OR course_title like '%" . $_SESSION['userSearch'] . "%')
然后它显示所有持续时间为 1 的课程,并完全忽略 html 查询
下面是一个带有图片的例子:
【问题讨论】:
-
是的,这就是它应该做的,为什么会有不同的词'OR'和'AND'
-
我认为我的工作不正确。它假设首先根据 and 用户的搜索结果填充结果,并且如果用户选择一个过滤器而不是缩小选项以反映该过滤器,则它有一个选项,就像在这个示例中 html 然后检查 duration1 应该只填充课程html和duration1,如果duration2被检查,那么用duration2
-
任何帮助或提示将不胜感激
-
警告:使用
mysqli时,您应该使用参数化查询和bind_param将用户数据添加到您的查询中。 请勿使用字符串插值来完成此操作,因为您将创建严重的SQL injection bugs。 切勿将任意用户数据直接放入查询中。
标签: php html mysql search mysqli