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>

Ответ 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));