2012-04-02 4 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에 $_POST의 모든 인스턴스를 교체 $_POST (set_rules(), run(), matches())
  • 를 사용 Form_validation.php에서 모든 기능을 붙여 넣 MY_Form_validation.php 라이브러리를 복사 추가 $this->validate_data
  • 생성자에서 $validate_data에서 $_POST으로 설정하십시오.
  • $this->validate_data

당신은 데이터의 유효성을 검사 한 후에는 청소 데이터를 사용하려는 경우는 $ _POST 배열을 사용해야합니다 덮어 쓸 수있는 기능 set_validate_data()를 추가합니다. 이것이 허용되지 않는 경우 $ this-> validate_data를 지우고 XSS 정리 배열을 반환하는 함수를 추가하십시오.

+0

좋은 코드가 아닙니다. 그냥 $ _POST 대신 어떤 배열에서도 작동하는 유효성 검사와 비슷한 라이브러리를 만들어서 더 잘 수행 할 수 있습니다. – DhruvPathak

+0

길을 물어 보았습니다. 나는 당신에게 하나를주었습니다. 당신이 더러운 해킹을 원하지 않는다고 말하지 않았습니다. 더 나은 코드에 대한 제안을 추가했습니다. – 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

관련 문제