gpt4 book ai didi

php - 过滤器不起作用(根据参数执行不同的 PHP 查询)

转载 作者:行者123 更新时间:2023-11-29 02:50:35 26 4
gpt4 key购买 nike

我正在尝试实现过滤器,以帮助用户优化那里的其他用户搜索。这是我的搜索参数的图像,只是为了向您提供我即将传达的内容的图形表示:

enter image description here

共有三个过滤器:

  1. 性别
  2. 年龄
  3. 研究的相似性

默认情况下,我想传达系统上的所有用户。因此,当用户访问 users.php 时,将显示每个用户,然后在应用过滤器时相应地优化结果。

并非所有三个参数都必须完成才能开始搜索,例如,用户可以简单地搜索女性用户,它应该在搜索点击时显示所有女性用户。

我尝试为每个场景实现不同的查询,但总是显示所有用户。如果我指定我要搜索女性然后单击搜索,它什么也不会做,仍然显示所有用户。

此外,我还在为 similarity in studies 参数而苦苦挣扎。它的工作方式是,在一个名为 user_bio 的表中,我存储了有关用户正在学习的内容的数据,用户可以选择不提供此信息,因此我的表中的学习也可以是空的。

我希望它的工作方式是查看登录用户正在学习的内容,然后在其他人的简历中找到匹配的单词。例如,我目前以 Conor 身份登录,而 Conor 正在学习计算机科学。理想情况下,将运行一个算法,从 user_bio 表中搜索其他用户的个人资料,并返回所有在其个人资料中有 computerscience 的用户.我很确定这与 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);
}
}

总结一下,我需要的:

  1. SELECT * FROM users 查询默认在 users.php 上执行。这将显示系统中的所有用户。
  2. 适用于任何过滤器。并非需要应用所有过滤器才能获得结果,用户可以搜索女性并点击搜索,将所有女性用户加载到系统中。
  3. 我需要根据已应用的过滤器更改查询。因此,如果用户搜索了男性用户,并且未选择其他两个选项,则查询将为 "SELECT * FROM users WHERE gender = '$var_here'

最佳答案

我在这里提供代码,这样你怎么能在一个查询中写多个过滤器选项..但是我在这里没有提到你的第三个过滤器选项研究,因为它是关于另一个表的,你没有被清楚地提到它它使用外键或遵循关系数据库结构链接到此表。任何方式的多过滤器选项如下..在这里我添加了数据库连接和转义注入(inject)的功能......如果你不需要忽略那部分..

function escape($e_string)
{
global $connect;
if(!isset($connect))
{
// DATABASE CONNECTION QUERY
$connect = mysqli_connect("servername", "username", "password", "");
if (!$connect)
die("Connection failed: " . mysqli_connect_error());
}
$e_string = trim(utf8_encode($e_string));
$e_string = mysqli_real_escape_string($connect,$e_string);
return $e_string;
}

// processing filters
$refined_gender = isset($_POST['gender']) ? escape($_POST['gender']) : '';
$age_from = isset($_POST['age_from']) ? escape($_POST['age_from']) : '';
$age_to = isset($_POST['age_to']) ? escape($_POST['age_to']) : '';
$studying = isset($_POST['studying']) ? escape($_POST['studying']) : '';

$query = "SELECT * FROM users WHERE 1=1";

if (isset($_POST['submit'])){

$addstring1 = $addstring2 = $addstring3 = $and1 = $and2 = $and3 = "";
$andcnt =3;

if($refined_gender != '')
$addstring1 = " gender = '$refined_gender'";

if($age_from != '')
$addstring2 = " age >= '$age_from'";

if($age_to != '')
$addstring3 = " age <= '$age_to'";

for($i=1;$i<=$andcnt;$i++)
${"and".$i} = ${"addstring".$i} != '' ? " AND" : "";

$query .= $and1.$addstring1.$and2.$addstring2.$and3.$addstring3;

}
$get_all_users = mysqli_query ($connect, $query);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

关于php - 过滤器不起作用(根据参数执行不同的 PHP 查询),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36524263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com