具有一个或多个(多个)参数的搜索表单

2023-12-05

我已经掌握了基础知识,在其中创建了两个文件:用户输入搜索参数的搜索表单,以及生成输入项目的结果文件。为了简单起见,我们将搜索表单文件指定为 search.php,将结果页面指定为 results.php。

搜索.php

<?php
    
if (!empty($_POST['id']) && isset($_POST['id'])) {
    header("Location: ?m=search.results&id=".$_POST['id']."");
} elseif (!empty($_POST['major']) && isset($_POST['major'])) {
    header("Location: ?m=search.results&major=".$_POST['major']."");
} elseif (!empty($_POST['college']) && isset($_POST['major'])) {
    header("Location: ?m=search.results&college=".$_POST['college']."");
} elseif (!empty($_POST['name']) && isset($_POST['name'])) {
    header("Location: ?m=search.results&name=".$_POST['name']."");
} elseif (!empty($_POST['id']) && !empty($_POST['college']) && !empty($_POST['major'])
                            && isset($_POST['submit']) && !empty($_POST['name'])) {
    echo "<div class='alert alert-danger'>No students found. Please try different parameters.</div>";
}

?>


<h4>Search</h4>

<form method="POST">
    <table width="100%">

<tr><td>ID:</td><td> <input type="text" name="id" class="form-control"></textarea></td></tr>

<tr><td>Name:</td><td> <input type="text" name="name" class="form-control"></textarea></td></tr>

<tr><td>Major:</td><td><select name="major" class="form-control"><option></option><?php echo majorSelect(); ?></select></td></tr>

    <tr><td>College:</td><td><select name="college" class="form-control"><option></option><?php echo collegeSelect(); ?></select></td></tr>

<tr><td colspan="2"><input type="submit" name="submit" value="Search" class="btn btn-lrg btn-primary" style="margin-top:10px;"></td></tr>

    </table>
</form>

结果.php

<!-- Begin Search Parameters -->

<?php

if (isset($_GET['id'])) {
    $students = $db->query("SELECT * FROM `user_details` a, `user` b WHERE a.uid = b.id AND a.uid = '".$_GET['id']."'");
    
    while ($student = $students->fetch()) {
        echo '
            <tr>
                <td>'.$student['uid'].'</td>
                <td>'.$student['name'].'</td>
                    <td>'.$student['major'].'</td>
                    <td>'.$student['college'].'</td>
                <td><a href="?m=profile&id='.$student['id'].'" style="display:block">View</a></td>
                
            </tr>';
    }
} elseif (isset($_GET['major'])) {
    $students = $db->query("SELECT * FROM `user_details` a, `user` b WHERE a.uid = b.id AND a.major = '".$_GET['major']."'");
        
    while ($student = $students->fetch()) {
        echo '
            <tr>
                <td>'.$student['uid'].'</td>
                <td>'.$student['name'].'</td>
                    <td>'.$student['major'].'</td>
                    <td>'.$student['college'].'</td>

                <td><a href="?m=profile&id='.$student['id'].'" style="display:block">View</a></td>
                
            </tr>';
    }
} elseif (isset($_GET['college'])) {
    $students = $db->query("SELECT * FROM `user_details` a, `user` b WHERE a.uid = b.id AND a.college = '".$_GET['college']."'");
        
    while ($student = $students->fetch()) {
        echo '
            <tr>
                <td>'.$student['uid'].'</td>
                <td>'.$student['name'].'</td>
                    <td>'.$student['major'].'</td>
                    <td>'.$student['college'].'</td>
                <td><a href="?m=profile&id='.$student['id'].'" style="display:block">View</a></td>
                
            </tr>';
    }
} elseif (isset($_GET['name'])) {
    $name = $_GET['name'];
        
    $students = $db->query("SELECT * FROM `user_details` a, `user` b WHERE a.uid = b.id AND b.name LIKE '%". $name . "%'");
        
    while ($student = $students->fetch()) {
        echo '
            <tr>
                <td>'.$student['uid'].'</td>
                <td>'.$student['name'].'</td>
                    <td>'.$student['major'].'</td>
                    <td>'.$student['college'].'</td>
                <td><a href="?m=profile&id='.$student['id'].'" style="display:block">View</a></td>
                
            </tr>';
    }
}    

