我试图在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) { }
答案 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