0

谁能给我任何建议,告诉我如何获得一个带有 4 个文本字段的 html 表单来搜索我的数据库并在其中查找任何相关数据并显示它?

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

至少必须填写一个字段才能进行搜索操作,该字段可以是 4 个字段中的任何一个(随机)。这些字段被命名为:

名字 姓氏 部门职务

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

部门(dept_no,dept_name)员工(emp_no,first_name,last_name)title(emp_no,title)

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

(departments_employees) => dept_emp(emp_no, dept_no)

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

<?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');

    }

}
}

?>

我的视图在表格中显示结果,所以到目前为止一切正常,没有错误。经过数小时的研究,我想不出办法做到这一点。如果有人有我可以遵循的任何想法或类似教程,请告诉我!将非常感激!谢谢 :)

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

4

2 回答 2

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');
于 2012-12-30T06:08:18.590 回答
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

于 2012-12-30T06:15:06.960 回答