好的,在这里苦苦挣扎,我对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');
}
非常感谢任何帮助。
答案 0 :(得分:3)
$id
函数中的 doremove()
未定义。您需要将ID的值从视图传递给控制器;有几种常见的方法可以实现这一目标。
将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
}
}
查看强>
<?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