Php 多次上传调用CodeIgniter控制器
第一次来这里,希望不是最后一次 我目前正在开发一个基于CodeIgniter的应用程序。一切都很顺利,直到我意识到(通过使用CI日志记录),页面视图中使用的Uploadify脚本正在多次调用控制器 为了更好地解释 我的新闻控制器有一个包含此代码的编辑Php 多次上传调用CodeIgniter控制器,php,javascript,codeigniter,uploadify,Php,Javascript,Codeigniter,Uploadify,第一次来这里,希望不是最后一次 我目前正在开发一个基于CodeIgniter的应用程序。一切都很顺利,直到我意识到(通过使用CI日志记录),页面视图中使用的Uploadify脚本正在多次调用控制器 为了更好地解释 我的新闻控制器有一个包含此代码的编辑 public function edit(){ $id = (int)$this->uri->segment(4); if (empty($id)){ $this->session->set
public function edit(){
$id = (int)$this->uri->segment(4);
if (empty($id)){
$this->session->set_flashdata('error', "ID can't be empty");
redirect('admin/news');
}
//article data called here and stored in $data
$data = $this->news_model->fetch_article($id);
$data['title'] = "News";
$data['news_links'] = $this->news_model->get_news_links();
$data['form_url'] = "admin/edit";
$data['available_pages'] = $this->news_model->get_article_pages();
$data['css'] = "/css/extra/uploadify.css";
$data['js'] = "/js/extra/jquery.uploadify-3.1.min.js";
$data['edit'] = true;
//set uploadify key
$data['key'] = md5(time() . $this->session->userdata('session_id'));
// a unique key is created, then stored in database
// the key is then passed to the uploadify script
// when the upload is being done it is checked with the one in the database
// if the two match files are uploaded. This is a workaround for flash
// session problem
$this->news_model->set_key($data['key']);
if($this->input->post('submit')){
$this->save_article("update",$id);
}
$this->load->view("admin/news",$data);
}
在我看来,我上传了这样一个名字
$('#extra_data').uploadify({
'swf' : '<?php echo site_url(); ?>flash/uploadify.swf',
'uploader' : '<?php echo site_url(); ?>admin/uploadify',
'multi' : true,
'auto' : false,
'fileTypeExts' : '*.jpg;*.jpeg;*.gif;*.png',
'fileTypeDesc' : 'Images',
'formData' : {'key' : '<?php echo $key; ?>'},
'onQueueComplete': function(){
ajax_images(); //calls a function that loads uploaded image thumbnails
}
});
我的uploadify控制器有上面提到的$key
检查和文件上传代码
请注意,有两个控制器-新闻和上传
问题是,通过隔离代码的某些部分,我发现UploadifyJavaScript再次调用了新闻控制器。这是日志的链接-
发生这种情况的问题是,密钥被重置,传递给Javascript的密钥与存储在数据库中的密钥不匹配。我在这件事上被难住了
欢迎提供任何建议、修复和评论
谢谢大家! 您不会同时使用两个控制器功能,只使用一个。这不是CI的工作方式。因此,将javascript指向
news/edit
controller函数。在这个函数中,您需要包含执行实际上传的代码,因为上面我没有看到它。但首先,纠正你的JS
因此,与此相反:
'uploader' : '<?php echo site_url(); ?>admin/uploadify',
'uploader':'admin/uploadify',
这样做:
'uploader' : '<?php echo site_url(); ?>news/edit',
“上传者”:“新闻/编辑”,
和从
管理/上传
控制器功能添加到新闻/编辑
您的代码。好吧,有两个控制器是有原因的。因为我使用的是身份验证,所以我不能使用受身份验证保护的控制器,这就是为什么在flash上传程序为自己创建新会话时,我为上传使用了另一个控制器。我已经看到了另一个控制器被使用的实践,并且由使用这两个控制器组合的人提出建议。上传程序异步地将文件发送到另一个控制器,就像我使用普通表单那样。我在这里遗漏了什么吗?是的,使用两个控制器功能很好,只是不能同时使用。你能在你的问题中显示你的管理/上传代码中有什么吗?@MathiasBishof你知道当你点击上传按钮时如何检查Chrome开发者工具或Firebug中的响应吗?我想看看AJAX调用会产生什么样的PHP错误。我很难理解你的路线。因此,AJAX上传部分先是admin/uploadify,然后是admin/news,以提交页面?没有实际的AJAX调用,因为所有文件处理/发送到服务器的操作都由flash电影处理。如果密钥是静态密钥且未重新生成,则脚本不会生成任何错误。否则它就不会上传,因为密钥不匹配。这也是路由Uploadify(我没有使用Uploadifyve,它是一个HTML5版本的上传程序)调用“Uploadify”控制器的一种解释,上传图像,将它们存储在数据库中。提交实际表单时,它会调用admin/news controller并将表单数据保存到数据库中。@MathiasBishof单击“上载”按钮时,您知道如何在Chrome Developer tools或Firebug中检查响应吗?我想知道是否返回了$key
。-@MathiasBishof您的问题解决了吗?
'uploader' : '<?php echo site_url(); ?>admin/uploadify',
'uploader' : '<?php echo site_url(); ?>news/edit',