用户
 找回密码
 入住 CI 中国社区
搜索
查看: 4250|回复: 12
收起左侧

[讨论/交流] 为什么通过URL传值后会多次的插入数据?

[复制链接]
发表于 2011-8-31 17:35:12 | 显示全部楼层 |阅读模式
碰到一个很诡异的问题,在view层通过URL传值到CONTROL层后,原本MODEL层里的插入语句会重复的插入多条,如果去除URL上的参数,或者通过session传值,就没有问题了。有人知道是什么原因吗?谢谢了~
发表于 2011-8-31 17:39:10 | 显示全部楼层
贴代码~
 楼主| 发表于 2011-8-31 17:47:48 | 显示全部楼层
view层的连接
<a href="<?php echo site_url("house/house/update_estate_page/".$rows['EID'])?>">更新
Control层
function update_estate($estate_id)
      {
              $this->load->model('admin_user_model');       
        $role_id = $this->session->userdata('RoleKey');
        $data['role_right'] = $this->admin_user_model->get_role_right($role_id);
              $this->load->model('house/estate_model');
              $this->estate_model->update_estate($estate_id);
              $data['estate'] = $this->estate_model->query_estate();
            $this->load->view('house/query_estate_view',$data);
      }
model层
function  update_estate($estate_id)
{
        $BelongRegion  = $this->input->post('Province');
        $BelongRegion .= ','.$this->input->post('City');
        $BelongRegion .= ','.$this->input->post('District');
        $data = array(
               'EstateName' => $this->input->post('EstateName'),
               'EstateAbbr' => $this->input->post('EstateAbbr'),
               'BelongRegion' => $BelongRegion,
                   'BelongSector' => $this->input->post('BelongSector'),
               'DetailAddress' => $this->input->post('DetailAddress'),
               'Channel' => $this->input->post('Channel'),
                   'Memo' => $this->input->post('Memo')
            );
$this->db->where('EID', $estate_id);
$this->db->update('estateinfo', $data);

     $data = array(
               'Phone' => $this->input->post('Phone'),
               'PropertyType' => $this->input->post('PropertyType'),
                   'ProPayDate' => $this->input->post('ProPayDate')
            );
$this->db->where('EID', $estate_id);
$this->db->update('buildinfo', $data);

$log['OperatorID']= $this->session->userdata['userID'];
$log['OperatorContent'] = "更新楼盘" ;
$log['LogTime'] =date('y-m-d H:i:s',time());
$log['ConstraintName'] = "add_estateUpdate_view.php";
$this->db->insert('sys_log',$log);       
}
红色部分的插入语句就是出现问题的地方
 楼主| 发表于 2011-8-31 19:19:38 | 显示全部楼层
Hex 发表于 2011-8-31 17:39
贴代码~

我发现最后跳转页面只要不跳转到本页面就不会出现重复插入的情况,好诡异啊~~~~~~
 楼主| 发表于 2011-8-31 19:54:52 | 显示全部楼层
我越来越觉得这根本就是CI的一个BUG
发表于 2011-8-31 20:26:41 | 显示全部楼层
应该不是 BUG,因为 insert 方法就是一个 PHP 函数调用,你不执行两次,他不可能执行两次。

这个功能在我这里很正常。
 楼主| 发表于 2011-8-31 20:39:40 | 显示全部楼层
Hex 发表于 2011-8-31 20:26
应该不是 BUG,因为 insert 方法就是一个 PHP 函数调用,你不执行两次,他不可能执行两次。

这个功能在我 ...

控制层的跳转页面我换成了一个空页面 或者是一个随便的错误页面 就没有这个问题了 ,这不符合逻辑啊, $this->load->view('house/query_estate_view',$data)这个方法不就是简单的调用页面吗?怎么会和插入数据有关呢?
发表于 2011-9-1 11:04:20 | 显示全部楼层
hnu135 发表于 2011-8-31 20:39
控制层的跳转页面我换成了一个空页面 或者是一个随便的错误页面 就没有这个问题了 ,这不符合逻辑啊, $t ...

load->view 就是一个 include 操作,但这里使用了 output buffer,所以不是即时输出给浏览器。

最好把你的程序打包发上来,我帮你看看。
发表于 2011-9-1 11:09:07 | 显示全部楼层
打开CI的log,估计你有一个页面执行两次的问题,看日志就清楚了
发表于 2011-9-1 16:57:53 | 显示全部楼层
肯定有一个地方又执行了一次insert操作。
你可以挂一下基准测试类,查看一下数据库的操作详细部分。就能看出来。

本版积分规则