【问题标题】:Unable to update or delete rows in database using codeigniter无法使用 codeigniter 更新或删除数据库中的行
【发布时间】:2017-07-21 13:53:55
【问题描述】:

我是 code-igniter 的新手,在我的 database 中更新和删除 rows 时遇到未知问题。我的控制器代码是:

 <?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Nhome extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
    }

    public function index()
    {
        $this->load->Model('N_model');
        $data['r'] = $this->N_model->getdata();
        $this->load->view('Homeview',$data);
    }
    public function edit()
    {
        $id = $this->input->get('id');
        $this->load->Model('N_model');
        $data['s'] = $this->N_model->editdata();
        $this->load->view('Neditview',$data);
    }
    public function loadEdit()
    {
        $id = $this->input->get('id');
        $this->load->view('Neditview');
    }
    public function insertdata()
    {
        $eID = isset($_POST['Id'])?$_POST['Id']:'';

        $arr['Name'] = $_POST['Name'];
        $arr['Gender'] = $_POST['Gender'];
        $arr['Email'] = $_POST['Email'];

        $this->load->Model('N_model');
        $res = $this->N_model->updatedata($arr , $eID);
        if($res){
            header('location:'.base_url()."index.php/Nhome/".$this->index());
        }
    }
    public function delete(){
        $this->load->Model('N_model');
        $id = $this->input->get('Id');
        $this->N_model->deletedata($id);
        $this->index();
    }
}

我的模型代码是:

<?php
class N_Model extends CI_Model{

    public $Id;
    public $Name;
    public $Gender;
    public $Email;

    public function __construct()
    {
        parent::__construct();
    }

    public function getdata()
    {
        $va = $this->db->get('newprac');
        $res = $va->result();
        return $res;
    }
    public function editdata($id)
    {
        $vr = $this->db->where('Id',$id);
        return $vr;
    }
    public function updatedata($data , $id){
        $this->db->where('newprac.Id',$id);
        $res = $this->db->update('newprac', $data);
        return $res;
    }
    public function deletedata($id)
    {
        $this->db->where('newprac.id',$id);
        $this->db->delete('newprac');
        if($this->db->affected_rows()>0)
        {
            return true;
        }
        else { return false; }
    }
}

【问题讨论】:

  • 那么,您面临什么困难?有什么错误吗?如果是,请也提供该错误。
  • 不,实际上没有错误..我认为这是一些逻辑错误,因为在编辑行时,会出现编辑视图,我也可以输入信息,按下提交按钮后,它会重定向到主页..但没有数据被更新甚至删除。你能告诉我为什么会这样吗?
  • 如果您从模型中传递 true 或 false,那么为什么不从控制器检查它是否为 true,如果为 true,则调用视图页面或传递相同的页面。你也可以在你的模型中死掉并回显 $this->db->last_query();看看你生成了什么查询并在你的 phpmyadmin 中运行这个查询,然后你就会明白会发生什么。
  • 请你死在你的删除控制器中并回显 $this->input->get('Id');看看你得到 id 空白会发生什么?

标签: php database codeigniter crud


【解决方案1】:

改变

$this-&gt;db-&gt;where('newprac.id',$id)

$this-&gt;db-&gt;where('id',$id);

【讨论】:

  • 它没有用。我认为这是一些逻辑错误。你能解决吗?
  • 通过 GET id 或 Id 获得的变量的名称是什么?在您的控制器中,您同时使用两者。也许这是帮助。将 $this->input->get('Id') 改为 $this->input->get('id');
【解决方案2】:

将您的代码简化为:

$this->db->where('id',$id)->update('newprac', $data);

【讨论】:

  • 我试过了,也没用。它与简化无关。我找不到任何错误。这只是一些逻辑问题
【解决方案3】:

用此代码替换您的控制器。因为我认为您将数据作为 post 方法传递,因此您应该在检索数据时使用 post。

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Nhome extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
    }

    public function index()
    {
        $this->load->Model('N_model');
        $data['r'] = $this->N_model->getdata();
        $this->load->view('Homeview',$data);
    }
    public function edit()
    {
        $id = $this->input->post('id');
        $this->load->Model('N_model');
        $data['s'] = $this->N_model->editdata();
        $this->load->view('Neditview',$data);
    }
    public function loadEdit()
    {
        $id = $this->input->post('id');
        $this->load->view('Neditview');
    }
    public function insertdata()
    {
        $eID = isset($_POST['Id'])?$_POST['Id']:'';

        $arr['Name'] = $_POST['Name'];
        $arr['Gender'] = $_POST['Gender'];
        $arr['Email'] = $_POST['Email'];

        $this->load->Model('N_model');
        $res = $this->N_model->updatedata($arr , $eID);
        if($res){
            header('location:'.base_url()."index.php/Nhome/".$this->index());
        }
    }
    public function delete(){
        $this->load->Model('N_model');
        $id = $this->input->post('Id');
        $this->N_model->deletedata($id);
        $this->index();
    }
}

【讨论】:

    【解决方案4】:

    您是否尝试使用 Chrome 调试器进行调试。您可能会在调试器中得到确切的错误。我建议您尝试一次,让我知道错误名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多