使用CodeIgniter更新数据库记录

4

你好,我正在使用CodeIgniter,并成功地将ID号码和电话号码提交到名为“offers”的表格中,这两个字段都是整数类型。但是,当我尝试更新特定ID对应的电话号码时,数据库中没有任何更改。下面是我的控制器、模型和视图:

newOffer 控制器

   <?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 -->
   ?>


1
$idNum不在upddata模型函数的作用域内。 - allen213
4个回答

1

你没有在这里向你的模型传递任何数据

$this->offer_model->upddata();

您需要添加类似以下内容的代码:


$this->offer_model->upddata($this->input->post());

同样,在您的模型代码中,$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

$idNum 也未定义。 - gen_Eric
@RocketHazmat 我正想说到那个问题,谢谢:请看我对上一个问题的评论。 - allen213

0

确保您从插入或更新数据的同一张表中获取数据。

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);
        }
    }

祝你好运 :)


0

使用构造函数在控制器中加载您的模型,始终将post数据传递给模型函数,只有这样您才能在模型函数中找到表单的post数据。

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

这里是一个模型,它从数组中获取表单数据。

<?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();
     }
}
?>

-1
在你的模型中做类似这样的事情:
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;
} 

这是程序。如果您有100个输入字段,则不可能将每个值添加到数组中。如果您遇到任何问题,请告诉我。

更新

更改

<?php echo form_open('newOffer/addOffer'); ?>

<?php echo form_open('newOffer/updateOffer'); ?>

在视图中更新值


最好在控制器中检索表单数据,然后将其传递给模型。为什么要将数据作为参数传递,然后删除它,再填充它呢?这样会有点打破MVC模式的规范,我认为。 - allen213
它也可以在控制器中完成,但这不会破坏MVC结构。 - ABorty
我不同意。如果您想更新行,但不是通过post怎么办?另外,在您的示例中,$data作为函数参数的目的是什么? - allen213
是的,它说......第一个示例:灵活,第二个示例:“该死,又出问题了!”两者都是正确的。所以你不应该因此被投票否决。 - ABorty
我已经按照您的建议调整了我的updata()函数,但它似乎是添加而不是更新。例如,我想要更新ID为1的电话号码。@Aborty - Zidane
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接