【发布时间】:2016-04-10 00:11:50
【问题描述】:
我正在尝试实现过滤器,这将帮助用户优化那里的其他用户搜索。这是我的搜索参数的图像,只是为了向您提供我将很快传达的图形表示:
共有三个过滤器:
- 性别
- 年龄
- 研究中的相似性
默认情况下,我想传达系统上的所有用户。因此,当用户进入users.php 时,将显示每个用户,然后,当应用过滤器时,相应地优化结果。
并非所有三个参数都必须完成才能开始搜索,例如,用户可以简单地搜索女性用户,它应该在搜索点击时显示所有女性用户。
我尝试为每个场景实现不同的查询,但始终显示所有用户。如果我指定我要搜索女性,然后单击搜索,它不会执行任何操作,仍会显示所有用户。
另外,我正在努力使用similarity in studies 参数。它的工作方式是在一个名为user_bio 的表中存储有关用户正在学习的数据,用户可以选择不提供此信息,因此我的表中的学习也可以是空的。
我希望它的工作方式是查看登录用户正在学习的内容,然后在其他人的简历中找到匹配的单词。例如,我目前以 Conor 身份登录,而 Conor 正在学习计算机科学。理想情况下,将运行一个算法,从user_bio 表中搜索其他用户的简历,并返回所有在他们的简历中拥有computer 或science 的用户。我很确定这与LIKE 子句有关,但我以前从未使用过它,所以我不能确定。
这是我目前的做法:
// processing filters
$refined_gender = htmlentities (strip_tags(@$_POST['gender']));
$age_from = htmlentities (strip_tags(@$_POST['age_from']));
$age_to = htmlentities (strip_tags(@$_POST['age_to']));
$studying = htmlentities (strip_tags(@$_POST['studying']));
$get_all_users = mysqli_query ($connect, "SELECT * FROM users" );
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
if (isset($_POST['submit'])){
// if gender parameter is used ...
if ($refined_gender){
$gender_statement = mysqli_prepare ($connect, "SELECT * FROM users WHERE gender = ?");
mysqli_stmt_bind_param($gender_statement, "s", $refined_gender);
mysqli_stmt_execute ($gender_statement);
mysqli_stmt_close($gender_statement);
}
// if studying parameter used...
if ($studying) {
// see explanation below...
}
// if gender and age parameter used...
if ($refined_gender && $age_from && $age_to){
$gen_and_age_statement = mysqli_prepare ($connect, "SELECT * FROM users WHERE gender = ? AND age BETWEEN ? AND ?");
mysqli_stmt_bind_param($gen_and_age_statement, "sss", $refined_gender, $age_from, $age_to);
mysqli_stmt_execute ($gen_and_age_statement);
mysqli_stmt_close($gen_and_age_statement);
}
}
总结,我需要什么:
-
SELECT * FROM users查询默认在users.php上执行。这将显示系统中的所有用户。 - 适用于任何要应用的过滤器。并非所有过滤器都需要应用才能获得结果,用户可以搜索女性并点击搜索,加载系统中的所有女性用户。
- 我需要根据应用的过滤器更改查询。所以如果一个用户搜索了一个男性用户,而其他两个选项没有选择,那么查询将是
"SELECT * FROM users WHERE gender = '$var_here'。
【问题讨论】:
-
我建议不要隐藏错误消息,而是处理它们。大多数都可以通过简单的 isset() 解决;
-
if ($refined_gender && $age_from && $age_to)为什么要检查这些变量是否为真? -
@EdwardBlack - 我的思考过程是“如果字段中有数据,或者选择了选项,请执行此操作...”。
-
那么你必须使用
isset例如if (isset($refined_gender) && isset($age_from) && isset($age_to))