因此,本质上我想重写上述内容,而用户可以输入一个或多个参数,并返回所需的结果(例如姓名和大学 - &name=x&college=y 或所有项目(如果需要))。


当使用 PDO(而不是 mysqli)作为数据库 API 时,这是最容易做到的。

构建WHERE动态条款。我推荐的方法是将每个条件推入一个数组,然后使用implode()连接所有条件,将它们与AND or OR这是您的偏好。

$wheres = array();
$params = array();
if (!empty($_GET['id'])) {
    $wheres[] = 'a.uid = :uid';
    $params[':uid'] = $_GET['id'];
}
if (!empty($_GET['major'])) {
    $wheres[] = 'a.major = :major';
    $params[':major'] = $_GET['major'];
}
if (!empty($_GET['name'])) {
    $wheres[] = 'b.name LIKE :name';
    $params[':name'] = '%'.$_GET['name'].'%';
}
// And so on for all parameters

$sql = "SELECT * 
        FROM user_details AS a
        JOIN user AS b ON a.uid = b.id";
if (!empty($wheres)) {
    $sql .= " WHERE " . implode(' AND ', $wheres);
}
$stmt = $db->prepare($sql);
$stmt->execute($params);

然后按照原始代码显示结果。

while ($student = $stmt->fetch()) {
    ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有一个或多个(多个)参数的搜索表单 的相关文章

随机推荐

  • 用法相当不同

    我想在我的小型 Web 项目中使用这个出色的 Javascript 库 http prettydiff com 我已经下载了 PrettyDiff js 和 ViewDiff js 我一直在研究如何使用它 但似乎找不到任何有关如何获取 Ja
  • Composer 需要本地包

    我有几个正在协同开发的库 Foo 和 Bar 但在技术上仍然是独立的 以前我刚刚重新定义了自动加载器 Foo Foo src 但现在我已经向 Foo 添加了 Guzzle 依赖项 Bar 翻转了它的盖子 因为它不是它的依赖项之一 目录结构
  • Python中递归子集和

    我很乐意得到一些帮助 我有以下问题 我得到了一个数字列表seq和一个目标数字 我需要写两件事 返回的递归解决方案True如果存在等于目标数的子序列之和并且False否则 例子 subset sum 1 1 5 4 0 True subset
  • 正则表达式匹配不带连续空格的用户名

    我正在努力制作一个 javascript 正则表达式来满足以下要求 第一个字符必须是字母 a zA Z 其余的可以是任何字母 任何数字 连字符 点 下划线和空格 但没有连续的空格 例如 连续两个或多个空格 长度必须在 3 到 25 之间 含
  • 在Qt中fork后获取进程的PID

    我正在创建一个成功分叉的 Qt C 控制台应用程序 当我在 fork 之前调用 QCoreApplication applicationPid 然后在 fork 之后 在子进程中 调用 QCoreApplication applicatio
  • 如何正确锁定 Task.Run() 块

    我正在编写一个应用程序 其中使用多种方法来访问某些共享资源 因此通过以下方式实现了一些安全性lock thisLock 一切都很好 直到我不得不在异步任务中使用资源 这是代码 private object thisLock new obje
  • 如何使用 Razor 语法在 ASP.NET MVC 4 中获取文本中 URL 的链接?

    我有一个带有文本字段的模型 文本can包含多个 URL 它不必包含 URL 也没有特定的格式 Using Html DisplayFor model gt model TextWithSomeUrls 当然 文本和 URL 的显示方式与普通
  • 使用 python2 和 python3 的相同代码进行编码+加密+填充时出现问题[重复]

    这个问题在这里已经有答案了 免责声明 我了解以下内容not适合在生产环境中提供 安全 它只是比对存储在我的系统上的敏感数据使用 XOR 或 rot13 更好一点 我将以下代码放在一起 以允许我对这些敏感值使用 AES 加密 AES 需要 1
  • 无法在真实设备上使用 Appium 识别 iOS hyprid 应用程序自动化中 WEBVIEW 中的元素

    我试图使用 ionic2 Angular2 和 typescript 来自动化混合应用程序构建 我正在使用 C 来编写代码 测试在 BDD specflow 中 版本 iOS 9 3 1 代码 7 3 阿皮姆 1 4 13 将上下文切换到
  • TypeScript 实用程序类型优于可区分的联合类型

    给定一个像这样的受歧视联合类型 type HomeRoute name Home type PageRoute name Page id number type SearchRoute name Search text string lim
  • 如果您可以解码 JWT,它们的安全性如何?

    如果我得到一个JWT我可以解码有效负载 这如何安全 难道我不能从标头中获取令牌 解码并更改有效负载中的用户信息 然后使用相同的正确编码秘密将其发送回来吗 我知道它们必须是安全的 但我真的很想了解这些技术 我缺少什么 JWT 可以进行签名 加
  • 从 VBA 运行 Telnet 会话

    我有一个可以执行 FTP 功能的 VBA 库 我也想执行 telnet 操作 目前 我正在编写一个 Perl 脚本 该脚本基于文本文件执行 telnet 但我想从 VBA 内部本地驱动 telnet 连接 有人有这方面的资料吗 我不想使用加
  • 如何使用依赖属性来替换UserControl构造函数中的参数?

    我注意到以前有人问过类似的问题 但我没有找到任何详细的例子 我有一个winform程序 它的构造函数有一个参数cn public AddFailure ProSimConnect cn constructor in winform this
  • 为什么BFS的复杂度是O(V+E)而不是O(E)? [复制]

    这个问题在这里已经有答案了 这是一个通用的 BFS 实现 For a connected graph with V nodes and E total number of edges we know that every edge will
  • 自定义GridView删除按钮

    如何自定义自动生成的命令按钮 例如Delete 我想在删除时添加客户端确认 同时我希望在设置时生成此按钮AutoGenerateDeleteButton true 是否可以 我可以这样添加自定义按钮
  • 您请求的商品无法购买

    我正在尝试在 Android 应用程序中测试订阅 我用地下城的例子 我上传的 apk 未发布 但订阅项目已发布 我在开发控制台中添加了新的测试帐户 gmail 它不是开发人员帐户 我将手机重置为出厂状态并添加了测试帐户 我安装了签名的apk
  • 如何从以破折号开头的远程名称中提取

    在 git 中 可以使用以下命令处理远程名称 人物明星 例如 我们可以添加一个以 只需使用选项更新它 在 git 命令中 命令选项和远程名称之间分开 但它不起作用 git pull myremotename master 而且 我收到此错误
  • 将 pandas 系列时间戳转换为唯一日期列表

    我在 pandas 数据框中有一列时间戳格式的列 想要将唯一日期 没有时间 提取到列表中 我尝试了以下方法并没有真正起作用 1 dates datetime datetime df EventTime tolist date 2 dates
  • 从 Google 应用脚本访问 Google 文档评论

    我正在与几个人同时编写谷歌文档 为了跟踪谁必须做什么 我正在使用评论 然后 文档的每个部分都会分配给某人 并且他必须在评论中更新其部分的状态 以结构化格式 感谢 VBA 中的宏 我将其提取出来并将结果放入电子表格中 这样就可以轻松跟踪文档的
  • 具有一个或多个(多个)参数的搜索表单

    我已经掌握了基础知识 在其中创建了两个文件 用户输入搜索参数的搜索表单 以及生成输入项目的结果文件 为了简单起见 我们将搜索表单文件指定为 search php 将结果页面指定为 results php 搜索 php