2012-04-02 9 views
2

Lassen Sie uns annehmen, dass ich vom Benutzer generierte Daten habe, die nicht durch einen Formularpost kommen. Gibt es eine Möglichkeit, CodeIgnitors form_validation Klasse zu verwenden/zu erweitern, um diese Daten zu überprüfen.CodeIgnitor Validierung von Variablen/Eingabe nicht aus dem Formular?

z.

+0

möglicherweise nicht im Zusammenhang Antwort auf die Frage des .. Aber kann ich weiß: ... dann, durch die Art und Weise, diese Benutzer erzeugten Daten werden von Benutzer zu kommen? wenn der Benutzer das Formular nicht abschickt? – TechCare99

+0

Hallo @ TechCare99, können Sie davon ausgehen, dass der Benutzer Daten als JSON, anstelle von einzelnen Formularelement gibt, oder dass diese Daten einige unverarbeitete Daten aus einer Datenbank sind, die bereinigt werden muss – DhruvPathak

Antwort

3

Ja können Sie über set_data() Methode, Hier gehts.

$this->form_validation->set_data(array(
     'name' => 'Full Name', 
     'city' => 'City', 
)); 

$this->form_validation->set_rules('name', 'Name', 'trim|required'); 
$this->form_validation->set_rules('city', 'City', 'trim|required'); 
$this->form_validation->set_rules('age', 'Age', 'trim|required'); 

if ($this->form_validation->run() == FALSE) { 
    echo 'Invalid: ' . validation_errors(); 
} else { 
    echo 'Valid'; 
} 
-1

Klingt vielleicht wie ein schmutziger Hack, aber Sie könnten einen Formulareintrag fälschen, indem Sie $ _POST-Daten festlegen? Angenommen, Sie erhalten JSON, können Sie beispielsweise Folgendes tun:

Dies ist natürlich nur eine schnelle Lösung. Sie können Teile der Form_validation-Bibliothek erweitern/überschreiben. Wie ich es tun würde:

  • eine MY_Form_validation.php Bibliothek hinzufügen, kopieren Sie alle Funktionen von Form_validation.php einfügen, die $_POST (set_rules(), run(), matches())
  • Ersetzen Sie alle Instanzen von $_POST in MY_Form_validation.php verwenden mit $this->validate_data
  • Im Konstruktor $validate_data auf $_POST setzen.
  • eine Funktion set_validate_data() hinzufügen, die Sie $this->validate_data

Sie das $ zu überschreiben können _POST Array, nachdem die Daten validiert wurde, wenn Sie die gereinigten Daten verwenden möchten verwenden. Wenn dies nicht akzeptabel ist, fügen Sie auch eine Funktion hinzu, die $ this-> validate_data bereinigt und ein XSS clean-Array zurückgibt.

+0

Kein guter Code. Es könnte besser gemacht werden, indem man eine ähnliche lib zur Validierung erstellt, die auf jedem Array funktioniert anstatt nur $ _POST – DhruvPathak

+0

Sie haben nach einem Weg gefragt, ich gab Ihnen einen, Sie haben nicht gesagt, dass Sie keine schmutzigen Hacks wollen: p Ich habe einen Vorschlag für besseren Code hinzugefügt. – Bram

1

Sie können die run-Methode und die set_rule-Methode der core form validation lib des Codeigniters erweitern. Dies, wie ich es ohne Erweiterung des Kerns tun:

// Data coming from backbone model 
    $data = json_decode(file_get_contents('php://input'), true); 
    $this->config->load('myValidConf/form_validation'); 
    $non_post = array(
      'foo' => $data['foo'] 
    ); 
    $_POST = $non_post; 
    if ($this->form_validation->run('myConfigarray')!== FALSE) { 
      echo 'we're ok'; 
    } else { 
     echo validation_errors() ; 
    } 

Ich hoffe, es hilft Ihnen.

+1

Überschreiben $ _POST scheint eine schlechte Praxis zu sein. – DhruvPathak

Verwandte Themen