CodeIgniter来自后期数据未通过

时间:2011-03-06 03:23:14

标签: php forms codeigniter upload

我试图在CodeIgniter中上传文件,但是当我添加enctype =“multipart form-data”时,没有任何帖子数据会通过。完全没有其他领域。但是,当我不添加它,我可以获得其他发布数据,但当然没有文件上传。这里出了什么问题。这是我的观点和控制器:

查看:

<h2>Add a New Album</h2>
<form enctype="multipart/form-data"  method="post" action="<?php echo base_url();?>index.php/photo/newAlbum">

                            <table style="margin-left:5px;">
                                <tr>
                                    <td>     Album Name:</td>
                                    <td><input type="text" name="name" /></td>
                                </tr>
                                <tr>
                                    <td>     Photo .zip File:</td>
                                    <td><input type="file" name="userfile" size="20" /></td>
                                </tr>
                                <tr>
                                    <td></td>
                                    <td><input type="submit" value="Upload Photo File" /></td>
                                </tr>
                            </table>

</form>

控制器仅包含:

var_dump($_POST);

结果是:

array(0) { }

8 个答案:

答案 0 :(得分:3)

您可以添加此表单属性:
enctype="multipart/form-data;charset=utf-8"
而不是:
enctype="multipart/form-data"
您可以看到此link

答案 1 :(得分:2)

实际上,像/ zip或其他一些blob数据这样的多部分数据将包含在$ _FILES数组中,而不是$ _POST数组。 我建议你使用上传库。

视图:upload_form.php

<html>
<head>
<title>Upload Form</title>
</head>
<body>

<?php echo $error;?>

<?php echo form_open_multipart('upload/do_upload');?>

<input type="file" name="userfile" size="20" />

<br /><br />

<input type="submit" value="upload" />

</form>

</body>
</html>

视图:upload_success.php

<html>
<head>
<title>Upload Form</title>
</head>
<body>

<h3>Your file was successfully uploaded!</h3>

<ul>
<?php foreach($upload_data as $item => $value):?>
<li><?php echo $item;?>: <?php echo $value;?></li>
<?php endforeach; ?>
</ul>

<p><?php echo anchor('upload', 'Upload Another File!'); ?></p>

</body>
</html>

控制器:upload.php的

<?php

class Upload extends CI_Controller {

 function __construct()
 {
  parent::__construct();
  $this->load->helper(array('form', 'url'));
 }

 function index()
 { 
  $this->load->view('upload_form', array('error' => ' ' ));
 }

 function do_upload()
 {
  $config['upload_path'] = './uploads/';
  $config['allowed_types'] = 'gif|jpg|png';
  $config['max_size'] = '100';
  $config['max_width']  = '1024';
  $config['max_height']  = '768';

  $this->load->library('upload', $config);

  if ( ! $this->upload->do_upload())
  {
   $error = array('error' => $this->upload->display_errors());

   $this->load->view('upload_form', $error);
  } 
  else
  {
   $data = array('upload_data' => $this->upload->data());

   $this->load->view('upload_success', $data);
  }
 } 
}
?>

这就是全部

答案 2 :(得分:2)

您需要修复do_upload,就像这样..

$this->upload->do_upload('name-of-input-file-element-of-your-form')

例如,在您的视图代码中,您有:

<input type="file" name="userfile" size="20" />

因此,您的do_upload行应该是这样的:

$this->upload->do_upload('userfile')

Saludos!

答案 3 :(得分:1)

有趣。您发布的代码应该有效。我使用你的表单制作了一个快速测试脚本,$ _FILES和$ _POST数据都很好。

我在SO上发现了上一个问题:PHP--parsing multipart form data

听起来你遇到了同样的问题。不幸的是,没有找到真正的答案。我认为这可能是服务器配置问题 - 您可以在另一台服务器上尝试相同的代码并查看它是否正常运行?

我能找到的唯一其他信息就是这个问题的答案,$_POST data returns empty when headers are > POST_MAX_SIZE

如果您尝试上传过大的文件,显然这会导致PHP丢弃$ _POST数据。但是,如果您尝试在不上传文件的情况下提交表单(但仍然使用“multipart / form-data”),但仍然看不到任何$ _POST数据,则不适用。

答案 4 :(得分:1)

检查CI层中可能的错误重定向。它可能是由错误的URL请求引起的(例如,URL末尾缺少斜杠'/')。重定向删除任何POST数据(我正在处理这个)。

因此,请确保您在表单操作中使用完整的URL。

检查您的.htaccess和$config['uri_protocol']一致性。

答案 5 :(得分:1)

我遇到了同样的问题。 我这样解决了。在application / config / config.php中设置base_url 请注意,此网址必须与您呼叫的网址完全相同 你的网络应用。对我来说,我使用www.sdfsd.com调用了我的域名,但是在配置文件中 我写了http://sdfsd.com,因此表单的POST不起作用。所以我改变了这个 现在一切正常!!

欢呼声

答案 6 :(得分:0)

我也有这个问题。我不同意上述答案。我认为至关重要的是你在控制器的哪个阶段尝试获取发布数据。也许您可以发布控制器的相关部分。我发现只有在您致电

后才能使用发布数据和上传数据
this->upload->do_upload()

显然,您使用if语句来检查是否成功。如果成功,

$this->upload->data() 

返回标准数组,其中包含有关上传文件和

的信息
$this->input->post('name_of_your_form_element')

填充了您在相关表单元素中输入的内容。

答案 7 :(得分:0)

我遇到了类似的问题 - 当超过最大上传大小/最大帖子大小时,结果POST数据为空。 这个答案解决了我的问题并允许我看到$ _POST和$ _FORM数据: $_POST data returns empty when headers are > POST_MAX_SIZE