Codeigniter $this-> input-> post() пуст, пока $_POST работает правильно
В установке codeigniter я пытаюсь использовать встроенную функцию $this->input->post('some_data')
, однако $this->input->post()
- пустой массив.
A print_r($_POST)
дает все переменные полностью и правильно?
В соответствии с документами codeigniter, класс ввода "автоматически инициализируется системой, поэтому нет необходимости делать это вручную", оставляя меня интересно, что еще я должен делать.
Любые мысли о том, как я должен попытаться заставить это работать?
Спасибо!
Ответы
Ответ 1
Вы можете проверить, выглядит ли ваше представление (правильно):
<form method="post" action="/controller/submit/">
vs (не работает):
<form method="post" action="/controller/submit">
Второй здесь неверен, потому что он перенаправляет, не перенося пост-переменные.
Объяснение:
Если в конце URL-адреса нет косой черты, это означает, что это указывает на файл.
Теперь, когда веб-сервер просматривает файл, он видит, что это действительно каталог и отправляет перенаправление в браузер с косой чертой в конце.
Браузер делает новый запрос к новому URL-адресу с косой чертой, но не публикует содержимое формы. То, что содержимое формы теряется.
Ответ 2
Чтобы использовать $this->input->post()
инициализировать хелпер формы. Вы можете сделать это по умолчанию в config.
Ответ 3
Есть несколько вещей, которые вы можете найти, чтобы помочь решить эту проблему.
-
Что-то изменилось или было расширено в основных файлах CodeIgniter. Убедитесь, что system/core/Input.php
- это оригинальная копия и содержимое application/library
и application/core
для дополнительных файлов
-
Используются ли другие методы ввода? Каков результат этого при запуске рядом с вашим вызовом print_r
?
echo $this->input->user_agent();
-
Какие данные выводятся из print_r
? Посмотрите application/config/config.php
для строки $config['global_xss_filtering']
. Установлено ли это значение TRUE
или FALSE
? Если TRUE
, возможно, у фильтра сценариев для кросс-сайтов есть проблема с данными, которые вы публикуете (вряд ли я думаю)
Ответ 4
Включена ли защита csrf в /applicaiton/config/config.php
?
Если so $this->input->post()
будет пустым. Вы можете попробовать сделать $this->input->post('submit')
, который не должен быть пустым.
Ответ 5
Моя проблема заключалась в вызове ajax. Я использовал это:
type: 'posts',
вместо
type: 'post',
Синтаксис, D'oh!
Ответ 6
Модернизация с 2.2.x до 3.0.x - причина, по которой метод сообщения не срабатывает.
Если вы обновляете 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>
Ответ 7
Наконец, проблема решена сегодня. Проблема заключалась в файле .htaccess
.
Изучение себя: ДОЛЖНО ПРОЧИТАТЬ ДОКУМЕНТАЦИЮ КОДЕКСИНГЕРА более подробно.
Ответ 8
Использование
var_dump($this->input->post());
См. снимок экрана.
Здесь я причисляю все значения столбца
Ответ 9
Попробуйте это, измените
$config['base_url'] = 'http://mywebsite.cl/';
к
$config['base_url'] = 'http://www.mywebsite.cl/';
Некоторые поставщики автоматически добавляют www, https и т.д. к вашему URL-адресу, в большинстве случаев это вызывает эту проблему.
Ответ 10
Проблема заключается в том, что $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!
}
Ответ 11
Решено следующее:
Не исключено ли следующее перенаправление:.htacess, который будет запускать $this- > input- > post ('name') на контроллере, в моем случае он работал отлично.
абс,
Хосе Камарго]
Ответ 12
Чтобы увидеть все значение post, попробуйте var_dump($this->input->post(ALL));