使用codeigniter删除数据库记录

时间:2014-04-25 20:23:27

标签: php mysql database html5 codeigniter

好的,在这里苦苦挣扎,我对codeigniter很新,对PHP很新。我想从数据库中删除一条记录。我收到控制器错误。这是我的代码

控制器:

    public function removeitem(){
    $this->load->helper(array('form', 'url'));
    $this->load->view('vRemove');
}

public function doremove(){
    $this->load->model("mphoto");

    $this->mphoto->removeItem($id);
    $this->load->view('removed_success');
}

型号:

    public function removeItem($id){
    $this->db->where('ProductID', $id);
    $this->db->delete('Streamline');
}        

和查看:

    <?php echo form_open_multipart('site/doremove');?>

    <p>Are you sure you want to remove this item?</p>

    <a href="<?php echo base_url();?>index.php/site/admin">
      <input type="button" value="Cancel" />
    </a>
    <div><input type="submit" value="Submit" /></div>
    </form>
    <?php  ?>

我得到的错误是:

遇到PHP错误

严重性:注意

消息:未定义的变量:id

文件名:controllers / site.php

行号:114

这一行:

    $this->mphoto->removeItem($id);

编辑:更改控制器中的以下代码后,错误不再存在,但现在的问题是数据库中的项目未被删除。

    public function doremove(){
    $this->load->model("mphoto");
    $id = $this->input->get('ProductID');
    $this->mphoto->removeItem($id);
    $this->load->view('removed_success');
}

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

控制器的$id函数中的

doremove()未定义。您需要将ID的值从视图传递给控制器​​;有几种常见的方法可以实现这一目标。

URI段参数(GET)

将ID传递给URI段。例如:http://yousite.com/site/doremove/2会将2作为参数传递给doremove控制器中的site函数。

查看

<p>Are you sure you want to remove this item?</p>
// Change 2 to the id of the product you want to remove - you can do this dynamically
<a href="echo site_url('site/doremove/2');">Yes</a>
// Add cancel button etc...

<强>控制器

public function doremove($id = null) {
    if ($id === null)
    {
        // The ID isn't set - show an appropriate message, redirect, whatever you want...
    }
    else
    {
        $this->load->model("mphoto");

        // Is the delete operation sucessful?
        if ($this->mphoto->removeItem($id))
            $this->load->view('removed_success');
        else
            $this->load->view('removed_failure'); // Or whatever you want
    }
}

通过表格(POST)

查看

<?php echo form_open('site/doremove');?>
  <p>Are you sure you want to remove this item?</p>
  // Change 2 to the id of the product you want to remove
  <input type="hidden" name="product_id" value="2" />
  <input type="submit" value="Submit" />
</form>

<强>控制器

public function doremove() {
    $id = $this->input->post('product_id');
    if($id)
    {
        $this->load->model("mphoto");    

        // Is the delete operation sucessful?
        if ($this->mphoto->removeItem($id))
            $this->load->view('removed_success');
        else
            $this->load->view('removed_failure'); // Or whatever you want
    }
    else
    {
         // The ID isn't set - show an appropriate message, redirect, whatever you want...
    }

}

检查对数据库执行的操作是否成功也是一个好主意。

<强>模型

public function removeItem($id) {
    // Attempt to delete the row
    $this->db->where('ProductID', $id);
    $this->db->delete('Streamline');
    // Was the row deleted?
    if ($this->db->affected_rows() == 1)
        return TRUE;
    else
        return FALSE;
}

答案 1 :(得分:1)

在功能doremove() $id未定义的情况下,您需要获取资源的$id

如果HTTP方法为 GET ,则需要使用$id = $this->input->get('the_input_name');

或者如果是 POST $id = $this->input->post('the_input_name');

或者您可以使用用户友好的方式,在函数范围doremove($id)中传递$ id,只需使您的网址设置正确('site/doremove/$id')

阅读User Guide,它会对您的代码产生重大影响。 在这个链接中有一个使用codeigniter的简单表单的好例子:http://ellislab.com/codeigniter/user-guide/libraries/form_validation.html