2011-10-28 9 views
6

Używam klasy weryfikacyjnej Codeigniter do sprawdzania poprawności mojego formularza. Czy mógłbyś mi powiedzieć, jak przekierować na poprzednią stronę ze sterownika, jeśli znalazłeś błąd sprawdzania poprawności?Walidacja formularza kodu weryfikacyjnego: Jak przekierować na poprzednią stronę, jeśli znaleziono błąd sprawdzania poprawności?

W moim kontrolera:

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

    //**** Here is where I need to redirect 

} else { 
    // code to send data to model...   

    }        

Odpowiedz

5

UPDATE

Chcesz umieścić formę, zweryfikować je, a następnie pokazać formularz ponownie walidacji błędy, jeśli sprawdzanie poprawności nie powiedzie się lub pokaż coś zupełnie innego, jeśli sprawdzanie poprawności minie.

Najlepszym sposobem na to jest przesłanie formularza do siebie. Tak więc działanie twojego formularza będzie miało postać action="". W ten sposób, w swojej metodzie, można sprawdzić, czy formularz został złożony, i ustalić, co zrobić tam:

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

OLD ODPOWIEDŹ

Zawsze można przekazać aktualną URI w ukryty pola w formularzu:

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

A potem przekierować, jeśli uwierzytelnienie nie powiedzie:

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

Albo można ustawić przekierowanie w flashdata sesji zmiennej:

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

A potem przekierować, jeśli uwierzytelnienie nie powiedzie:

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

Dziękuję za odpowiedź. Pierwsze dwa z opublikowanych przez Ciebie kodów działają idealnie, aby wyświetlać błędy sprawdzania poprawności. Więc próbowałem użyć dwóch twoich kodów, które opublikowałeś, ale ponieważ mam bardzo małą wiedzę na temat PHP/codeigniter, nie jestem pewien, gdzie z nich korzystać. Czy powinienem wkleić tę "$ this-> session-> set_flashdata (" redirect ", $ this-> uri-> uri_string());" na kontrolerze zamieszczonym powyżej lub w formularzu, o którym wspomniałem? Jeszcze raz dziękuję :) Przepraszamy za moje głupie pytanie. :( –

+0

Tak czy inaczej, nie dostaniesz błędów sprawdzania poprawności, chyba że je również przekażesz. Zaktualizuję odpowiedź, aby pokazać, że potrzebujesz błędów sprawdzania poprawności. – swatkins

0

Cóż, zazwyczaj należy zrobić tak (Pseudokod na razie):

  • jeśli form_validation == false -> forma nie zostało jeszcze złożone lub sprawdzanie poprawności nie powiodło się -> załaduj widok formularza;
  • if form_validation == true -> wykonaj przetwarzanie.

Oznacza to, że musisz pozostać w tym samym kontrolerze. Twój kod powinien już robić to zachowanie, które jest zamierzone.

Jeśli nadal czujesz chęć przekierowania, wywołać odpowiednią funkcję:

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

Dzięki za odpowiedź. Przepraszam, powinienem był to wcześniej powiedzieć, że w http: // localhost/sundial/updatebatch/get/40- część "40" jest zmienna. Może się zmieniać co jakiś czas. w takim razie co powinienem zrobić? Aby to wyjaśnić, tutaj 40 jest numerem identyfikacyjnym konkretnego wiersza tabeli. Po prostu używam identyfikatora do pobierania danych. Wielkie dzięki za pomoc :) –

0

Stworzyłem funkcję wewnątrz biblioteki do tworzenia przekierowania kiedy potrzebuję ich.

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

i kiedy chcesz utworzyć przekierowanie do tej strony, wystarczy napisać na funkcję:

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

Potem tylko trzeba zadzwonić:

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

ja przedłużony URL pomocnik do tego.

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

W kontrolerze:

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

Wystarczy umieścić MY_url_helper.php w application/helpers i jesteś dobry, aby przejść.

+0

perfekcyjne rozwiązanie –

+0

Trochę informacji zwrotnej: ten pomocnik URL działał idealnie dla mnie Bardzo dziękuję Moim zdaniem najlepiej jest zrobić pomocników na takie rzeczy: –

+0

@AlexSpencer Dzięki! Chcę tylko napisać tutaj, że http jest zakodowany na linii 17 (nie jest to duży problem, ale nadal). To powinno być naprawione, Jest otwarte dla żądań ściągnięcia. –