TIP게시판

제목 [수정] POST 값 전체를 간단히 검증을 하고 view에 곧장 넘겨서 사용하고 싶을때!
글쓴이 kaido 작성시각 2016/05/18 11:02:16
댓글 : 4 추천 : 0 스크랩 : 2 조회수 : 14167   RSS

제목이 길군요.

뭔가 거창해 보입니다.

하지만 아주 간단한 코드입니다.

[이미 사용하는 분들도 많을 거라 믿습니다.]

 

요약하면...

 

POST submit 을 때렸는데 받아야 하는 post 값이 너무 많아서 

 

$this->input->post....

$this->input->post....

$this->input->post....

 

이거 반복 하기 싫다는 겁니다.

그렇다고 $_POST 으로만 받으면 검증이 빠져서 불안 하구요.

 

깜작 놀랄만큼 간단한 코드로 반복 작업을 없앨 수 있습니다.

[이미 만들어서 쓰시는 분들도 많을 겁니다. ㅎ]

 

$data = array();
		if($_POST){
			foreach($_POST as $key => $val){				
				if($this->input->post("{$key}" ,true) || $this->input->post("{$key}" ,true) === "") $data["{$key}"] = $val;
			}
		}

echo $data['....'];

 

끗.

요약 설명. post로 넘어온 값이 1개라도 있다면 모든 값을 루프 돌면서

input name 으로 넘어온 값으로 $data['name'] 으로 넣음. 

단. post 검증을 통과하고  값이 공란까지는 인정.

 

나중에 폼밸리데이션 라이브러리를 넣어서 약간 더 체계적으로 구축 해봐야겠군요.

 

기승전 가변변수는 사랑입니다.

 

ps. 더욱 간단한 로직이 있었네요! 추가 수정 합니다.

 

$data = array();
foreach($this->input->post(NULL, TRUE) as $key => $val) $data["{$key}"] = $val;

 

끗. 코드 압축은 정의 입니다.

 다음글 PHP MongoDB 드라이버 이용시 Object ID... (1)
 이전글 sql select 쪼~~~금 더 빠르게 만드는 팁 (4)

댓글

한대승(불의회상) / 2016/05/18 13:48:41 / 추천 0

^^ 좋은 정보 감사 합니다.

사족으로 함수나 메소드 호출 하실 때는 가변변수 보다 변수를 직접 넘겨 주면 어떨까 싶습니다.

$this->input->post("{$key}" ,true) => $this->input->post($key ,true)

 

kaido / 2016/05/18 14:16:00 / 추천 0

가변변수로 사용한것에는 이유가 있습니다.

$key로 찍으면 

post( name , true); 

이런형태의 문자형이기 때문에 "" 틱을 감아  post("name",true); 이런식의 문자형으로 전달 하기 위해 가변변수가 차용되었습니다 ^^

"" 더블쿼터나 '' 싱글쿼터로 틱을 감아 주지 않으면 아파치 설정에 따라서는 워닝 로그를 쌓아버립니다.

 

아 물론 함수나 메소드를 호출 한다면 틱을 감은 가변이 아닌 $key 로 호출 하는게 맞습니다.

 

꽤 오래전에 봤던 PHP 이슈라서 지금은 어떨지는 모르겠습니다만 조심해서 나쁠건 없지요.

fnmeat / 2016/05/20 16:44:49 / 추천 0

php 의 filter extension 을 이용할 수도 있습니다.

$data = filter_input_array(INPUT_POST);

codeigniter 의 xss_clean 기능이나 추가적인 콜백이 필요하면

$data = array_map(function($value){
	return $value;
}, $this->input->post());

이런 형식도 가능하겠네요.

윤동훈 / 2016/09/13 11:05:59 / 추천 0
$this->input->post(NULL, true);

위와 같이 쓰면 자동적으로 모든 post 값이 필터가 적용되는데 

$Data = $this->input->post(NULL, true);

혹시 위와 같이 처리하는것으로는 가능하지 않을까요?