Codeigniter $ this-> input-> post () пуст, пока $ _POST работает правильно

На установке codeigniter я пытаюсь использовать встроенную функцию $this->input->post() $this->input->post('some_data') , однако $this->input->post() – пустой массив.

print_r($_POST) дает все переменные полностью и правильно?

Согласно документам codeigniter, класс ввода «автоматически инициализируется системой, поэтому нет необходимости делать это вручную», оставляя меня интересно, что еще я должен сделать.

Любые мысли о том, как я должен попытаться заставить это работать?

Благодаря!

Вы можете проверить, выглядит ли ваше мнение (правильно):

 <form method="post" action="/controller/submit/"> 

vs (не работает):

 <form method="post" action="/controller/submit"> 

Второй здесь неверен, потому что он перенаправляет, не перенося пост-переменные.

Объяснение:

Когда в конце URL-адреса нет косой черты, это означает, что это указывает на файл.

Теперь, когда веб-сервер ищет файл, он видит, что это действительно каталог и отправляет в браузер переадресацию с косой чертой.

Браузер делает новый запрос на новый URL с косой чертой, но не публикует содержимое формы. Вот где содержимое формы теряется.

Чтобы использовать $this->input->post() инициализируйте хелпер формы. Вы можете сделать это по умолчанию в config.

Включили ли вы защиту /applicaiton/config/config.php в /applicaiton/config/config.php ?

Если так $this->input->post() будет пустым. Вы можете попытаться сделать $this->input->post('submit') который не должен быть пустым.

Есть несколько вещей, которые вы можете найти, чтобы помочь решить эту проблему.

  1. Что-то изменилось или было расширено в основных файлах CodeIgniter. Убедитесь, что system/core/Input.php является исходной копией и содержимым application/library и application/core для дополнительных файлов

  2. Используются ли другие методы ввода? Каков результат этого при запуске рядом с вашим вызовом print_r ?

    echo $this->input->user_agent();

  3. Какие данные выводятся из print_r ? Посмотрите в application/config/config.php для строки $config['global_xss_filtering'] . Установлено ли значение TRUE или FALSE ? Если TRUE возможно, у фильтра скриптов для кросс-сайтов есть проблемы с данными, которые вы публикуете (вряд ли я думаю)

Моя проблема заключалась в вызове ajax. Я использовал это:

type: 'posts',

вместо

type: 'post',

Синтаксис, D'oh!

Модернизация с 2.2.x до 3.0.x – причина метода post не срабатывает. Если вы обновляете CI 3.x, вам нужно сохранить index_page в файле конфигурации. Также проверьте файл .htaccess для mod_rewrite. CI_3.x

 $config['index_page'] = ''; // ci 2.x $config['index_page'] = 'index.php'; // ci 3.x 

Мой .htaccess

 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> <IfModule !mod_rewrite.c> ErrorDocument 404 /index.php </IfModule> 

использование

 var_dump($this->input->post()); 

См. Снимок экрана. Здесь я причисляю все значения столбца

Наконец, проблема решена сегодня. Проблема была в файле .htaccess .

Изучение себя: ДОЛЖНО ПРОЧИТАТЬ ДОКУМЕНТАЦИЮ КОДЕКСИНГЕРА более тщательно.

Попробуйте это, измените

 $config['base_url'] = 'http://mywebsite.cl/'; 

в

 $config['base_url'] = 'http://www.mywebsite.cl/'; 

Некоторые провайдеры автоматически добавляют www, https и т. Д. К вашему URL, в большинстве случаев это вызывает эту проблему

Проблема в том, что $this->input->post() не поддерживает получение всех данных POST, а только конкретные данные, например $this->input->post('my_post_var'). Вот почему var_dump($this->input->post()); пусто.

Несколько решений, придерживайтесь $ _POST для извлечения всех данных POST или назначайте переменные из каждого элемента POST, который вам нужен, например:

 // variables will be false if not post data exists $var_1 = $this->input->post('my_post_var_1'); $var_2 = $this->input->post('my_post_var_2'); $var_3 = $this->input->post('my_post_var_3'); 

Однако, поскольку приведенный выше код не очень суровый, мне нравится делать следующее:

 if(!empty($_POST)) { // get all post data in one nice array foreach ($_POST as $key => $value) { $insert[$key] = $value; } } else { // user hasen't submitted anything yet! } 

Чтобы увидеть все значение post, попробуйте var_dump($this->input->post(ALL));

Решено следующее:

Не исключено ли следующее перенаправление: .htacess, который будет запускать $ this-> input-> post ('name') на контроллере, в моем случае он работал отлично.

abs, Хосе Камарго]