2009-07-13 15 views
3

Ich bin dabei, ein Eingabeformular auf einer datensatzspezifischen Seite zu erstellen, z. (Immobilien/Mieten/rec_id). Bei der Übermittlung sollten die Daten eingefügt, validiert und zur ursprünglichen Seite zurückkehren, von der sie mit allen relevanten Nachrichten gesendet wurde.Codeigniter Form Validation ... form re-population

  • Wenn die Validierung fehlschlägt, laden Sie die Formularseite ein Formular
  • Echo der spezifische Validierung Fehler erneut bevöl-- z.B. ungültige E-Mail-Adresse usw.

  • Wenn dies gelingt, Einfügen von Daten, die Seite neu zu laden und Erfolgsmeldung angezeigt.

    Funktionsklasse() {

    $this->load->library('form_validation');  
    $this->form_validation->set_rules('name','name','required|trim'); 
    $this->form_validation->set_rules('email','email','required|trim|valid_email'); 
    
    $fields['name'] = 'Name'; 
    $fields['email'] = 'Email Address'; 
    
    $this->validation->set_fields($fields); 
    
    if ($this->form_validation->run() == FALSE) 
    { 
        //failed - reload page and re-populate fields with any error messages 
    } 
    else 
    { 
        // display form with success message 
    } 
    

    }

Normalerweise dies einfach durch 'Laden einer Ansicht' und Weitergabe der relevanten Daten erfolgt die Seite, Felder oder Display-Meldungen wieder zu bevölkern. Aber ich muss eine "Weiterleitung" zurück zur produktspezifischen Seite verwenden. Gibt es eine gute Möglichkeit, dies zu tun, außer Sitzungsdaten zu verwenden, um die Validierungsfehler zu tragen ..?

Vielen Dank im Voraus, Michael

Antwort

3

Werfen Sie einen Blick auf die CodeIgniter Handbuch auf Sessions und sehen, ob ‚FlashData‘ irgendwelcher ist.

+0

Flashdata ist ein großartiger Vorschlag. Einfach zu bedienen, sauberer Code. http://codeigniter.com/user_guide/libraries/sessions.html – GloryFish

0

Session Daten wäre die einfachste und genaueste/effiziente Möglichkeit, die Daten wieder in Form zu senden. Sie könnten auch Cookies verwenden, aber es wäre weniger sicher (da Cookie-Daten mit jeder HTTP-Anfrage gesendet werden).

Ihre andere Möglichkeit wäre es, die Details in der Datenbank zu speichern und holen sie wieder nach der Umleitung, aber ich fühle mich wie die unnötige Komplexität zu Ihrer Anwendung hinzufügen würde.

Für eine wirklich einfache Lösung, die Sie auch nur Ihre POST/GET Daten in eine SESSION Variable Dump könnte es dann werden schnell auf der Seite aufrufen umgeleitet, fast die Umleitung transparent von einem logischen Standpunkt aus zu machen.

session_start(); 
$_SESSION['POST_DATA'] = $_POST; 
+0

Ähm, das ist, was ich dachte. Es ist immer noch eine ziemlich runde Sache, aber wahrscheinlich die einfachste Lösung. Es wäre praktisch, wenn ein Array durch eine Weiterleitung geleitet werden könnte ... Danke tj111 –

-4

Um das Problem zu beheben, können Sie einfach die clientseitige Validierung mit Javascript/jQuery durchführen. Also, im Grunde, anstatt sofort auf die neue Seite zu gehen, würde die Submit-Aktion nur zu Ihrer JavaScript-Funktion weitergeleitet werden, die entscheiden würde, ob das Formular gültig ist. Dann könnten Sie jQuery verwenden, um Dinge für ungültige Elemente hübsch aussehen zu lassen.

+2

Das Problem dabei ist, dass die clientseitige Validierung einfach überbrückbar ist. Sie sollten * immer * Daten auf dem Server validieren, auch wenn Sie sie auf dem Client vorab validieren. Vertraue niemals Daten, die du nicht kontrollierst. – tj111

7

können Sie die set_value('field_name') Funktion verwenden Sie das Formular erneut zu füllen. Verwendungsbeispiel im Blick:

<input type="text name="name" value="<?php echo set_value('name'); ?>" />"

Um die Fehler aus der form_validation anzuzeigen, können Sie die validation_errors()-Funktion verwenden.Verwendungsbeispiel im Blick:

<?php echo validation_errors(); ?>

Auch sehen link text für weitere Informationen.

+1

Ich denke, das ist eigentlich die CI-Art, es zu tun, aber aus irgendeinem Grund alle, einschließlich mir, endet immer mit Sitzungsmethoden. – stef

+1

IMO, die Verwendung der Sitzung Methoden enden mit Unordnung im Code. – Randell

1
$insertData=array(
      'name'=>NULL, 
      'email'=>NULL); 
//setting validation rules 
    $this->form_validation->set_rules('name', 'Name', 'required'); 
    $this->form_validation->set_rules('email', 'Email', 'required|email'); 

//here you will get all data which user entered in form 
$insertData = $this->input->post(NULL, TRUE); 

if ($this->form_validation->run() == FALSE) 
{ 
    //failed - reload page and re-populate fields with any error messages 
    $this->load->view('view_name',$insertData)  

} 
else 
{ 
    //set flash data for displaying success message in redirected page 
    $this->session->set_flashdata('success','Success message') 
    redirect('controller_name'); 

} 

Ansicht Seite

<?php if ($this->session->flashdata('succes_message')) { echo $this->session->flashdata('succes_message'); ?> } ?> 

<form action='action page url' method='post'> 
<input type='text' name='name' value='<?php echo $name ?>'/> 
<input type='text' name='email' value='<?php echo $email ?>'/> 
<input type='submit' value='Save'/> 
Verwandte Themen