Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多次上传调用CodeIgniter控制器_Php_Javascript_Codeigniter_Uploadify - Fatal编程技术网

Php 多次上传调用CodeIgniter控制器

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

第一次来这里,希望不是最后一次

我目前正在开发一个基于CodeIgniter的应用程序。一切都很顺利,直到我意识到(通过使用CI日志记录),页面视图中使用的Uploadify脚本正在多次调用控制器

为了更好地解释

我的新闻控制器有一个包含此代码的编辑

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',