具有一个或多个(多个)参数的搜索表单 [英] Search Form with One or More (Multiple) Parameters

查看:60
本文介绍了具有一个或多个(多个)参数的搜索表单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I've gotten the basics down, where I've created two files, the search form where a user inputs search parameters, and the results file that cranks out inputted items. For the sake of simplicity we'll designate the search form file as search.php and the results page as results.php.

清理了标签礼节,以使阅读更顺畅.

Cleaned up tab etiquette for smoother reading.

<?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>

results.php

   <?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和college-& name = x& college = y或所有需要的项是).我认为我需要重新考虑两个文件中的逻辑,但是我愿意接受您(这个很棒的社区)可能提出的任何想法或建议!任何建议/指导将不胜感激.

So, essentially I would like to rewrite the above whereas a user can input one or more parameters, and the desired result is returned (e.g. both name and college - &name=x&college=y OR all items if need be). I'm thinking i'll need to rethink the logic in both files, but I'm open to any ideas or suggestions you, this wonderful community, might have! Any advice/guidance would be greatly appreciated.

推荐答案

动态构建WHERE子句.我推荐的方法是将每个条件放入数组,然后使用implode()串联所有条件,并根据需要将它们与ANDOR连接.

Build the WHERE clause dynamically. My recommended approach is to push each condition onto an array, and then use implode() to concatenate all the conditions, connecting them with AND or OR as is your preference.

$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);

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

Then display the results as in your original code.

while ($student = $stmt->fetch()) {
    ...
}

这篇关于具有一个或多个(多个)参数的搜索表单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