Create Database table film_list
CREATE TABLE IF NOT EXISTS `film_list` (
`FID` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`category` varchar(255) NOT NULL,
`length` varchar(255) NOT NULL,
`rating` varchar(255) NOT NULL,
`price` varchar(255) NOT NULL,
PRIMARY KEY (`FID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
Insert data
INSERT INTO `film_list` (`FID`, `title`, `category`, `length`, `rating`, `price`) VALUES
(1, 'Final Fantasy', 'Animation', '1:30', 'G', '2.0'),
(2, 'My Sassy Girl', 'Love Story', '1:40', 'G', '2.3'),
(3, 'The Shawshank Redemption', 'Horror', '1:40', 'PG', '3'),
(4, 'The Godfather', 'Drama', '1:60', 'G', '1.3'),
(5, 'Star Wars ', 'Animation', '2:10', 'G', '2'),
(6, 'Shichinin no samurai ', 'Action', '1:10', 'G', '2'),
(7, 'The Matrix', 'Action', '1:25', 'G', '1'),
(8, 'The Lord of the Rings: The Two Towers', 'Action', '2.60', 'G', '2');
Create Table Category
CREATE TABLE IF NOT EXISTS `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
Insert data category
INSERT INTO `category` (`id`, `name`) VALUES
(1, 'Action'),
(2, 'Animation'),
(3, 'Children'),
(4, 'Comedy'),
(5, 'Drama'),
(6, 'Horror'),
(7, 'Love Story'),
(8, 'Sports');
Create table
CREATE TABLE IF NOT EXISTS `ci_query` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`query_string` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=19 ;
Setup base_url
application\config\config.php
$config['base_url'] = 'http://localhost/DEVELOPMENT/CODEIGNATER/';
Create Controller
application\controllers\films.php
<?php class Films extends CI_Controller{ function __construct() { parent:: __construct(); $this->load->helper("url"); $this->load->model('Film_model'); $this->load->helper(array('form', 'url')); } function display($query_id = 0, $sort_by = 'title', $sort_order = 'asc', $offset = 0) { $limit = 5; $data['fields'] = array( 'FID' => 'ID', 'title' => 'Title', 'category' => 'Category', 'length' => 'Length', 'rating' => 'Rating', 'price' => 'Price' ); $this->input->load_query($query_id); $query_array = array( 'title' => $this->input->get('title'), 'category' => $this->input->get('category'), 'length_comparison' => $this->input->get('length_comparison'), 'length' => $this->input->get('length'), ); $data['query_id'] = $query_id; $this->load->model('Film_model'); $results = $this->Film_model->search($query_array, $limit, $offset, $sort_by, $sort_order); $data['films'] = $results['rows']; $data['num_results'] = $results['num_rows']; // pagination $this->load->library('pagination'); $config = array(); $config['base_url'] = site_url("films/display/$query_id/$sort_by/$sort_order"); $config['total_rows'] = $data['num_results']; $config['per_page'] = $limit; $config['uri_segment'] = 6; $this->pagination->initialize($config); $data['pagination'] = $this->pagination->create_links(); $data['sort_by'] = $sort_by; $data['sort_order'] = $sort_order; $data['category_options'] = $this->Film_model->category_options(); $this->load->view('films', $data); } function search() { $query_array = array( 'title' => $this->input->post('title'), 'category' => $this->input->post('category'), 'length_comparison' => $this->input->post('length_comparison'), 'length' => $this->input->post('length'), ); $query_id = $this->input->save_query($query_array); redirect("films/display/$query_id"); } }Create Models
application\models\Film_model.php
<?php class Film_model extends CI_Model { function search($query_array, $limit, $offset, $sort_by, $sort_order) { $sort_order = ($sort_order == 'desc') ? 'desc' : 'asc'; $sort_columns = array('FID', 'title', 'category', 'length', 'rating', 'price'); $sort_by = (in_array($sort_by, $sort_columns)) ? $sort_by : 'title'; // results query $q = $this->db->select('FID, title, category, length, rating, price') ->from('film_list') ->limit($limit, $offset) ->order_by($sort_by, $sort_order); if (strlen($query_array['title'])) { $q->like('title', $query_array['title']); } if (strlen($query_array['category'])) { $q->where('category', $query_array['category']); } if (strlen($query_array['length'])) { $operators = array('gt' => '>', 'gte' => '>=', 'eq' => '=', 'lte' => '<=', 'lt' => '<'); $operator = $operators[$query_array['length_comparison']]; $q->where("length $operator", $query_array['length']); } $ret['rows'] = $q->get()->result(); // count query $q = $this->db->select('COUNT(*) as count', FALSE) ->from('film_list'); if (strlen($query_array['title'])) { $q->like('title', $query_array['title']); } if (strlen($query_array['category'])) { $q->where('category', $query_array['category']); } if (strlen($query_array['length'])) { $operators = array('gt' => '>', 'gte' => '>=', 'eq' => '=', 'lte' => '<=', 'lt' => '<'); $operator = $operators[$query_array['length_comparison']]; $q->where("length $operator", $query_array['length']); } $tmp = $q->get()->result(); $ret['num_rows'] = $tmp[0]->count; return $ret; } function category_options() { $rows = $this->db->select('name') ->from('category') ->get()->result(); $category_options = array('' => ''); foreach ($rows as $row) { $category_options[$row->name] = $row->name; } return $category_options; } }Create View
application\views\films.php
<html lang="en-US"> <head> <title>Films</title> <meta charset="UTF-8"> <style> * { font-family: Arial; font-size: 12px; } table { border-collapse: collapse; } td, th { border: 1px solid #666666; padding: 4px; } div { margin: 4px; } .sort_asc:after { content: "▲"; } .sort_desc:after { content: "▼"; } label { display: inline-block; width: 120px; } </style> </head> <body> <?php echo form_open('films/search'); ?> <div> <?php echo form_label('Title:', 'title'); ?> <?php echo form_input('title', set_value('title'), 'id="title"'); ?> </div> <div> <?php echo form_label('Category:', 'category'); ?> <?php echo form_dropdown('category', $category_options, set_value('category'), 'id="category"'); ?> </div> <div> <?php echo form_label('Length:', 'length'); ?> <?php echo form_dropdown('length_comparison', array('gt' => '>', 'gte' => '>=', 'eq' => '=', 'lte' => '<=', 'lt' => '<') , set_value('length_comparison'), 'id="length_comparison"'); ?> <?php echo form_input('length', set_value('length'), 'id="length"'); ?> </div> <div> <?php echo form_submit('action', 'Search'); ?> </div> <?php echo form_close(); ?> <div> Found <?php echo $num_results; ?> films </div> <table> <thead> <?php foreach($fields as $field_name => $field_display): ?> <th <?php if ($sort_by == $field_name) echo "class=\"sort_$sort_order\"" ?>> <?php echo anchor("films/display/$query_id/$field_name/" . (($sort_order == 'asc' && $sort_by == $field_name) ? 'desc' : 'asc') , $field_display); ?> </th> <?php endforeach; ?> </thead> <tbody> <?php foreach($films as $film): ?> <tr> <?php foreach($fields as $field_name => $field_display): ?> <td> <?php echo $film->$field_name; ?> </td> <?php endforeach; ?> </tr> <?php endforeach; ?> </tbody> </table> <?php if (strlen($pagination)): ?> <div> Pages: <?php echo $pagination; ?> </div> <?php endif; ?> </body> </html>Create file My_Input.php
application\core\My_Input.php
<?php class MY_Input extends CI_Input { function save_query($query_array) { $CI =& get_instance(); $CI->db->insert('ci_query', array('query_string' => http_build_query($query_array))); return $CI->db->insert_id(); } function load_query($query_id) { $CI =& get_instance(); $rows = $CI->db->get_where('ci_query', array('id' => $query_id))->result(); if (isset($rows[0])) { parse_str($rows[0]->query_string, $_GET); } } }View
http://localhost/CODEIGNATER/films/display/