please help me how to display data to the view page after insert query into database.
view page(member_view.php):
<form action="<?php member_controller/insert_info; ?>" method="post">
<input type="text" name="fname">
<input type="text" name="lname">
<input type="submit" name="submit">
</form>
<?php
if($res){
foreach($res as $data){
echo $data['fname'];
echo $data['lname'];
}
}
?>
controller page(member_controller.php):
<?php
class Member_Controller extends CI_Controller {
public function insert_info(){
$data = array('fname' => $this->input->post('fname'),
'lname' => $this->input->post('lname'),
);
$this->load->model('member_model');
$this->member_model->member_posting($data);
$data['username'] = $session_data['username'];
$retrieved_info['res'] = $this->member_model->member_posting($data);
$this->load->view('member_view',$data, $retrieved_info)
}
}
model page(member_model):
<?php
class Member_Model extends CI_Model{
public function member_posting($data=array()){
extract($data);
$query = "INSERT INTO member_table (fname, lname)values ('$fname', '$lname')";
$result = $this->db->conn_id->prepare($query);
$result->execute();
if($result){
$query = "SELECT * FROM member_table WHERE fname = '$fname' AND lname='$lname'";
$result = $this->db->conn_id->prepare($query);
$result->execute();
return $res = $result->fetchAll(PDO::FETCH_ASSOC);
}
}
}
and here would be the pattern:
view(submit form)---->controller(get vars and send to model) --->
model(insert to db and perform select query)--->controller(get the select query results from model)--->view(display the results)
please help me, im just new to codeigniter, hope i can learn from you guys.
This is the way you need to follow.........
View file:member_view.php
<form action="<?php echo ROOT_FOLDER ?>/member_controller/insert_info" method="post">
<input type="text" name="fname">
<input type="text" name="lname">
<input type="submit" name="submit">
</form>
Controller file: member_controller.php
<?php
class Member_Controller extends CI_Controller {
public function insert_info()
{
$data = array(
'fname' => $this->input->post('fname'),
'lname' => $this->input->post('lname'),
);
$this->load->model('member_model');
$this->member_model1->member_posting($data);
$retrieved_info = array();
$retrieved_info['res'] = $this->member_model2->member_posting($data);
$this->load->view('member_view',$data, $retrieved_info)
}
}
Model file: member_model1.php
class Member_Model extends CI_Model{
public function member_posting_inserting($data){
$this->insert_helper('member_table',$data);
}
public function member_posting_retrieving($data){
$query = "SELECT * FROM member_table WHERE fname = '$data['fname']' AND lname='$data['lname']'";
$res=$this->db->query($query);
if($res->num_rows()>0){
return $res->result("array");
}
return array();
}
}
Insert helper function...............
public function insert_helper($table_name, $data_array){
$this->db->insert($table_name,$data_array);
return $this->db->insert_id();
}
This
$this->load->view('member_view',$data, $retrieved_info)
in your case won't do the trick. Read about the views here: http://ellislab.com/codeigniter/user-guide/general/views.html
2nd parameter is data array. 3rd parameter can be TRUE or FALSE, deciding if the view has to be rendered or returned as string.
This should do the trick:
$this->load->view('member_view', $retrieved_info);
Edit:
Just noticed your member_posting() doesn't return anything. It should return $res;
Related
I have four tables in my database named as 'user_login', 'store', 'admin', 'store_product'. when I try fetch data from user_login table, it does not work.
My codes are as below:
View form:
<form method="get">
Enter city: <input type ="text" name="city">
Enter search keyword: <input type="text" name="searchB">
<button type="submit"> Submit </button>
</form>
Controller:
public function search()
{
$this->load->model('searchmodel');
$fc = $this->input->get('city');
$sb = $this->input->get('searchB');
$rr=$this->searchmodel->searchDetail($sb,$fc);
$data['results'] = $rr;
$this->load->view('search/detailResults',$data);
}
Model
public function searchDetail($data,$datacity){
$this->db->select();
$this->db->from('user_login');
$this->db->join('store', 'store.vendor_bri = user_login.bri', 'full outer');
$this->db->join('admin', 'admin.bri = user_login.bri', 'full outer');
$this->db->join('store_product', 'store_product.vendor_bri = user_login.bri', 'full outer');
$this->db->having('store.town', $datacity);
$this->db->or_having('store.country', $datacity);
$this->db->like('user_login.business_name',$data, 'both');
$this->db->or_like('user_login.business_type', $data);
$this->db->or_like('user_login.speciality', $data);
$this->db->or_like('store.locality', $data);
$this->db->or_like('store.vendor_bri', $data,'none');
$this->db->or_like('store_product.pd_universal_code', $data,'none');
$this->db->or_like('store_product.pd_name', $data);
$this->db->or_like('store_product.pd_description', $data);
$query = $this->db->get();
return $query->result_array();
}
I am trying to update a table where id of the row is entered and title is selected through a dropdown list, but I have two problems. Firstly Im not sure how to pass the data to the model, and the second problem is actually updating the table using active record.
controller class
function edit_profile($id)
{
$data = array(
'table_name' => 'user',
'id' => $id ,
'fullname' => $this->input->post('fullname')
);
if($this->user_model->upddata($data))
{
$data['msg']= 'Update Done';
$this->load->view('header_view',$data);
$this->load->view("edit_profile_view.php", $data);
$this->load->view('sidbar_user_view',$data);
$this->load->view('footer_view',$data);
}
else
{
$data['msg']= 'Update Not Done';
$this->load->view('header_view',$data);
$this->load->view("edit_profile_view.php", $data);
$this->load->view('sidbar_user_view',$data);
$this->load->view('footer_view',$data);
}
}
model class
function upddata($data) {
extract($data);
$this->db->where('id', $id);
$this->db->update($table_name, array('fullname' => $fullname));
return true;
}
view
<?php echo form_open("profile/edit_profile/$d->id"); ?>
<div class="tuple">
<h1>full name : </h1>
<input type="text" name="fullname" class="t-name" readonly value="<?=fullname; ?>" >
<div class="clear"></div>
</div>
<input type="submit" name="mysubmit" value="Save" id="mysubmit">
<?php echo form_close(); ?>
and when open url
/site/profile/edit_profile/1
i get this message
Fatal error: Call to a member function upddata() on a non-object
Try to load your model in controller like
function edit_profile($id) {
$this->load->model('user_model');
//Do other things
}
And it is optional like
function uppdata($data) {
$this->db->where('id', $data['id']);
$this->db->update($data['table_name'], array('fullname' => $data['fullname']));
return true;
}
From $data also you can directly get the relavent values.ANd you need to pass $data to the view file not the $data1 because it is un-defined and
Replace
$this->load->view("edit_profile_view.php", $data);
to
$this->load->view("edit_profile_view", $data);
I have a multiform and I need to insert several values to 4 user,news,feed,lat (maybe 6) tables that are related by some ID this is because an event needs all this information.
my form:
<form method="post" action="<?php echo base_url();?>controller/save" name="event"/>
<label>User Name</label>
<!--#####FOR TABLE USER#####-->
<input type="text" name="name">
<input type="text" name="name">
<!--#####FOR TABLE NEWS#####-->
<input type="text" name="title">
<input type="submit" value="body"/>
<!--#######################
OTHER TABLE FIELDS ...
#######################
-->
<input type="submit" value="save"/>
</form>
Now I would like to pass a bidimensional array to event model and then depending on value insert to corresponding table
controller event.php
class Event extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->database();
$this->load->helper('url');
$this->load->model('event_model');
}
public function save()
{
/** Is it possible to fill this bidimensional array with for loops???? **/
$arr_data = array(
array("person", $this->input->post("name") , $this->input->post("address")),
array("news" , $this->input->post("title") , $this->input->post("body" )),
array("feed" , $this->input->post("id_feed") , $this->input->post("main" )),
array("lat" , $this->input->post("lat1" , $this->input->post("lat" ))
);
$this->event_model->insert_tables($arr_data);
}
}
Now How to receive the array in model and do the insert how to declare event_model?
class Event_model extends CI_Model {
function Event_model ()
{
parent::__construct();
}
function insert_tables($arr_data) {
if( "person" )
$this->db->insert(person_tb ,
}
}
Is it necessary to use implode or something, Is there a better way to do this multiple inserting?
I would do something like this...
$person = array('name' => $this->input->post("name"), 'address' => $this->input->post("address"));
$news = array('title' => $this->input->post("title"), 'body' => $this->input->post("body"));
$feed = array('id' => $this->input->post("id_feed"), 'main' => $this->input->post("main"));
$lat = array('lat1' => $this->input->post("lat1"), 'lat' => $this->input->post("lat"));
if($this->person_model->insert($person)) {
$person_id = $this->db->insert_id();
} else {
// handle the problem of not having an id for this entity...
}
if($this->news_model->insert($news)) {
$news_id = $this->db->insert_id();
} else {
// handle the problem of not having an id for this entity...
}
if ($this->feed_model->insert($feed)) {
$feed_id = $this->db->insert_id();
} else {
// handle the problem of not having an id for this entity...
}
if($this->lat_model->insert($lat)) {
$lat_id = $this->db->insert_id();
} else {
// handle the problem of not having an id for this entity...
}
Sounds really complicated...why not have a model for each entity and pass the right fields to the right model? Or create a library that inserts/updates each of your models?
I'm using codeigniter and trying to do an UPDATE query, but it keeps creating a new row like an INSERT query. I'm baffled and searching the web didn't yield much for me. (I'm a bit of a n00b). Any help would be greatly appreciated.
Here is the form:
<form action="<?=base_url();?>blog/new_post" method="post" name="write_new">
<input type="hidden" name="user" value="<?=$user?>">
<label>Title:</label><br>
<input type="text" name="title" value="<?php if(isset($query->title)) { echo $query->title; }?>" size="50"><br>
<label>Date:</label><br>
<input type="text" name="date" size="46" value="<?php if(isset($query->date)) { echo $query->date; }?>" />
<script language="JavaScript">
new tcal ({
// javascript calender thingy
// form name
'formname': 'write_new',
// input name
'controlname': 'date'
});
</script> <br><br>
<label>Article:</label><br>
<textarea name="content" style="width:100%;height:300px;"><?php if(isset($query->article)) { echo $query->article; }?></textarea><br>
<select name="category">
<option value="news">Dreamsy News</option>
<option value="web">From the Interwebs</option>
</select>
<input type="submit"/>
</form>
<div class="clearboth"></div>
Here's the model:
function edit_post($title, $date, $author, $article, $category, $id)
{
$this->load->helper('form'); //loads the CI form helper
$this->load->library('form_validation'); //loads the form validation class
$this->form_validation->set_rules('title', 'title', 'required|min_length[3]|max_length[40]|xss_clean');
$this->form_validation->set_rules('date', 'date', 'required|min_length[5]|max_length[15]|xss_clean');
$this->form_validation->set_rules('category', 'category', 'required|xss_clean');
$this->form_validation->set_rules('content', 'article', 'required|xss_clean');
$this->form_validation->set_rules('user', 'you are not logged in', 'required');
if ($this->form_validation->run() == FALSE) //If the form does not validate
{
$this->load->vars(array('title' => 'Error'));
$this->template->write_view('content', 'error/new_post_fail');
$this->template->render();
}
else
{
$article = htmlentities($article, ENT_QUOTES);
/*$data = array(
'title' => $title,
'date' => $date,
'author' => $author,
'article' => $article,
'category' => $category
);*/
//$this->db->where('id', $id);
//$this->db->update('blog', $data);
$query = 'UPDATE blog SET title = '.$title.' date = '.$date.', author = '.$author.', article = '.$article.', category = '.$category;
$this->db->query($query);
redirect(base_url().'blog');
}
And here's the controller:
public function write()
{
$id = $this->uri->segment(3);
$query = 'SELECT * FROM blog WHERE id = '.$id;
$query = $this->db->query($query);
$query = $query->row();
$title = $query->title;
$user = $this->session->userdata('user_id');
if(isset($id)){ $title = 'Edit: '.$title; } else { $title = 'Write new post'; }
$vars['title'] = $title;
$vars['page'] = 'blog';
$vars['user'] = $user;
$vars['id'] = $id;
$vars['query'] = $query;
$this->load->helper('form'); //loads the CI form helper
$this->load->library('form_validation'); //loads the form validation class
$this->load->vars($vars);
$this->template->write_view('content', 'blog/write');
$this->template->render();
}
<form action="<?=base_url();?>blog/new_post" method="post" name="write_new">
You have to modify the action attribute to call the edit method of your blog controller. Otherwise the new_post method is called, which as far as I can see just inserts the POST data.
Did you set up some route, because i didnt see related function in your above controller which referencing by action tag/attr from your form. It hard to guest where the error came from, if you doesn't include that function.
Some highlight from me, i notice you put form validation, template stuff and even redirection function in models instead put that in your controller.
I think there is no WHERE condition in your UPDATE Query this can be one of the problem of your issue..
be sure only that part of the code is being executed for your problem..
value of FORM INPUT Help!!
//this is just a refrence of $nm and $fid from test_model//
$data['fid']['value'] = 0;
$data['nm'] = array('name'=>'fname',
'id'=>'id');
say i have one form_view with
<?=form_label('Insert Your Name :')?>
<?=form_input($nm)?>
and a function to get single row
function get($id){
$query = $this->db->getwhere('test',array('id'=>$id));
return $query->row_array();
}
then in controller.. index($id = 0)
and somewhere in index
if((int)$id > 0)
{
$q = $this->test_model->get($id);
$data['fid']['value'] = $q['id'];
$data['nm']['value'] = $q['name'];
}
and mysql table has something like 1. victor, 2. visible etc. as a name value
but here its not taking the value of name and id from form_input and not showing it again in form_view in same input box as victor etc so to update and post it back to database...
anyone please help!!
and please be easy as I am new to CI!!
Based on your comment to my first answer, here is a sample of a Controller, Model and View to update a user entry pulled from a table in a database.
Controller
class Users extends Controller
{
function Users()
{
parent::Controller();
}
function browse()
{
}
function edit($id)
{
// Fetch user by id
$user = $this->user_model->get_user($id);
// Form validation
$this->load->library('form_validation');
$this->form_validation->set_rules('name', 'Name', 'required');
if ($this->form_validation->run())
{
// Update user
$user['name'] = $this->input->post('name', true);
$this->user_model->update_user($user);
// Redirect to some other page
redirect('users/browse');
}
else
{
// Load edit view
$this->load->view('users/edit', array('user' => $user));
}
}
}
Model
class User_model extends Model
{
function User_model()
{
parent::Model();
}
function get_user($user_id)
{
$sql = 'select * from users where user_id=?';
$query = $this->db->query($sql, array($user_id));
return $query->row();
}
function update_user($user)
{
$this->db->where(array('user_id' => $user['user_id']));
$this->db->update('users', $user);
}
}
View
<?php echo form_open('users/edit/' . $user['user_id']); ?>
<div>
<label for="name">Name:</label>
<input type="text" name="name" value="<?php echo set_value('name', $user['name']); ?>" />
</div>
<div>
<input type="submit" value="Update" />
</div>
<?php echo form_close(); ?>
It's hard to see the problem from your snippets of code, please try and give a little more information as to the structure of your app and where these code samples are placed.
Presume in the last code listing ('somewhere in index') you are getting $id from the form, but you define the ID of the form input box as 'id' array('name'=>'fname','id'=>'id') rather than an integer value so maybe this is where the problem lies.
Where does the $data array get passed to in the third code listing?
From your question I think you want to display a form to edit a person record in the database.
Controller code
// Normally data object is retrieved from the database
// This is just to simplify the code
$person = array('id' => 1, 'name' => 'stephenc');
// Pass to the view
$this->load->view('my_view_name', array('person' => $person));
View code
<?php echo form_label('Your name: ', 'name'); ?>
<?php echo form_input(array('name' => 'name', 'value' => $person['name'])); ?>
Don't forget to echo what is returned from form_label and form_input. This could be where you are going wrong.