CodeIgniter из почтовых данных не проходит - PullRequest
8 голосов
/ 06 марта 2011

Я пытаюсь загрузить файл в 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 ]

3 голосов
/ 14 ноября 2012

Вы можете добавить этот атрибут формы:
enctype="multipart/form-data;charset=utf-8"
Вместо:
enctype="multipart/form-data"
Вы можете увидеть эту ссылку .

2 голосов
/ 29 августа 2011

Вам нужно исправить свой 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!

2 голосов
/ 06 марта 2011

На самом деле, составные данные, такие как image / zip или некоторые другие данные BLOB-объектов, будут включены в массив $ _FILES, а не в массив $ _POST.Я рекомендую вам использовать библиотеку загрузки.

view: 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);
  }
 } 
}
?>

И это все

1 голос
/ 25 ноября 2011

У меня просто была такая же проблема.Я решил это таким образом.в application / config / config.php вы устанавливаете base_url, имейте ввиду, что этот URL должен быть точно таким же, как тот, который вы вызываете в своем веб-приложении.Для меня я назвал свой домен с www.sdfsd.com, но в конфигурационном файле я написал http://sdfsd.com, поэтому POST формы не работал.Так что я изменил это, и теперь все работает !!

ура

1 голос
/ 23 апреля 2011

Проверка на возможное неправильное перенаправление в слое CI.Это может быть вызвано неправильным запросом URL (например, косая черта «/» отсутствует в конце URL).Перенаправления удаляют любые данные POST (я имел дело с этим).

Итак, убедитесь, что вы используете полные URL-адреса в действии формы.

Проверьте также .htaccess и $config['uri_protocol'] согласованность.

1 голос
/ 06 марта 2011

Интересно.Код, который вы разместили, должен работать.Я создал скрипт быстрого тестирования с использованием вашей формы, и данные $ _FILES и $ _POST прошли нормально.

Я нашел этот предыдущий вопрос по SO: PHP - разбор данных из нескольких частей формы

Звучит так же, как и у вас.К сожалению, реального ответа на эту проблему не было достигнуто.Я мог бы подумать, что это может быть проблема конфигурации сервера - можете ли вы попробовать тот же код на другом сервере и посмотреть, работает ли он?

Единственный другой бит информации, который я могу найти, был в ответе на этот вопрос, $ _ Данные POST возвращаются пустыми, если заголовки> POST_MAX_SIZE

Если вы пытаетесь загрузить слишком большой файл, очевидно, это может привести к тому, что PHP также выбросит данные $ _POST.Но если вы попытались отправить форму без загрузки файла (но все еще используя «multipart / form-data») и по-прежнему не видите поступающих данных $ _POST, это не применимо.

0 голосов
/ 18 марта 2016

У меня была похожая проблема - оказывается, что данные POST пустые, когда вы превышаете максимальный размер загрузки / максимальный размер сообщения.Этот ответ разрешил мою проблему и позволил мне увидеть данные $ _POST и $ _FORM: $ _ Данные POST возвращаются пустыми, когда заголовки> POST_MAX_SIZE

0 голосов
/ 23 января 2012

У меня тоже была эта проблема.Я не согласен с приведенными выше ответами.Я думаю, что самое важное на каком этапе вашего контроллера вы пытаетесь получить данные поста.Возможно, вы могли бы разместить соответствующую часть вашего контроллера.Я обнаружил, что как данные публикации, так и данные загрузки становятся доступными только после того, как вы позвоните

this->upload->do_upload()

Очевидно, что вы используете оператор if для проверки на успешность.В случае успеха

$this->upload->data() 

возвращает стандартный массив с информацией о загруженном файле, а

$this->input->post('name_of_your_form_element')

заполняется тем, что вы ввели в соответствующий элемент формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...