2010-01-04 45 views
5

Entiendo cómo hacerlo w/a plain form sin valores existentes, pero digamos que tengo una vista que puedo llamar a través de http://domain.com/account/settings. digamos que tengo dos campos, nombre de usuario, contraseña y ciudad, todos extraídos del DB (a excepción de la contraseña, por supuesto). Entonces, si un usuario intenta enviar el formulario y falla la validación por cualquier razón, ¿a dónde debería "redirigirlos"? En este momento, lo tengo mostrando la misma vista, pero el problema es que extrae la información del DB nuevamente. ¿Debería crear dos vistas diferentes?Codeigniter: Cómo redirigir correctamente con la validación de formulario

La segunda vista mostraría esencialmente la información que intentaron ingresar junto con el mensaje de error.

Respuesta

4

No necesita dos vistas separadas. Echa un vistazo a Form Helper's funciones set_value(), set_select(), set_checkbox() y set_radio(). Estas vuelven a llenar formulario después de su presentación y validación. Así, en su caso, debe especificar los campos de esta manera:

<input type="text" 
     name="username" 
     value="<?php echo set_value('username', $user['username']); ?>" /> 
<input type="text" 
     name="city" 
     value="<?php echo set_value('city', $user['city']); ?>" /> 

Por defecto, la entrada tendrá $user['city'] valor. Pero después de la validación fallida, se volverá a llenar con valores previamente ingresados ​​(incluidos los incorrectos).

Sólo recuerde que todos los campos que desee volver a poblar que ser pasado por form_validation biblioteca:

$this->form_validation->set_rules('username', 'Username', 'required'); 
$this->form_validation->set_rules('city', 'City', ''); 
2

en el mismo controlador que podría tener algo como esto:

if ($this->form_validation->run('create_comment') === TRUE) 
    { 
     $this->comments_model->name  = $this->input->post('name', TRUE); 
     $this->comments_model->email = $this->input->post('email', TRUE); 
     $this->comments_model->website = $this->input->post('website', TRUE); 
     $this->comments_model->comment = $this->input->post('comment', TRUE); 
     $this->comments_model->create_comment(); 
        redirect(current_url()); 
    } 

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

Eso es todo hay para eso.

La idea es hacer que se redirija a sí mismo o donde quieras, cuando la validación devuelve 'verdadero' para que tipo de actualización de la página, por lo tanto, actualice la página.

Si la validación devuelve 'falso', entonces no tendrá que hacer nada.

1

Redirigir a la misma forma.

En su vista, proporcione la información de error al visitante.

Hay dos formas de hacerlo.

  1. Utilice este error en su vista. Esto mostrará la información de error de validación.

    echo validation_errors ('< p class = "error">', '</p>');

  2. O puede utilizar flashdata()

En su controlador

... 
... 
$this->session->set_flashdata('msg', 'All fields are required. or other useful info here. Please try again!'); 
redirect('yourcontroller'); 

Y en su opinión, tiene que demostrarlo.

<?php 
if ($this->session->flashdata('msg')){ //change! 
    echo "<div class='message'>"; 
    echo $this->session->flashdata('msg'); 
    echo "</div>"; 
} 
?> 
1

tenía el mismo problema y descubrieron que una redirección hace perder los datos que le han sido proporcionados por form_error (...) o validation_errors(), excepto que almacena dichos datos en una sesión o en una matriz que se pasa a la vista cargada.

Lo que hay que tener en cuenta es que debe redirigir solo si los datos que desea transmitir se encuentran en sesión, de lo contrario, solo debe cargar una vista. Este último asegura que tiene sus errores de validación intactos cuando llegue a la vista cargada.

0

sólo tiene que cargar mismo punto de vista, si la validación de formularios no

controlador

$userData=array(
'username'=NULL, 
'password'=NULL 
); 
#set form validation rules 
$this->form_validation->set_rules('username', 'Username', 'required'); 
$this->form_validation->set_rules('password', 'Password', 'required'); 
#get all posted data ,this helps you in two ways, 
# 1. Get all form data and can be use here server side 
# 2. repopulating the form data by passing to view page 
$userData=$this->input->post(NULL, TRUE); 
#check form validation result 
if ($this->form_validation->run() == TRUE) { 
//do the operation 
redirect(URL); 

}else{ 
    $this->load->view($view, $userData); 
} 

Ver página

<form method=post action='URL'> 
<input type='text' name='username'value='<?php echo $username?>'/> 
<?php echo (form_error('username')) ? form_error('username', "<div style='color:red'>", "</div>") : ""; ?> 
<input type='text' name='password' value='<?php echo $password?>'/> 
<?php echo (form_error('username')) ? form_error('username', "<div style='color:red'>", "</div>") : ""; ?> 
<input type='submit' value='submit'/> 
</form> 

Este código forma de la pantalla errores y repoblar la forma

Cuestiones relacionadas