$ this-> input-> post () всегда возвращает FALSE, из-за нежелательного 301

Я работаю над страницей регистрации в CodeIgniter. Проблема заключается в том, что мои данные не поступают . Следующий код всегда производит «сбой»:

class Signup extends CI_Controller { function index() { if ($this->input->post()) { echo 'success'; } else { echo 'fail'; echo form_open('signup'); echo form_input('username', 'Username'); echo form_input('email_address', 'Email address'); echo form_submit('submit', 'Create Acccount'); echo form_close(); } } } 

В чем может быть проблема?

Чтобы сделать еще более интересным, на моем локальном хосте форма работает отлично. Это когда на удаленном сервере, когда это не удается.


Обновление 1: в соответствии с запросом это то, что выводит сервер: (я закрыл URL-адрес, я не раскрываю)

 <form accept-charset="utf-8" method="post" action="http://www.url.com/signup"> <input type="text" value="Username" name="username"> <input type="text" value="Email address" name="email_address"> <input type="submit" value="Create Account" name="submit"> </form> 

Обновление 2: я вижу другую разницу в поведении между локальным хостом и удаленным сервером: при обновлении (cmd R или F5) страницы после отправки формы на локальном хосте мой браузер просит меня снова отправить форму. Одна и та же страница на удаленном сервере не вызывает этот вопрос из браузера, поэтому похоже, что проблема с перенаправлением или URL-адресом вызывает проблему?


Обновление 3: Похоже, что на удаленном сервере пользователь перенаправляется на 301. (постоянно перемещается). Я до сих пор не знаю, откуда это перенаправление. Редирект эффективно убивает пост-данные, поэтому он объясняет, почему post () возвращает false.

Итак, кто-нибудь знает, почему у меня 301-й?


Обновление 4: я получил перенаправление в CodeIgniter, установив base_url как http://www.url.com вместо http://url.com

После этого он решил проблему! 🙂

Проблема может быть вызвана перенастройкой 301 (директива HTTP-заголовка местоположения) с удаленного сервера. Если вы используете Firefox, вы можете проверить это с помощью плагина TamperData. Конечно, вы также можете увидеть, будет ли перенаправлен http://www.url.com/signup при запросе страницы.

Если Location HTTP-заголовка – http://url.com/signup (без www ), то самым простым решением является использование http://url.com/signup для действия формы. Обратите внимание, что вы также можете опустить адрес сервера, если форма находится на том же сервере. Вместо этого вы можете использовать /signup .

Какую версию CI вы используете? CI Reactor внес изменения в $this->input->post()

Методы ввода класса post () и get () теперь возвращают полный массив, если первый аргумент не указан.

Я просто испытал аналогичное условие; Я использую CI Reactor на локальном хосте и версию до реактора на своем концерте, и получил то же самое.

$ _POST содержит данные. Пред-реактор, $this->input->post ничего не возвращает, если массив не прошел:

$this->input->post() вызывает _fetch_from_array()

 function _fetch_from_array(&$array, $index = '', $xss_clean = FALSE) { if ( ! isset($array[$index])) { return FALSE; } 

Однако в реакторе это делается вместо этого:

  if ($index === NULL AND ! empty($_POST)) { $post = array(); // Loop through the full _POST array and return it foreach (array_keys($_POST) as $key) { $post[$key] = $this->_fetch_from_array($_POST, $key, $xss_clean); } return $post; } 

Таким образом, вы получаете значения сообщений, даже если вы не указали индекс.

Я бы начал с print_r (), используя супергруппы $ _POST / $ _ REQUEST, чтобы увидеть, видит ли PHP что-либо. Это должно помочь сузить его, чтобы узнать, есть ли проблема с PHP или CI.

У меня была эта проблема, это странное решение, которое я не могу объяснить, но вот что сработало. Не используйте html для того, чтобы форма использовала форму кода. я попробовал это в обоих направлениях и по какой-то причине

 $this->input->post('your_variable'); 

работает только при использовании класса формы, см. codeigniter userguide