php 使用 codeigniter 更新数据库中的记录
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/18985135/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Update record in database using codeigniter
提问by Zidane
Hi there Iam using codeIgniter and I have managed to simply post a id number and phone number into the a table named "offers" both fields are INT, however when i try update a phone number corresponding to a specific id I see no changes in the database. I have listed my controller , model and view below
嗨,我正在使用 codeIgniter,我设法简单地将 ID 号码和电话号码发布到名为“offers”的表中,这两个字段都是 INT,但是当我尝试更新与特定 ID 对应的电话号码时,我看不到数据库。我在下面列出了我的控制器、模型和视图
newOffer controller
新报价控制器
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
//insert data into db using offer_model model
// other option update submit
class newOffer extends CI_Controller {
function addOffer() {
//if the form is submitted
$this->load->view("check");
$this->load->model("offer_model");
if ($this->input->post('mysubmit')) {
$this->offer_model->entry_insert();
}
}
function updateOffer (){
$this->load->view("check2");
$this->load->model("offer_model");
if ($this->input->post('mysubmit')) {
$this->offer_model->upddata();
}
}
}
?>
offer_model
报价模型
class offer_model extends CI_Model{
public function entry_insert(){
$data = array(
'idNum' => $this->input->post('idNum'),
'phneNum' => $this->input->post('phneNum'),
);
$this->db->insert('offers',$data);
}
public function upddata($data) {
$this->db->where('idNum', $idNum);
$this->db->update('data' ,$data);
//extract($data);
//$data['OfferName']
//$this->db->where('OfferName' , $data['OfferName']);
//$this->db->update($Offers, array('OfferName' => $OfferName));
return true;
}
}
?>
The view to update the values
更新值的视图
<?form _open(base_url()."index.php/newOffer/updateOffer")?>
<div class="form">
// <?php echo form_open('newOffer/addOffer'); ?>
<legend>Please enter details for your new offer</legend>
<label for="ID Number">ID Number: <span class="required">*</span></label>
<input type="text" name="idNum" id="idNum" placeholder="Please enter ID Number/>
<label for="phone Number">Phone Number:</label>
<input type="text" name="phneNum" id="phneNum " placeholder="Please enter phone Number"/>
<fieldset class="submit_field">
<?php echo form_submit('mysubmit', 'Submit Form'); ?>
</fieldset>
</div><!-- end of form div -->
?>
回答by allen213
You aren't passing any data to your model here
您没有在此处将任何数据传递给您的模型
$this->offer_model->upddata();
You need to add something like
你需要添加类似的东西
$this->offer_model->upddata($this->input->post());
Also in your Model code $idNum
is undefined you will need to provide that too.
同样在您的模型代码$idNum
中未定义,您也需要提供它。
e.g:
例如:
public function upddata($data) {
$idNum = $data['idNum'];
unset($data['idNum']);
$this->db->where('idNum', $idNum);
$this->db->update('offers' ,$data);
return true;
}
//etc
回答by Kamlesh Suthar
Make sure you are feting from the same table in which you are inserting or updating data.
确保您从插入或更新数据的同一个表中获取数据。
public function upload($id_akun, $data)
{
$table = "foto";
$this->db->where("id_akun", $data['id_akun']);
$count = $this->db->count_all_results($table);
if ($count < 1) {
$this->db->insert($table, $data);
} else {
$this->db->where('id_akun', $data['id_akun']);
$this->db->update($table, $data);
}
}
Good luck :)
祝你好运 :)
回答by Niklesh_Chauhan
Use construct for load your model in controller And always pass the post data to the model function then only you will find the form post data into model function.
使用构造在控制器中加载您的模型并且始终将发布数据传递给模型函数,然后只有您才能找到表单发布数据到模型函数中。
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
function __construct()
{
parent::__construct();
$this->load->model("offer_model");
}
class newOffer extends CI_Controller {
function addOffer() {
//if the form is submitted
$this->load->view("check");
$this->load->model("offer_model");
if ($this->input->post('mysubmit')) {
$CI_Post = $$this->input->post();
$this->offer_model->entry_insert($CI_Post);
}
}
function updateOffer (){
$this->load->view("check2");
if ($this->input->post('mysubmit')) {
$CI_Post = $$this->input->post();
$this->offer_model->upddata($CI_Post);
}
}
}
?>
Here is model which getting form post data in array.
这是在数组中获取表单发布数据的模型。
<?php
class offer_model extends CI_Model{
public function entry_insert($param=""){
$data = array(
'idNum' => $param['idNum'],
'phneNum' => $param['phneNum'],
);
$this->db->insert('offers',$data);
return $this->db->insert_id();
}
public function upddata($param="") {
$data = array(
'idNum' => $param['idNum'],
'phneNum' => $param['phneNum'],
);
$this->db->where('idNum', $idNum);
$this->db->update('data' ,$data);
return $this->db->affected_rows();
}
}
?>
回答by ABorty
in your model do something like
在你的模型中做类似的事情
public function upddata() {
$data=array();
$data=$this->input->post(); //get all post value to data array
$idNum=$data['idNum'];
unset($data['idNum']); // unset unnecessary values
$this->db->where('idNum', $idNum)->update('offers' ,$data);
return true;
}
this is the procedure.If you have 100 input fields then its not possible to add every value to an array. Please let me know if you face any problem.
这是过程。如果您有 100 个输入字段,则不可能将每个值都添加到数组中。如果您遇到任何问题,请告诉我。
update
更新
change
改变
<?php echo form_open('newOffer/addOffer'); ?>
to
到
<?php echo form_open('newOffer/updateOffer'); ?>
in The view to update the values
在视图中更新值