it-swarm.com.ru

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

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

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

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

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

Спасибо!

16
Matthew Higgins

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

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

против (не работает):

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

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

Объяснение:

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

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

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

26
Rauli Rajande

Для использования $this->input->post() инициализируйте помощник формы. Вы можете сделать это по умолчанию в конфигурации.

4
Steward Godwin Jornsen

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

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

в

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

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

3
Italo Hernández

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

  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 возможно, фильтр межсайтовых сценариев имеет проблему с данными, которые вы публикуете (я думаю, это маловероятно)

1
ShaneH

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

type: 'posts',

вместо 

type: 'post',

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

1
Webmaster G

Обновление с 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>
1
syyu

Изменить форму действия,

Из этого:

<form method="post" action="<?=base_url()?>yourprocess">

В это:

<form method="post" action="<?=base_url()?>index.php/yourprocess">

По сути, вам просто нужно добавить «index.php» после вашего base_url ():

action = "http://www.yourdomain.com/ index.php / ваш процесс"

1
Ajie Winugs

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

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

1
maan81

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

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

Пожалуйста, смотрите скриншот . Здесь я печатаю все значения массива постов

0
Jay Bharat

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

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

0
user3262234