2011-10-28 17 views

risposta

5

UPDATE

Si desidera inviare un modulo, convalidarlo, poi mostrare nuovamente il modulo con la convalida errori se la validazione fallisce, o mostra qualcosa di completamente diverso se la validazione passa.

Il modo migliore per farlo è postare un modulo su se stesso. Quindi l'azione del tuo modulo sarebbe action="". In questo modo, nel metodo, è possibile controllare per vedere se è stata presentata la forma, e determinare che cosa fare c'è:

// in my form method 
if ($this->input->post('submit')) // make sure your submit button has a value of submit 
{ 
    // the form was submitted, so validate it 
    if ($this->form_validation->run() == FALSE) 
    { 
     $this->load->view('myform'); 
} 
else 
{ 
     $this->load->view('formsuccess'); 
} 
} 
else 
{ 
    // the form wasn't submitted, so we need to see the form 
    $this->load->view('myform'); 
} 

risposta Old

Si può sempre passare la corrente URI in una nascosta campo nella forma:

<input name="redirect" type="hidden" value="<?= $this->uri->uri_string() ?>" /> 

E poi reindirizzare se la convalida non riesce:

redirect($this->input->post('redirect')); 

Oppure si può impostare l'URL di reindirizzamento in una variabile di sessione flashdata:

// in the method that displays the form 
$this->session->set_flashdata('redirect', $this->uri->uri_string()); 

E quindi reindirizzare se la convalida non riesce:

redirect($this->session->flashdata('redirect')); 
+0

Grazie per la risposta. I primi due dei tuoi codici che hai pubblicato funzionano perfettamente accettando la visualizzazione degli errori di validazione. Quindi stavo cercando di usare il secondo dei tuoi codici che hai postato ma dato che ho pochissime conoscenze su PHP/codeigniter, non sono sicuro di dove utilizzarli. Dovrei incollare questa "$ this-> session-> set_flashdata ('redirect', $ this-> uri-> uri_string());" sul controller che ho postato sopra o nel modulo di cui ho parlato? Grazie ancora :) Ci scusiamo per la mia stupida domanda. :( –

+0

In entrambi i casi, non riceverai gli errori di convalida a meno che tu non li superi. Aggiornerò la mia risposta per riflettere che hai bisogno di errori di validazione visualizzati – swatkins

0

Beh, di solito si dovrebbe fare come questo (pseudocodice per ora):

  • se form_validation == false -> forma o non è ancora presentato o validazione fallita -> carica la vista modulo;
  • se form_validation == true -> esegue l'elaborazione.

Ciò significa che è necessario rimanere all'interno dello stesso controller. Il tuo codice dovrebbe già fare questo comportamento, che è quello previsto.

Se si sente ancora il bisogno di reindirizzare, chiamare la funzione appropriata:

redirect('updatebatch/get/40','refresh'); 
// assuming 'updatebatch' is the name of your controller, and 'sundial' just a folder 
+0

Grazie per la risposta. Scusa, avrei dovuto dirlo prima: in http: // localhost/sundial/updatebatch/get/40- la porzione di "40" è variabile. Potrebbe cambiare di volta in volta. in tal caso cosa dovrei fare? Giusto per chiarire, qui il 40 è il numero identificativo di una particolare riga di un tavolo. Sto solo usando l'id per recuperare i dati. Grazie mille per il tuo aiuto :) –

0

ho creato una funzione all'interno di una libreria per creare redirect quando ho bisogno di loro.

<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); 

class Functions { 

public function generateRedirectURL() 
{ 
$CI =& get_instance(); 
$preURL = parse_url($_SERVER['REQUEST_URI']); 
$redirectUrl = array('redirectUrl' => 'http://' . $_SERVER['SERVER_NAME'] . $preURL['path']); 
$CI->session->set_userdata($redirectUrl); 
} 

} 

//End of the file 

e quando si desidera creare il redirect a quella pagina, basta scrivere sulla funzione:

$this->load->library('functions'); //you can put it in the autoloader config 
$this->functions->generateRedirectURL(); 

Poi solo bisogno di chiamare:

redirect($this->session->userdata['redirectUrl']); 
11

ho esteso l'URL aiutante per questo.

https://github.com/jonathanazulay/CodeIgniter-extensions/blob/master/MY_url_helper.php

nel controller:

$this->load->helper('url'); 
redirect_back(); 

appena messo il MY_url_helper.php in application/helpers e siete a posto.

+0

una soluzione perfetta –

+0

Un piccolo feedback: questo helper URL ha funzionato perfettamente per me, grazie mille A mio parere è meglio fare helpers per cose come questa –

+0

@AlexSpencer Grazie! Voglio solo mettere una nota qui che http è hardcoded sulla linea 17 (non è un grosso problema ma è ancora). Questo dovrebbe essere risolto, è aperto per le richieste di pull. –

Problemi correlati