为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
胡说叔叔 2019-06-25 11:10:01
具有一个或多个参数的搜索表单我已经完成了基础工作,我创建了两个文件,一个用户输入搜索参数的搜索表单,以及一个运行输入项的结果文件。为了简单起见,我们将搜索表单文件指定为search.php,将结果页面指定为Resul.php。编辑:清理标签礼仪,以方便阅读。search.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>因此,本质上,我想重写上面的内容,而用户可以输入一个或多个参数,然后返回所需的结果(例如,名称和学院名称=x&College=y或如果需要的话所有项目)。我想我需要重新思考这两个文件中的逻辑,但我愿意接受您的任何想法或建议,这个美妙的社区可能会有!如有任何建议/指导,将不胜感激。
查看完整描述

3 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

构建WHERE从句动态我推荐的方法是将每个条件推到数组上,然后使用implode()连接所有条件,并将它们连接到ANDOR这是你的喜好。

$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()) {
    ...}


查看完整回答
反对 回复 2019-06-25
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

如果您不打算更改数据库中的任何内容-您只是在选择-请继续使用GET而不是POST。这样做的好处是它将允许您将URL保存为搜索字符串。您还可以刷新搜索,而不需要重新提交后警报。您只需要确保在将值发送到数据库之前将其参数化。我通常会通过清理函数发送这些值,比如一个正则表达式,它确保只有在您期望字母时才有字母,或者如果您希望使用数字,则使用数字。

在同一页(全部搜索):(我只想为你概述一下。)

<form action="<?= $_SERVER["REQUEST_URI"]; ?>" method="GET">
    <input name="major" value="<?= $_GET["major"]; ?>" />    <select name="college">
        <option value="1" <?PHP if( $_GET["college"] == 1 ) echo 'selected="true"'; ?>>Business</option>
    </select></form><?PHPif( ! empty( $_GET ) ){
    if (isset($_GET['major'])) {
       $wheres[] = 'a.major = :major';
       $params[':major'] = $_GET['major'];
    }
    if (isset($_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);}?>

现在你可以显示你的数据了。

编辑:答案的另一半是我写的,然后他写了下半部分,所以我把它合并了.

此外,这方面的下一个复杂程度将是将PHP从搜索文件中取出,并将其放入另一个文件中。当您按下表单中的搜索按钮时,您将使用Ajax调用PHP元素。然后,PHP文件将通过Ajax返回结果。您可以返回预先格式化的HTML或JSON,并让类似于JQuery的内容为您显示。


查看完整回答
反对 回复 2019-06-25
  • 3 回答
  • 0 关注
  • 520 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信