MySQL&笨!搜索表单问题

时间:2012-12-30 05:50:18

标签: codeigniter

有人可以给我任何关于如何获取带有4个文本字段的html表单来搜索我的数据库并在其中查找任何相关数据并显示它的建议吗?

基本上,这个表单不必完全填写,用户只能键入1或2个字段(例如first_name和last_name),然后该模型应该搜索与其相关的其他2个缺失字段用户进入。

必须填写至少一个字段才能使搜索操作正常工作,此字段可以是4个中的任意一个(随机)。这些字段命名为:

姓 姓 部门 标题

我的数据库中有3个表包含所需的信息,如下所示:

部门(dept_no,dept_name) employees(emp_no,first_name,last_name) 标题(emp_no,标题)

由于并非所有主键共享相同的主键,因此我的数据库中还有另一个表将“部门”表链接到“员工”表。

(departments_employees)=> dept_emp(emp_no,dept_no)

下面我的model.php文件使用所有这些表来搜索某些数据,但到目前为止,此函数仅搜索与“firstname”条目匹配的数据,其余输入字段将被忽略。

<?php

class Emp_model extends CI_Model {

function find_dept()
{
    $this->db->select('employees.first_name, employees.last_name, departments.dept_name, titles.title');
    $this->db->where('last_name', $this->input->get('lastname'));
    $this->db->join('dept_emp', 'dept_emp.emp_no = employees.emp_no');
    $this->db->join('departments', 'departments.dept_no = dept_emp.dept_no');
    $this->db->join('titles', 'titles.emp_no = employees.emp_no');
    $query = $this->db->get('employees');

    if($query->num_rows > 0)
    {
        return $query->result();

    }

    else
    {
        redirect('find');

    }

}
}

?>

我的视图在表格中显示结果,所以到目前为止一切正常,没有错误。经过一段时间的研究,我无法想出办法。如果有人有我想要的任何想法或类似的教程,请告诉我!非常感谢!谢谢:))

如果我没有说清楚或需要更多信息,请告诉我!

2 个答案:

答案 0 :(得分:1)

您可以将数组传递给CI活动记录,如果检查所有输入,则必须执行此操作 你应该在获得之前调用活动记录

$inputs = $this->input->post(); // you get an Associative array of post data

extract($inputs); // will extract variables from Associative array.

$where = array();

if(strlen($first_name))
 { 
   $where['first_name'] = $first_name;
 }

   if(strlen($last_name))
 { 
   $where['last_name'] = $last_name;
 }

 if(strlen($dept))
 { 
   $where['dept'] = $dept;
 }

  if(strlen($title))
 { 
   $where['title'] = $title;
 }

 $this->db->where($where);
 $query = $this->db->get('employees');

答案 1 :(得分:1)

似乎您非常接近完成任务,只需要提及有关您的代码的几件事情。您不应该直接在模型中使用$this->input->get('lastname'),您应该抓住控制器中的信息并使用以下内容将其传递给模型:

function find_dept($firstName, $lastName, $dept, $title) {
   ...
}

这将允许您重用模型函数,而不必依赖于将信息发送给它的方法。

function find_dept($firstName = false, $lastName = false, $dept = false, $title = false) {
   $this->db->select('employees.first_name, employees.last_name, departments.dept_name, titles.title');

   $this->db->join('dept_emp', 'dept_emp.emp_no = employees.emp_no');
   $this->db->join('departments', 'departments.dept_no = dept_emp.dept_no');
   $this->db->join('titles', 'titles.emp_no = employees.emp_no');

   if($firstName && $firstName !== '')
   {
     $this->db->where('employees.first_name', $firstName);
   }

   if($lastName && $lastName !== '')
   {
     $this->db->where('employees.last_name', $lastName);
   }

   if($dept && $dept !== '')
   {
     $this->db->where('departments.dept_name', $dept);
   }

   if($title && $title !== '')
   {
     $this->db->where('titles. title', $title);
   }


   $query = $this->db->get('employees');
}

要详细说明codeigniter,我使用的是if($dept && $dept !== ''),因为$this->input->get('lastname')如果未设置则返回false,但您可能需要检查它是否等于空字符串。可能有更好的方式来写这个

您还可以$this->db->like改进搜索。请查看:http://ellislab.com/codeigniter/user-guide/database/active_record.html