【发布时间】:2018-02-18 19:38:04
【问题描述】:
我正在将一篇文章上传到我的网站。我首先上传文件,然后在数据库中为该文章创建一个条目。因此,如果在数据库中成功创建了文件条目,那么一切正常。但是如果上传了一个文件并且没有在数据库中创建记录,那么我想删除该文件。问题是如果发生数据库错误,我不会回到我想要删除文件的状态。 那么我做错了什么?以下是我的代码。
型号
public function create($file_name) {
$new_article=new Article_model();
$new_article->active=1;
$new_article->name= $file_name;
$needles=array(' ','_','%','$','#','/','\\');
foreach($needles as $needle)
{
$file_name=str_replace($needle, '-', $file_name);
}
$new_article->slug= $file_name;
$new_article->author_id=$user;
$new_article->approved=0;
$new_article->views=0;
$new_article->downloads=0;
if($this->db->insert(static::$table_name,$new_article))
{
$new_article->id=$this->db->insert_id();
return $new_article->id;
}
else
{
return FALSE;
}
}
控制器
public function upload_article()
{
$config['upload_path']= ARTICLES_PATH;
$config['allowed_types'] = 'docx|doc|pdf|txt|odt';
$config['max_size'] = 10000;
//the following line is in accordance with the auto_load
$this->upload->initialize($config);
if ( ! $this->upload->do_upload('article'))
{
$error = array('error' => $this->upload->display_errors());
$error['upload_path']=$config['upload_path'];
$this->pmp->header('article/new_article', $error);
}
else
{
$upload_data=$this->upload->data();
$result=$this->article->create($upload_data['file_name']);
if($result!==FALSE)
{
$this->session->set_flashdata('message','Article Submitted Successfully.');
redirect('/article/view/'.$result);
}
else
{
//delete file
if( ! unlink(ARTICLES_PATH.$upload_data['file_name']))
{
$this->session->set_flashdata('message','Article Submission Failed.');
}
$this->session->set_flashdata('message','Article Submission Failed.');
redirect('/article/upload_article');
}
}
}
【问题讨论】:
-
数据库配置中是否开启了数据库调试?通常,这会导致脚本中出现 db 错误。如果它关闭,则强制出错并报告发生的情况:您是否在浏览器或日志中收到任何类型的错误消息(启用错误日志记录)。我看不出你的任何条件语句有什么问题。
-
@Alex 是的,调试已打开,是的,我得到唯一约束失败错误(对于 slug)
标签: php codeigniter file-upload