2012-05-09 12 views
7

Ho un modulo che ha funzionato perfettamente fino a quando ho passato il modulo a method="get". Ora non riesco a ottenere form_validation->run() per valutare su TRUE.Come convalidare un campo modulo in Codeigniter quando si utilizzano i parametri Get?

Questo è come mi apre il modulo:

echo form_open('', array('method' => 'get')); 

Questo è l'unico pezzo che ha bisogno di convalidare:

$this->form_validation->set_rules('states', 'states', 'required'); 

Questo è come mi controllare per vedere se il modulo viene convalidato:

if($this->form_validation->run() == FALSE) 

C'è qualcos'altro che devo fare per usare i parametri Get? Ho attivato i parametri nella configurazione ($config['allow_get_array'] = TRUE;). Il modulo funziona correttamente se ignoro la convalida, quindi so che il sistema di configurazione sta leggendo l'url fine.

risposta

5

Questo post sul forum Codeigniter suggerisce che form validation does not work with Get Parameters e che è proprio il modo in cui Codeigniter è.

+0

Basta intervenire e fare la propria convalida richieste GET. XSS può essere gestito al livello più basso con htmlspecialchars (GET, ENT_QUOTES, 'encoding') a seconda dei dati emessi. La convalida del modulo è solo un aiuto. Elabora la struttura della tua app in anticipo, scopri cosa CI può offrire in relazione a helper/librerie e quindi plasma il tuo flusso di lavoro. – Philip

+0

FYI ... La convalida del modulo di codifica di codice avrà esito negativo se sono presenti parametri GET nell'URI di una pagina che esegue la convalida del modulo sui parametri POST. –

1

Come si può vedere sul file Form_validation.php, hanno hardcoded $ _POST ovunque nella classe ;-(

Se si desidera supportare $ _GET così, è abbastanza facile (e Oooo sporco), è possibile creare una nuova proprietà:

public function __construct($rules = array()) 
{ 
    $this->inputData = array_merge($_POST, $_GET); 
    ... 
} 

e sostituire $ _POST di $ this-> InputData ovunque in questa classe, in mancanza di metodi statici

so che non è ricominciò per modificare i file del fornitore, ma. davvero, ne hai bisogno, fallo ;-)

3

Basta aggiungere:

$_POST['states'] = $this->input->get('states'); 

per convalidare campo gli stati in validazione dei form appena prima

$this->form_validation->set_rules('states', 'states', 'required|trim'); 
+0

Questa è una soluzione eccezionale! –

9

Per CodeIgniter 3, è possibile passare la matrice GET nella funzione set_data. Ad esempio:
$this->form_validation->set_data($this->input->get());

+0

Non penso sia vero, l'ho usato io stesso. Inoltre, hanno aggiornato la loro documentazione ora: https://www.codeigniter.com/userguide3/libraries/form_validation.html –

+0

grazie ha funzionato per me. http://www.codeigniter.com/userguide3/libraries/form_validation.html#validating-an-array-other-than-post –

0

Stava cercando di fare esattamente qualcosa di simile ma si riduce alla struttura del codice.

  1. Invia il modulo con il solito metodo di post. Questo ti permetterà di effettuare tutte le convalide dei post.
  2. Quindi utilizzare il reindirizzamento() per inviare tutti i dati a un metodo diverso all'interno o all'esterno del controller utilizzando '/'.
  3. Infine, il metodo che riceve tutti i parametri gestirà le transazioni del database e lo presenterà alla vista.

Spero che sia d'aiuto.

2

Codeigniter è cambiato da alcuni di questi post. Penso che la risposta di gX sia corretta.

Le istruzioni nel manuale utente, in particolare la sezione Validating an Array (other than $POST), hanno funzionato perfettamente per me (fino ad oggi) ed è molto semplice.

Prima che il $ this-> form_validation-> set_rules linea, si specifica la matrice da convalidare:

$data = array(
    'username' => 'johndoe', 
    'password' => 'mypassword', 
    'passconf' => 'mypassword'); 

$this->form_validation->set_data($data); 
Problemi correlati