Php Codeigniter:筛选和搜索表的正确方法

Php Codeigniter:筛选和搜索表的正确方法,php,codeigniter,search,activerecord,filter,Php,Codeigniter,Search,Activerecord,Filter,问题 我有老师、学生和班级的桌子,这就是学生桌子的样子 我需要能够搜索并过滤表格以找到学生。将有大约100名学生进行分类 我有一个有效的MVP,但我知道这是一个解决问题的坏方法 我尝试过的 流程是这样的 默认情况下,当有人登录到所有学生的学生列表时 显示 然而,当有人进入搜索并点击“Go”时,表单会被删除 已提交回同一页。。。价值观在哪里 if/else语句 如果设置了字段,则会调用模型中的另一个方法,该方法使用两个参数,$field(要搜索的数据库列名)和$search要部分匹配的字符串 这

问题

我有老师、学生和班级的桌子,这就是学生桌子的样子

我需要能够搜索并过滤表格以找到学生。将有大约100名学生进行分类

我有一个有效的MVP,但我知道这是一个解决问题的坏方法

我尝试过的

流程是这样的

  • 默认情况下,当有人登录到所有学生的学生列表时 显示

  • 然而,当有人进入搜索并点击“Go”时,表单会被删除 已提交回同一页。。。价值观在哪里 if/else语句

  • 如果设置了字段,则会调用模型中的另一个方法,该方法使用两个参数,
    $field
    (要搜索的数据库列名)和
    $search
    要部分匹配的字符串

  • 这是搜索表

    <form class="form-inline" action="<?php echo base_url() . 'admin/students'; ?>" method="post">
            <select class="form-control" name="field">
                <option selected="selected" disabled="disabled" value="">Filter By</option>
                <option value="first_name">First Name</option>
                <option value="last_name">Last Name</option>
                <option value="email">Email Name</option>
            </select>
            <input class="form-control" type="text" name="search" value="" placeholder="Search...">
            <input class="btn btn-default" type="submit" name="filter" value="Go">
        </form>
    
    在学生模型中的
    getStudentsWhereLike()
    方法中调用

    public function getStudentsWhereLike($field, $search)
        {
    
            $sql = "
                SELECT * FROM students
                WHERE $field LIKE '%$search%'
                ORDER BY `students`.`registered_at`
            ";
    
            $query = $this->db->query($sql);
            return $query->result();
        }
    
    问题

    这是解决问题的正确方法吗?我知道
    $this->db->query($sql)
    方法容易受到sql攻击,因此我将清理输入,但我感兴趣的是,是否有更好、更灵活、标准化的方法来使用Codeigniter筛选/搜索表。

    请改用Codeigniter:

    改用Codeigniter:


    也许是离题的,但是对于少量的数据,像这样我喜欢使用DataTables jQuery插件,搜索/筛选是非常好的。也许是离题的,但是对于少量的数据,像这样我喜欢使用DataTables jQuery插件,搜索/筛选是非常好的。这是否能够部分匹配这些值,例如,如果我输入'joh',它将找到john和johnny?是的,
    $this->db->like
    有3个参数,第三个参数是可选的,并在
    之前(
    %match
    )、
    之后(
    match%
    )和
    这两个参数(
    %match%
    )默认值是
    两个
    这是否能够部分匹配值,例如,如果我输入'joh',它将找到john和johnny?是的,
    $this->db->like
    有3个参数,第三个参数是可选的,在
    之前取值(
    %match
    ),
    之后取值(
    匹配%
    )和
    两者都取值
    %match%
    )和默认值均为
    
    
    public function getStudentsWhereLike($field, $search)
        {
    
            $sql = "
                SELECT * FROM students
                WHERE $field LIKE '%$search%'
                ORDER BY `students`.`registered_at`
            ";
    
            $query = $this->db->query($sql);
            return $query->result();
        }
    
    public function getStudentsWhereLike($field, $search)
    {
        $query = $this->db->like($field, $search)->orderBy('registered_at')->get('students');
        return $query->result();
    }