CodeIgniter из почтовых данных не проходит

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