Я работаю над страницей регистрации в 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