2010-01-04 11 views
5

Capisco come farlo w/una forma semplice senza valori esistenti, ma diciamo che ho una vista che posso chiamare tramite http://domain.com/account/settings. Diciamo che ho due campi, nome utente, password e città, che sono tutti estratti dal DB (tranne ovviamente per la password). Quindi, se un utente tenta di inviare il modulo e fallisce la convalida per qualsiasi motivo, dove dovrei "reindirizzare" a? In questo momento, ho mostrato la stessa vista ma il problema è che recupera nuovamente le informazioni dal DB. Dovrei creare due diversi punti di vista?Codeigniter: Come reindirizzare correttamente con convalida del modulo

La seconda vista mostra essenzialmente le informazioni che hanno tentato di immettere insieme al messaggio di errore.

risposta

4

Non sono necessarie due viste separate. Scopri le funzioni Form Helper'sset_value(), set_select(), set_checkbox() e set_radio(). Questi moduli ri-popolano dopo la sua presentazione e convalida. Quindi nel tuo caso, è necessario specificare i campi in questo modo:

<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']); ?>" /> 

Per impostazione predefinita, l'ingresso avrà $user['city'] valore. Ma dopo la convalida fallita verrà ripopolato con i valori inseriti in precedenza (compresi quelli non corretti).

Basta ricordare che tutti i campi che si vogliono ripopolare bisogno di essere passato attraverso form_validation libreria:

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

sullo stesso controller si potrebbe avere qualcosa di simile:

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'); 

Questo è tutto c'è da fare.

L'idea è di reindirizzare a se stesso o dove si desidera, quando la convalida restituisce "true" in modo che si rinfreschi la pagina, quindi si aggiorni la pagina.

Se la convalida restituisce "falso", non sarà necessario eseguire alcuna operazione.

1

Reindirizza allo stesso modulo.

E a tua vista fornire informazioni di errore al visitatore.

Ci sono due modi per farlo.

  1. Utilizzare questo errore nella visualizzazione. Questo mostrerà informazioni sull'errore di convalida.

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

  2. Oppure si può utilizzare flashdata()

Nel vostro controller

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

E a suo avviso, è necessario dimostrarlo.

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

avuto lo stesso problema e ha scoperto che un reindirizzamento ti fa perdere i dati che sarebbe stato fornito da form_error (...) o validation_errors(), tranne per il fatto che si memorizzano tali dati in una sessione o in una matrice passata nella vista caricata.

Il punto da notare è che è necessario reindirizzare solo se i dati che si desidera passare in giro sono in sessione, altrimenti è sufficiente caricare una vista. Quest'ultimo garantisce che i tuoi errori di convalida siano intatti quando raggiungi la vista caricata.

0

Basta caricare stessa vista se la convalida non è riuscita forma

regolatore

$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); 
} 

visualizzazione di una pagina

<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> 

questo codice errori di forma display e ripopolare il modulo

Problemi correlati