제목 | $this->input->post 버그일까요??? | ||
---|---|---|---|
글쓴이 | DJ구스 | 작성시각 | 2011/11/02 09:57:38 |
|
|||
이거이 문제가 뭔가 고민중인데 코어버그는 아닌거 같고...음.. 저의 결백증 코딩의 원칙이 깨져버리냐 아니냐라서..==; $this->input->post의 리턴 값이 값이 없을 경우 분명 FALSE가 맞는데.. 이상하게도 ===로 형까지 비교를 해서 저는 주로 처리를 하는데 이상하게도 리턴 되는 값이 boolen 값이 아니라 문자열인거 같아 코어를 봐도 분명 boolen값이 맞거든요.. === 로 처리 하면 안맞고 ==해야만 정확히 값이 FALSE로 처리가 될까요..?? 분명 Type형은 Boolen인데 말이죠..==; if(FALSE !== $this->input->post('msg_contents', TRUE)) {} /** * Fetch an item from the POST array * * @access public * @param string * @param bool * @return string */ function post($index = NULL, $xss_clean = FALSE) { // Check if a field has been provided if ($index === NULL AND ! empty($_POST)) { $post = array(); // Loop through the full _POST array and return it foreach (array_keys($_POST) as $key) { $post[$key] = $this->_fetch_from_array($_POST, $key, $xss_clean); } return $post; } return $this->_fetch_from_array($_POST, $index, $xss_clean); } // -------------------------------------------------------------------- /** * Fetch from array * * This is a helper function to retrieve values from global arrays * * @access private * @param array * @param string * @param bool * @return string */ function _fetch_from_array(&$array, $index = '', $xss_clean = FALSE) { if ( ! isset($array[$index])) { return FALSE; } if ($xss_clean === TRUE) { return $this->security->xss_clean($array[$index]); } return $array[$index]; } |
|||
다음글 | 검색기능. (3) | ||
이전글 | 외부에서 CI 사용하기? (3) | ||
변종원(웅파)
/
2011/11/02 10:50:51 /
추천
0
|
DJ구스
/
2011/11/02 11:25:04 /
추천
0
$this->input->post('msg_contents') 에 아무런 값이 없으면 false 리턴이 맞지 않을까요? 웅파님..?
메뉴얼과 코어 소스를 분석해보니 return false 가 맞던거 같던데 말입니다.. 아 이게 잘 못되면 그동안 소스 짢거 다 수정해야겠네여.. 경우의 수를 빡세게 쪼으는 습관이라..==; |
한대승(불의회상)
/
2011/11/02 12:59:27 /
추천
0
! isset($array[$index])이 부분은 key로 변수가 설정되어 있는 부분을 확인 하는거니까... 웅파님 말대로 form에 msg_contents가 선언(?)되어 있다면 블린값이 안나오는게 맞네요. |
변종원(웅파)
/
2011/11/02 13:01:15 /
추천
0
값이 없이 넘어왔다면
return $array [ $index ]; 이게 반환됩니다.
|
DJ구스
/
2011/11/03 17:00:29 /
추천
0
제가 다시 한번 봐야겠습니다. 메뉴얼을 보다가....
CodeIgniter는 POST, COOKIE 혹은 SERVER 아이템을 가져오기 위해서 3가지 헬퍼함수를 제공합니다. 각 아이템들을 직접가져오는것보다($_POST['something']) 헬퍼를 사용하면 더 좋은 이유는 ,헬퍼가 아이템이 세팅되어있는지를 먼저체크하고 세팅되어있지않다면 false 를 반환하기 때문입니다. 아이템이 존재하는지 먼저 검사하고 처리할 필요가 없어집니다. 다시말하면 , 일반적으로 여러분안 아래와 같이 프로그램할 것입니다.: if ( ! isset($_POST['something'])) CodeIgniter 에서는 아래와 같이 간단하게 위의 기능을 수행할 수 있는것이죠: $something = $this->input->post('something');
|
DJ구스
/
2011/11/04 09:44:15 /
추천
0
역시 isset과 empty와 is_null의 개념이었군요... ==;
즉 post변수에 값이 비어 있어도 true이고 post변수 자체가 존재 하지 않을 경우에 false를 리턴 하는군요.. 한참 멍떼리고 있었네요.. ==; |
한대승(불의회상)
/
2011/11/04 17:39:53 /
추천
0
isset은 변수가 있는지 여부를 가리는 함수이고, empty는 변수에 값이 비어 있는지를 가리는 함수 인데요.
isset의 경우 변수가 존재하면 값이 있느냐, 없느냐를 판정하지 않고 True를 반환 합니다. empty는 변수가 존재 하지 않아도 PHP의 특성상 자동으로 변수를 생성하므로 변수가 없어도 True, 값이 '', arrary(), false, null 일 경우 True를 반환 합니다. CI와 함께 즐거운 코딩 되세요 ^^ |
변종원(웅파)
/
2011/11/04 18:05:08 /
추천
0
아래 소스로 테스트 했을때 정상적으로 null b array(1) { ["a"]=> string(0) "" } 출력이 됩니다. if($_POST) { if( false == $this->input->post('b') ) echo "null b<br>"; if(FALSE === $this->input->post('b')) var_dump($_POST); } else { ?> <form action="" method="post"> <input type="text" name="a" > <input type="submit" value="go"> </form> <?php } |
첫 줄은 아무런 에러가 없습니다.
두번째 줄은 Message: Undefined index: b 라고 나옵니다.