Я пытаюсь сделать загрузку файла в 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) { }
Вы можете добавить этот атрибут формы:
enctype="multipart/form-data;charset=utf-8"
Вместо:
enctype="multipart/form-data"
Вы можете увидеть эту ссылку .
Фактически, многочастные данные, такие как image / 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); } } } ?>
И это все
Вам нужно исправить ваш 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!
Интересно. Код, который вы опубликовали, должен работать. Я сделал быстрый тестовый скрипт, используя вашу форму, и данные $ _FILES и $ _POST прошли через штраф.
Я нашел этот предыдущий вопрос о SO: PHP – синтаксический анализ данных мультипартийной формы
Это похоже на ту же проблему, что и у вас. К сожалению, никакого реального ответа на эту проблему не было. Я бы подумал, что это может быть проблема конфигурации сервера – можете ли вы попробовать тот же код на другом сервере и посмотреть, работает ли он?
Единственный другой бит информации, который я могу найти, был в ответе на этот вопрос, данные $ _POST возвращаются пустыми, когда заголовки> POST_MAX_SIZE
Если вы пытаетесь загрузить слишком большой файл, видимо, это может заставить PHP выкинуть данные $ _POST. Но если вы пробовали отправить свою форму без загрузки файла (но все еще используете «multipart / form-data») и до сих пор не видите никаких данных $ _POST, которые не применяются.
У меня была такая же проблема. Я решил это так. в application / config / config.php вы устанавливаете base_url, помните, что этот URL-адрес должен быть точно таким же, как тот, который вы вызываете в своем веб-приложении. Для меня я позвонил в свой домен с http://www.sdfsd.com, но в файле конфигурации я написал http://sdfsd.com и поэтому POST формы не работал. Поэтому я изменил это, и теперь все работает!
ура
Проверьте возможность неправильного перенаправления в слое CI. Это может быть вызвано неправильным запросом URL-адреса (например, косой чертой / /, отсутствующей в конце URL-адреса). Перенаправления удаляют любые POST-данные (я имел дело с этим).
Поэтому убедитесь, что вы используете полные URL-адреса в действии формы.
Проверьте свою консистенцию .htaccess и $config['uri_protocol']
.
У меня тоже была эта пробема. Я не согласен с вышеупомянутыми ответами. Я думаю, что самое главное, на каком этапе вашего контроллера вы пытаетесь получить данные для публикации. Возможно, вы могли бы разместить соответствующую часть своего контроллера. Я обнаружил, что как почтовые данные, так и данные для загрузки становятся доступными только после вызова
this->upload->do_upload()
Очевидно, вы используете оператор if для проверки успеха. В случае успеха,
$this->upload->data()
возвращает стандартный массив с информацией о загруженном файле и
$this->input->post('name_of_your_form_element')
заполняется тем, что вы ввели в соответствующем элементе формы.
У меня была аналогичная проблема. Оказывается, POST-данные пустые, когда вы превышаете максимальный размер загрузки / максимальный размер сообщения. Этот ответ устранил мою проблему и позволил мне увидеть данные $ _POST и $ _FORM: данные $ _POST возвращаются пустыми, когда заголовки> POST_MAX_SIZE