2012-02-04 3 views
2

У меня есть библиотека form_validation, загруженная в мой контроллер, и сама процедура проверки формы работает, но при использовании set_value() она не заполняет поля формы. Вот код к контроллеру:set_value не работает

function addUser() 
{ 
    $this->form_validation->set_rules('firstName', 'firstname', 'trim|required|max_length[30]'); 
    $this->form_validation->set_rules('surname', 'surname', 'trim|required|max_length[30]'); 
    $this->form_validation->set_rules('emailAddress', 'email address', 'trim|required|valid_email|is_unique[users.email]|max_length[255]'); 
    $this->form_validation->set_rules('password', 'password', 'trim|required|max_length[20]|min_length[5]'); 
    $this->form_validation->set_rules('passwordVerify', 'password verification', 'trim|required|max_length[20]|min_length[5]'); 

    if($this->form_validation->run() === FALSE) { 
     $this->session->set_flashdata('formValidationError', validation_errors('<p class="error">', '</p>')); 
     redirect('/member/register'); 
    } else { 
     echo 'Passed'; 
    } 
} 

А вот код в представлении:

<?php echo $this->session->flashdata('formValidationError'); ?> 
<form method="POST" action="<?php echo site_url('member/addUser'); ?>"> 
    <fieldset> 
     <legend>Create a FREE account</legend> 
     <div> 
      <label for="firstName">Firstname</label> 
      <input type="text" name="firstName" value="<?php echo set_value('firstName'); ?>" maxlength="30"> 
     </div> 

     <div> 
      <label for="surname">Surname</label> 
      <input type="text" name="surname" value="<?php echo set_value('surname'); ?>" maxlength="30"> 
     </div> 

     <div> 
      <label for="emailAddress">Email Address</label> 
      <input type="text" name="emailAddress" value="<?php echo set_value('emailAddress'); ?>" maxlength="255"> 
     </div> 

     <div> 
      <label for="password">Password</label> 
      <input type="password" name="password" maxlength="20"> 
     </div> 

     <div> 
      <label for="passwordVerify">Verify Password</label> 
      <input type="password" name="passwordVerify" maxlength="20"> 
     </div> 

     <button type="submit">Register</button> 
    </fieldset> 
</form> 

Есть ли что-то мне не хватает? Является ли перенаправление причиной проблемы?

+0

Как это нет за работой? Он должен повторно заполнить поля после завершения проверки. И почему вы перенаправляетесь на другую страницу, если форма заполнена неправильно? Если мне не хватает поля, мне нужно снова зарегистрироваться? :) –

+0

@DamienPirsy Поля формы не заполняются. При пропуске поля пользователь перенаправляется обратно на страницу регистрации. Причина, по которой я перенаправляюсь, заключается в том, что я не хочу, чтобы пользователь видел URL-адрес/register/addUser в адресной строке (что будет, если я загружу представление, а не перенаправление). –

ответ

6

Это не работает, потому что вы используете перенаправление.

Вместо

$this->session->set_flashdata('formValidationError', validation_errors('<p class="error">', '</p>')); 
    redirect('/member/register'); 

только для тестирования, попытайтесь загрузить мнение о

$this->load->view('member_register_view'); 

и вы увидите.

set_value требует, чтобы проверка формы выполнялась в том же контексте ... вы теряете этот контекст при перенаправлении.

+0

Я не хочу загружать представление, потому что я хочу сохранить URL-адреса. Например, я не хочу, чтобы пользователи могли видеть/members/addUser в своей адресной строке при ошибке, я хочу, чтобы они вернулись в/register –

+1

Мне нужно будет установить флеш-данные для этой цели. –

+0

Почему бы не '

' и в 'function register()' вы просто 'if (! Empty ($ _ POST)) return $ this-> addUser();'? –

1

я была такая же проблема с redirect(), я использовал $this->session->set_flashdata('field','value') для хранения данных перед перенаправлением, как и вид нагрузки не было возможно в моем случае, и повторно использовать его в качестве значения входного тега,
<input type='text' value='<?= $this->session->flashdata('field') ?>' >