I am listing the registered employee from the db and showing 10 employee per page. I'm using codeigniter pagination for the purpose.
If I deleted an employee in page 2, after deleting I need to go to page 2 showing rest of the employees in page 2.
View:
<a href="<?php echo $path;?>welcome/delete_employee/employeeid/<?php echo $row->empID;?>/pageNum/<?php echo $currentPage; ?>" onClick="return delAlert()";><img src="<?php echo $path;?>/img/delete.png" height="30px" width="30px" /></a>
Controller:
public function delete_employee()
{
$session_id = $this->session->userdata('logged_in');
if($session_id) {
$array = $this->uri->uri_to_assoc(3);
$count=$array['pageNum']-1;
$i=$count*10;
$this->load->model('welcomemodel','m',true);
$this->m->deleteemployee($array['employeeid']);
$config = array();
$config["base_url"] = base_url() . "welcome/employee";
$config["total_rows"] =$this->m->employee_count();
$config["per_page"] = 10;
$config["uri_segment"] = $array['pageNum'];
$data['showData'] = $this->m->getEmployee($config["per_page"], $i);
$this->pagination->initialize($config);
$data["links"] = $this->pagination->create_links();
$data["currentPage"] =$array['pageNum'];
$this->load->view('header');
$this->load->view('employee',$data);
} else {
$this->load->view('session_expired');
}
}
Model:
public function deleteemployee($employeeid)
{
$this->db->where('empID',$employeeid);
$this->db->delete('employee');
return $this->db->affected_rows();
}
public function getEmployee($limit, $start)
{
$this->db->limit($limit, $start);
$this->db->select()
->from('employee')
->order_by('emp_fname');
$this->db->join('service', 'employee.serviceID = service.serviceID','left');
$query=$this->db->get();
return $query;
}
public function employee_count()
{
return $this->db->count_all("employee");
}
But now the pagination link shows first page's link,even though contents of second page is displayed....
model method
public function employee_count()
{
$result = $this->db->get('employee');
if ($result->num_rows() > 0) {
//employee record available
return true;
}
else
{
// employee record not available
return false;
}
}
View
<?php
$getData = $this->[your model name]->getEmployee($limit, $start);
?>
<?php if ($getData): ?>
//Your Pagination Part Here.....
<?php else: ?>
// else Nothing
<?php endif ?>
Related
I have a problem in codeigniter.
I call a funtion in controller Articles from the view.
<li><a href="index.php/articles/Category/1" ><?php echo $item['CATEGORY'] ?></a></li>
The function
function getCategories() {
$this->db->select('ID_CAT,CATEGORY');
$this->db->from('CATEGORY');
$query = $this->db->get();
if ($query->num_rows() > 0) {
return $query->result_array();
} else {
return FALSE;
}
}
function Category($id_cat) {
if (!$id_cat) {
$id_cat = 0;
}
$this->load->model('graf/home_model');
$data = array();
$data['categories'] = $this->home_model->getCategories();
$filtro_cat = $id_cat;
$data['article'] = $this->home_model->getArticles($filtro_cat);
$this->load->view('graf/articles', $data, TRUE);
}
home_model
function getArticles($filtro_cat) {
$this->db->select('*');
$this->db->from('ARTICLES');
if ($filtro_cat != 0) {
$this->db->where("ID_CAT=".$filtro_cat);
}
$query = $this->db->get();
if ($query->num_rows() > 0) {
return $query->result_array();
} else {
return FALSE;
}
}
When i select the button the url changes to http://localhost/Graf/index.php/articles/Category/1 but does not load
http://localhost/Graf/index.php/articles/
Why?
When you set third argument of load->view() to true it returns string value and does not output anything
Try changing:
$this->load->view('graf/articles', $data, TRUE);
to
$this->load->view('graf/articles', $data);
set the routes.php in folder config, add this code;
$route['articles/Category/(.*)'] = 'articles/$1';
and change the link
<li><a href="<?php echo site_url('index.php/articles/'.$item['ID_CAT']); ?>" ><?php echo $item['CATEGORY'] ?></a></li>
and change your controller to this
$this->load->view('graf/articles', $data);
I am a beginner and wrote a web page based on the tutorial JREAM (MVC).
I've encountered a problem in displaying articles.
How can I send a variable $from (index.php) from the controller to the model?
Of course, I can connect to the database in the index.php but whether that is good?
index.php
$limit = LIMIT; // article per page
$article = $this->Ile[0]['num']; // number of articles
if (isset($_GET['page'])){
$page = $_GET['page'];
} else {
$page = 1;
}
$allpage = round($article/$limit);
$from = $limit * ($page - 1);
// $from send value to model and model return array with article
foreach($this->Article as $key => $value)
{
echo '<div style="float:left;width:660px;"><hr/><br/><p><span class="strong" style="color:#CC0000;">';
echo $value['title'];
echo '</span></p><br/><p>';
echo $value['content'];
echo '</p><div style="height:130px;">';
echo $value['photo'];
echo '</div></div>';
}
echo '<hr/>';
echo '<div style="width: 660px; position: relative; pointer-events: none; text-align: center; top: 14px;">'.$page.' z '.$allpage.'</div>';
if ($page == 1 && $page < $allpage)
{
echo 'STARSZE >>';
}
elseif ($page >= $allpage)
{
echo '<< NOWSZE';
} else {
echo '<< NOWSZE';
echo 'STARSZE >>';
}
?>
news.php
class News extends Controller {
function __construct()
{
parent::__construct();
}
function index()
{
$this->view->title = 'News';
$this->view->Ile = $this->model->Ile();
$this->view->Article = $this->model->Article();
// I can put some value in ...->Article(0); and it works, but how connect in index.php
$this->view->render('header');
$this->view->render('news/index');
$this->view->render('footer');
}
}
news_model.php
<?php
class News_Model extends Model
{
public function __construct()
{
parent::__construct();
}
public function Ile()
{
return $this->db->select('SELECT COUNT(*) as num FROM `articles`');
}
public function Article($from)
{
return $this->db->select('SELECT * FROM `articles` ORDER BY `newsid` DESC LIMIT '.$from.', '.LIMIT.'');
}
}
Regards,
Thomas
You should do this in your controller not in view :
Controller :
$limit = LIMIT; // article per page
$article = $this->view->Ile[0]['num']; // number of articles
if (isset($_GET['page'])){
$page = $_GET['page'];
} else {
$page = 1;
}
$allpage = round($article/$limit);
$from = $limit * ($page - 1);
$this->view->Article = $this->model->Article($form); // This is how you can pass $form to model
And then you can assign This variable to your view like :
$this->view->page = $page
$this->view->allpage = $allpage
Now in view you can use $this->page instead of $page, same for $allpage
Hope it helps
I am trying to write a function to insert, update, and delete data. I can insert data, but can't update the data. The problem is I can't pass id value to my updateform.
Controller:
function update($id = 0){
$this->load->helper('form');
$this->load->helper('html');
$this->load->model('employees_model');
if($this->input->post('upsubmit')){
echo '<pre>';print_r($id);echo '</pre>';
exit();
if($this->input->post('eid')){
$this->employees_model->entry_update();
}
}
$data = $this->employees_model->general();
if((int)$id > 0){
$query =this->employees_model->get($id);
$data['txt_id']['value'] = $query['eid'];
$data['txt_name']['value'] = $query['ename'];
$data['txt_salary']['value'] = $query['esalary'];
$data['txt_emailid']['value'] = $query['eemailid'];
}
$this->load->view('employees_update',$data);
}
Model:
function general(){
$data['base'] = $this->config->item('base_url');
$data['css'] = $this->config->item('css');
$data['id']['value'] = 'eid';
$data['name'] = 'txt_name';
$data['salary'] = 'txt_salary';
$data['emailId'] = 'txt_email';
return $data;
}
function entry_update($id){
$this->load->database();
echo '<pre>';print_r($id);echo '</pre>';
exit();
$data = array(
'ename'=>$this->input->post('txt_name'),
'esalary'=>$this->input->post('txt_salary'),
'eemailid'=>$this->input->post('txt_email'),
);
echo '<pre>';print_r($data);echo '</pre>';
exit();
$this->db->where('eid',$this->input->post($data));
$this->db->update('employee',$data);
//echo '<pre>';print_r($data);echo '</pre>';
echo "Updated successfully";
}
function get($id)
{
$this->load->database();
$query = $this->db->get_where('employee',array('eid'=>$id));
return $query->row_array();
}
Please suggest how to pass Select id values to update form page in views section.
Here is my working sample code. Hopes it helps.
controller
//I am using update from to preload data
function update_form($id)
{
$query=$this->product_model->get($id);
$data['id']=$query['id'];
$data['name']=$query['name'];
$data['price']=$query['price'];
$this->load->view('products/update_product',$data);
}
function update()
{
$this->product_model->save();
redirect('products/index');
}
Model
function get($id=0)
{
if($id==0)
{
$query=$this->db->get('product');
return $query->result_array();
}
else
{
$this->db->where('id',$id);
$query=$this->db->get('product');
return $query->row_array();
}
}
// if **id** is greater than zero mean update, no **id** mean insert
function save()
{
$id=$this->input->post('id');
$name=$this->input->post('name');
$price=$this->input->post('price');
$data=array
(
'name'=>$name,
'price'=>$price
);
if($id>0)
{
$this->db->where('id',$id);
$this->db->update('product',$data);
}
else
{
$this->db->insert('product',$data);
}
}
}
View (view/products/update_product.php)
<?php echo form_open('products/save');?> //form_open('controller_name/function_name');
<?php echo form_hidden('id',$id);?>
<?php echo form_input('name',$name,'placeholder="enter doctor name"');?><br>
<?php echo form_input('price',$pricce,'placeholder="enter doctor phone number"');?><br>
<?php echo form_submit('','Update');?>
<?php echo form_close();?>
id play vita role in updating , you shouldn't include it in View as Hidden Field
At first you created function with parameter $id. But when you call the function without parameter.
change this line
in Controller change this line
$this->employees_model->entry_update();
to
$this->employees_model->entry_update($this->input->post('eid'));
In Model Change this line:
$this->db->where('eid',$this->input->post($data))
to
$this->db->where('eid',$this->input->post('eid'));
Change your update function like as below:
function update($id = 0){
$this->load->helper('form');
$this->load->helper('html');
$this->load->model('employees_model');
if($this->input->post('upsubmit')){
$id= $this->input->post('eid');
if($this->input->post('eid')){
$this->employees_model->entry_update();
}
}
$data = $this->employees_model->general();
if((int)$id > 0){
$query =this->employees_model->get($id);
$data['txt_id']['value'] = $query['eid'];
$data['txt_name']['value'] = $query['ename'];
$data['txt_salary']['value'] = $query['esalary'];
$data['txt_emailid']['value'] = $query['eemailid'];
}
$this->load->view('employees_update',$data);
}
Well I've searched and searched all around but I still can't find a solution to my problem. I'm still new to php and codeigniter so maybe I missed the answer already but anyways, here's what I'm trying to do.
This is my Controller (c_index.php) - calls a search function and performs pagination on the resulting array.
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class C_index extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model('m_search');
$this->load->library("pagination");
$this->load->library("table");
}
/** Index Page for this controller */
public function index()
{
if($this->session->userdata('logged_in')){
$this->load->view('v_user');
}
else{
$this->load->view('index');
}
}
public function search()
{
// start of search
$search_term = $this->input->post('word');
$books = $this->m_search->search_books($search_term);
// start of pagination
$config['base_url'] = "http://localhost/test/index.php/c_index/search";
$config['per_page'] = 5;
$config['num_links'] = 7;
$config['total_rows'] = count($books);
echo $config['total_rows'];
$this->pagination->initialize($config);
$data['query'] = array_slice($books,$this->uri->segment(3),$config['per_page']);
$this->load->view("index",$data);
}
}
Here's my view (index.php) - basically just displays the pagination result
<h3> Search Results </h3>
<!-- table -->
<table class="table table-condensed table-hover table-striped" id="result_table">
<tbody>
<?php
if(isset ($query)){
if(count($query)!=0){
foreach($query as $item){
echo "<tr><td>". $item['title'] ." by " .$item['author'] ."<br/></td></tr>";
}
echo $this->pagination->create_links();
}
else
{
echo "No results found for keyword ' ". $this->input->post('word')." ' .";
}
}
else
{
echo "Start a search by typing on the Search Bar";
}
?>
</tbody>
</table>
My model (m_search.php) - basically searches the database and returns an array of results.
<?php
class M_search extends CI_Model{
function search_books($search_term='default')
{
$filter = $this->input->post('filter');
//echo $filter;
if($filter == 'title')
{
//echo 'title';
$this->db->select('*');
$this->db->from('book');
$this->db->like('title',$search_term);
// Execute the query.
$query = $this->db->get();
return $query->result_array();
}else if($filter == 'author')
{
//echo 'author';
$this->db->select('*');
$this->db->from('book');
$this->db->like('author',$search_term);
// Execute the query.
$query = $this->db->get();
return $query->result_array();
}else if($filter == 'type')
{
//echo 'type';
$this->db->select('*');
$this->db->from('book');
$this->db->like('book_type',$search_term);
// Execute the query.
$query = $this->db->get();
return $query->result_array();
}else if($filter == 'status')
{
//echo 'status';
$this->db->select('*');
$this->db->from('book');
$this->db->like('book_status',$search_term);
// Execute the query.
$query = $this->db->get();
return $query->result_array();
}else
{
//echo 'all';
$this->db->select('*');
$this->db->from('book');
$this->db->like('book_status',$search_term);
$this->db->or_like('book_type',$search_term);
$this->db->or_like('author',$search_term);
$this->db->or_like('title',$search_term);
// Execute the query.
$query = $this->db->get();
return $query->result_array();
}
}
}
Now my problem is keeping the results for the pagination.
The first page is fine but whenever I click on a page link, the results on the table show the whole database and is not limited to my search results.
I've read somewhere that I need to use sessions to keep my search_term so that it works when I switch pages but I don't know where to put it.
Any advice or suggestions would be greatly appreciated. Thanks.
There are several of different ways to handle search and pagination depending on your needs. Based on your existing code, this is what I would do.
Change
$search_term = $this->input->post('word');
to
$search_term = ''; // default when no term in session or POST
if ($this->input->post('word'))
{
// use the term from POST and set it to session
$search_term = $this->input->post('word');
$this->session->set_userdata('search_term', $search_term);
}
elseif ($this->session->userdata('search_term'))
{
// if term is not in POST use existing term from session
$search_term = $this->session->userdata('search_term');
}
function search_books($search_term='default')
{
$filter = $this->input->post('filter');
//echo $filter;
if($filter == 'title')
{
$this->db->like('title',$search_term);
}
else if($filter == 'author')
{
$this->db->like('author',$search_term);
}
else if($filter == 'type')
{
$this->db->like('book_type',$search_term);
}
else if($filter == 'status')
{
$this->db->like('book_status',$search_term);
}
else
{
$this->db->like('book_status',$search_term);
$this->db->or_like('book_type',$search_term);
$this->db->or_like('author',$search_term);
$this->db->or_like('title',$search_term);
// Execute the query.
}
$query = $this->db->get('book');
return $query->result_array();
}
}
Just trying to lessen your Model code, if you don't want to use "session" and want to copy, paste link/url and get same result in your search then you should use uri class in your controller.
you can use following code in your controller all query string will show in pagination links.
$config['reuse_query_string']=TRUE;
for additional parameters in paging link you can un comment following 2 lines.
//$getData = array('s'=>$search);
//$config['suffix'] = '?'.http_build_query($getData,'',"&");
$this->pagination->initialize($config);
Try in this way in your Controller,
public function search()
{
$result=array();
if($this->session->userdata('login_id')!='')
{
$q = trim($this->input->get('q'));
if(strlen($q)>0)
{
$config['enable_query_strings']=TRUE;
$getData = array('q'=>$q);
$config['base_url'] = base_url().'admin/Product/search/';
$config['suffix'] = '?'.http_build_query($getData,'',"&");
$config['first_url'] = $config['base_url'].'?q='.$q;
$config["per_page"] = 10;
$config['use_page_numbers'] = TRUE;
$total_row = $this->Prod_model->search_record_count($q);
$config['total_rows']=$total_row;
$config['num_links'] = $total_row;
$config['cur_tag_open'] = ' <a class="current">';
$config['cur_tag_close'] = '</a>';
$config['next_link'] = 'Next >';
$config['prev_link'] = '< Previous';
if($this->uri->segment(3))
{
$page = $this->uri->segment(3);
}
else
{
$page = 1;
}
$result['search'] = $this->Prod_model->search($q,$config["per_page"],$page);
if(empty($result['search']))
{
echo "no data found";die;
}
else
{
$this->pagination->initialize($config);
$str_links = $this->pagination->create_links();
$result["links"] = explode(' ',$str_links);
$id=$this->session->userdata('login_id');
$result['user']=$this->Home_model->user_details($id);
$this->template->load('prod_table',$result);
}
}
else
{
echo "empty string";die;
}
}
else
{
redirect(base_url()."admin/");
}
}
SOLVED!
if I click page 2 that`s error:
Not Found
The requested URL /rank/GetAll/30 was not found on this server.
My link is:
http://localhost/rank/GetAll/30
Model: Rank_Model
<?php
Class Rank_Model extends CI_Model {
public function __construct() {
parent::__construct();
}
public function record_count() {
return $this->db->count_all("ranking");
}
public function fifa_rank($limit, $start) {
$this->db->limit($limit, $start);
$query = $this->db->get("ranking");
if ($query->num_rows() > 0) {
foreach ($query->result() as $row) {
$data[] = $row;
}
return $data;
}
return false;
}
}
?>
Controller: Rank
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class rank extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->helper("url");
$this->load->helper(array('form', 'url'));
$this->load->model('Rank_Model','',TRUE);
$this->load->library("pagination");
}
function GetAll() {
$config = array();
$config["base_url"] = base_url() . "rank/GetAll";
$config["total_rows"] = $this->Rank_Model->record_count();
$config["per_page"] = 30;
$config["uri_segment"] = 3;
$this->pagination->initialize($config);
$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
$data["results"] = $this->Rank_Model->fifa_rank($config["per_page"], $page);
$data['errors_login'] = array();
$data["links"] = $this->pagination->create_links();
$this->load->view('left_column/open_fifa_rank',$data);
}
}
View Open: open_fifa_rank
<?php
$this->load->view('mains/header');
$this->load->view('login/loggin');
$this->load->view('mains/menu');
$this->load->view('left_column/left_column_before');
$this->load->view('left_column/menu_left');
$this->load->view('left_column/left_column');
$this->load->view('center/center_column_before');
$this->load->view('left_column/fifa_rank');
$this->load->view('center/center_column');
$this->load->view('right_column/right_column_before');
$this->load->view('login/zaloguj');
$this->load->view('right_column/right_column');
$this->load->view('mains/footer');
?>
and View: fifa_rank
<table>
<thead>
<tr>
<td>Pozycja</td>
<td>Kraj</td>
<td>Punkty</td>
<td>Zmiana</td>
</tr>
</thead>
<?php
foreach($results as $data) {?>
<tbody>
<tr>
<td><?php print $data->pozycja;?></td>
<td><?php print $data->kraj;?></td>
<td><?php print $data->punkty;?></td>
<td><?php print $data->zmiana;?></td>
</tr>
<?php } ?>
</tbody>
</table>
<p><?php echo $links; ?></p>
Maybe you know where is my problem?
Now I know where is my problem.
In first page I have link:
http://localhost/index.php/rank/GetAll
But on the next:
http://localhost/rank/GetAll/30
In secend link, I don`t have index.php. How can I fix it?
In $config["base_url"] = base_url() . "rank/GetAll";
I add :
$config["base_url"] = base_url() . "index.php/rank/GetAll";
And it`s ok :)
looking here $data["links"] = $this->pagination->create_links();
you have an array of links as your code says.
foreach( $data["links"] as $links)
{?>
<p><?php echo $links; ?></p>
<?php }
Try defining default value as $page=0 to GetAll() and remove assignment to the $page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0; and provide / after GetAll in url