2012-04-02 7 views
2

フォーム投稿を経由しないユーザー生成データがあると仮定します。 CodeIgnitorsのform_validationクラスを使用してそのデータを検証する方法がありますか?フォームからの変数/入力のCodeIgnitor検証?

例えば、

<?php 
$userData = array('name' => 'tt' , 'city' => 'London' , 'age' => '1200'); 
// How can I validate this data using form_validation checks 
// like min_length,max_length,and apply some processing 
// like trim,xss_clean provided by the same class 

?> 
+0

答えるの質問に関連していないことも... しかし、私が知っている可能性があります...が、その後、どの方法により、このユーザはデータがユーザから来ている生成しましたか?ユーザーがフォームを送信していない場合 – TechCare99

+0

こんにちは@ TechCare99、個々のフォーム要素ではなく、ユーザーがjsonとしてデータを提供していると仮定するか、このデータは、サニタイズする必要があるデータベースの未処理データです。 – DhruvPathak

答えて

3

はい、set_data()の方法で送信できます。

$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

は汚いハックのように聞こえるかもしれませんが、あなたは$ _POSTデータを設定することで、フォームのポストをだますだろうか? JSONを受け取ったとします。

$json = "...."; //json encoded string 
$arr = json_decode($json, true); 
foreach($arr as $key => $value) 
{ 
    $_POST[$key] => $value; 
} 

// do form validation as if the data was posted from a form. 

これはオフクールな機能ですForm_validationライブラリの一部を拡張/上書きすることができます。私はそれを行うだろうか。

  • MY_Form_validation.phpライブラリを追加し、$_POSTset_rules()run()matches()
  • を使用Form_validation.phpからのすべての機能を持つMY_Form_validation.phpで$_POSTのすべてのインスタンスを置き換えコピー&ペースト$this->validate_data
  • コンストラクタ内に$validate_data~$_POSTを設定します。
  • あなたは、データが検証された後、あなたがきれいにデータを使用したい場合は、$ _POSTの配列を使用する必要があります$this->validate_data

を上書きすることを可能にする機能set_validate_data()を追加します。これが受け入れられない場合は、$ this-> validate_dataを消去してXSSクリーン配列を返す関数を追加してください。

+0

いいコードではありません。それは、ちょうど$ _POSTの代わりに任意の配列で動作するバリデーションのための同様のライブラリを作成することでうまくいくかもしれません – DhruvPathak

+0

あなたは方法を尋ねました、私はあなたに1つを与えました、あなたは汚れたハックを望んでいないと言っていませんでした:より良いコードの提案が追加されました。 – Bram

1

codeigniterのコアフォーム検証libのrunおよびset_ruleメソッドを拡張することができます。コアを拡張せずにこれを行う方法:

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

私はあなたに役立つことを願っています。

+1

$ _POSTを上書きするのは悪い習慣のようです。 – DhruvPathak

関連する問題