TIP게시판

제목 설정없이 GET으로 전달한 Query String 가져오기
글쓴이 mycastor 작성시각 2010/03/19 09:28:45
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 21655   RSS
class MY_Input extends CI_Input {
	private $qs = array();

	public function __construct() {
		parent::CI_Input();

		if(isset($_SERVER['REDIRECT_QUERY_STRING'])) {
			$params = explode("&", $_SERVER["REDIRECT_QUERY_STRING"]);
			
			for($i = 0; $i < sizeof($params); $i++) {
				list($key, $value) = explode("=", $params[$i]);

				if(!is_null($value) && $value != "") {
					$this->qs[$key] = $value;
				}
			}
		}
	}

	public function query_string($key) {
		if(array_key_exists($key, $this->qs)) {
			return $this->qs[$key];
		} else {
			return false;
		}
	}
}

config.php 파일의 설정없이 GET으로 전달한 Query String 값을 가져오도록

입력 클래스를 확장하였습니다.

http://www.abs.com/controller/method?a=1&b=2&c=3

위와 같은 URL에서 a, b, c의 값을 가져올수 있으며

$this->input->query_string('a');
$this->input->query_string('b');
$this->input->query_string('c');

와 같은 방법으로 사용하시면 됩니다.

다른 방법이 있는지는 찾아보지는 않았지만 Query String 값을 가져올수 있는

간단한 방법이라고 생각합니다.

어짜피 GET 으로 넘어온 데이터를 가져오는 것이니 보안상 문제 될것은 없겠죠?

 다음글 PHPExcel를 CI속으로~ (6)
 이전글 주소등 인코딩해서 보내기 (4)

댓글

변종원(웅파) / 2010/03/19 11:15:10 / 추천 0
보안부분을 추가해야할것 같은데...
기존 input 클래스 보면 xss에 대한 처리부분이 있는데 query_string()에 그걸 적용해줘야 함. ^^
그것만 보완되면 편하게 주소체계를 쓸수있어서 좋네. ^^
꿈자 / 2010/03/24 14:19:15 / 추천 0
상단 소스를 그대로 libraries폴더내 MY_Input.php를 생성하여 호출해보았는데요..404 not found라고 나오네요.
위 소스말고 또다른 셋팅을 해야 하는지요?
변종원(웅파) / 2010/03/24 15:46:32 / 추천 0
위 소스는 php5용입니다. php버전 체크를 해보시기 바랍니다.
mycastor / 2010/03/25 09:10:57 / 추천 0
꿈자님//
PHP4버젼은 위 소스처럼 클래스 생성자 사용 및 메소드의 접근한정자를 지정할 수 없습니다.

PHP4 버젼을 사용하신 다면 소스를 아래의 소스를 이용하시면 됩니다.

class MY_Input extends CI_Input {
	var $qs = array();

	function MY_Input() {
		parent::CI_Input();

		if(isset($_SERVER['REDIRECT_QUERY_STRING'])) {
			$params = explode("&", $_SERVER["REDIRECT_QUERY_STRING"]);
			
			for($i = 0; $i < sizeof($params); $i++) {
				list($key, $value) = explode("=", $params[$i]);

				if(!is_null($value) && $value != "") {
					$this->qs[$key] = $value;
				}
			}
		}
	}

	function query_string($key) {
		if(array_key_exists($key, $this->qs)) {
			return $this->qs[$key];
		} else {
			return false;
		}
	}
}
도움이 되셨기를 바랍니다.

 
사탄 / 2010/05/24 17:49:43 / 추천 0

전 이렇게 하니까.. 소스참 이뻐여 list 문 array_key_exists 한번도 사용해본적 없어서리..

<?
class MY_Input extends CI_Input {
  
 private $qs = array();

 function __construct() {
  parent::CI_Input();
  if(isset($_SERVER['QUERY_STRING'])) {
      
   $params = explode("&", $_SERVER["QUERY_STRING"]);
   for($i = 0; $i < sizeof($params); $i++) {    
    list($key, $value) = explode("=", $params[$i]);    
    if(!is_null($value) && $value != "") {    
     $this->qs[$key] = $value;    
    }
   }
  }
 }

 function query_string($key) { 
  if(array_key_exists($key, $this->qs)) {   
   return $this->qs[$key];
  } else {   
   return false; 
  }
 }
}
?>

스케치over / 2012/02/06 16:31:44 / 추천 0
참고 사항입니다.

내장 Input 클래스를 확장하고자 한다면,
application/core/MY_Input.php으로 파일을 만들어야 합니다.