CodeIgniter - Повторное заполнение неверной формы с перенаправлением - PullRequest
3 голосов
/ 13 ноября 2011

Я использую шаблон Post-Redirect-Get , чтобы избежать проблем с обновлением страницы после отправки POST. Перенаправление очищает все отправленные данные POST, что означает, что я не могу снова заполнить поля set_value() и соответствующими функциями.

Чтобы прояснить ситуацию, вот как это работает.

  1. Клиент отправляет POST с неверными данными.
  2. Заголовок перенаправления 303 отправляется обратно.
  3. Клиент выполняет GET для местоположения заголовка, но данные POST пропали, что означает, что форму нельзя заполнить.

Помогите, пожалуйста? :)

Ответы [ 3 ]

6 голосов
/ 13 ноября 2011

Установить данные записи как flashdata (часть класса сеанса):

$this->session->set_flashdata('post', $this->input->post());

Тогда получите:

$this->session->flashdata('post');

Вы также можете сделать данные более продолжительными:

$this->session->keep_flashdata('post');

Для более: http://codeigniter.com/user_guide/libraries/sessions.html

0 голосов
/ 13 октября 2015

вы можете расширить CI_Form_validation и добавить (или добавить это к конструкции CI_Form_validation)

$CI =& get_instance(); $CI->load->library('session'); if (count($_POST) > 0 OR count($_FILES) > 0) { $CI->session->set_flashdata('prg', array( 'date' => time()+ini_get('max_execution_time'), 'post' => $_POST, 'files' => $_FILES )); redirect(current_url(), 'location', 302); } else{ $prg = $CI->session->flashdata('prg'); if($prg==TRUE){ if($prg['date']>time()){ $_POST = $prg['post']; $_FILES = $prg['files']; } } }

к конструкции. Это исправит вашу проблему Но если у вас есть какие-либо функции redirect () после отправки формы в систему, эти перенаправления будут переопределены сверху перенаправления. поэтому, пожалуйста, обратите на это внимание. (обходной путь - вы можете вызывать это в любой функции, где отсутствует redirect ())

0 голосов
/ 13 ноября 2011

Один из способов - сохранить данные POST в сеансе перед перенаправлением, например, если ваша форма «зарегистрироваться», то вы можете сделать:

session_start();
$_SESSION['register_form_data'] = array();

foreach($_POST as $key=>$value)
{
    $_SESSION['register_form_data'][$key] = $value;
}

Теперь данные формы будут доступны на странице формы. Вы также можете создать вспомогательную функцию set_value_from_session() для повторного заполнения полей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...