form에서 다차원배열값을 post로 넘기고 받을때의 문제점 > 그누4 팁자료실

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

form에서 다차원배열값을 post로 넘기고 받을때의 문제점 정보

form에서 다차원배열값을 post로 넘기고 받을때의 문제점

본문

안녕하세요?
이 문제 때문에 하루를 꼬박 까먹고 해결하게 되어 팁 게시판에 남깁니다.
혹시 비슷한 문제점을 겪는 분이 계시면 빨리 찾아보시라고요..

예를들어 다음과 같은 폼이 있다고 가정합니다.
<form name="test" method="post" action="<?=$g4[admin_path]?>/test.php">
<p><input type="text" name="testpost[0][0]" value="" /></p>
<input type="submit" value="실행" />
</form>

보시다시피 testpost 라는 변수를 2차원 배열로 구성해서 넘깁니다.
하지만 받는쪽에서 아무리 출력해보아도 값은 나오지 않습니다.

단, testpost[0] 이런식으로 1차원으로 구성하면 잘 출력이 됩니다.

원인은 common.php
파일의 30행 부터 시작되는 SQL 인젝션 방어코드입니다.
해당 코드에서 GET 또는 POST로 넘어오는 값들에 대해서
addslashed()를 적용시키는데요
문제는 1차원 배열까지만 적용되게 되어 있습니다. (왜?????)

저같은 경우는 일단 2차원 배열을 사용해야 하기 때문에 코드를 변경하였습니다.

// 원래코드
    if(is_array($_POST)) {
        while(list($k, $v) = each($_POST)) {
            if(is_array($_POST[$k])) {
                while(list($k2, $v2) = each($_POST[$k])) {
                    $_POST[$k][$k2] = addslashes($v2);
                }
                @reset($_POST[$k]);
            } else {
                $_POST[$k] = addslashes($v);
            }
        }
        @reset($_POST);
    }

//변경한 코드
    if(is_array($_POST)) {
        while(list($k, $v) = each($_POST)) {
            if(is_array($_POST[$k])) {
                while(list($k2, $v2) = each($_POST[$k])) {
                if(is_array($_POST[$k][$k2])){
                while(list($k3, $v3) = each($_POST[$k][$k2])) {
                $_POST[$k][$k2][$k3] = addslashes($v3);
}
                } else {
                $_POST[$k][$k2] = addslashes($v2);
                }
                }
                @reset($_POST[$k]);
            } else {
                $_POST[$k] = addslashes($v);
            }
        }
        @reset($_POST);
    }

만약에 3차원 4차원의 배열을 post로 넘겨야 한다면,
위의 코드를 비교하여 그에 맞게 변경하시면 될 것 같습니다.

또한, 제가 아주 초보자라서
이렇게 밖에 해결하지 못했지만
더 좋은 방법이 있다면 알려주세요.
감사히 배우겠습니다.
추천
4

댓글 3개

곰새 님 께서 아주 초보자라면 저같은 완전 초보는 명함도 못내밀겠습니다....^^*

아직 잘~ 모르지만 한번 보고 좋아요 추천요~~~ ^^

좋은 자료 감사합니다......저도 언릉 잘~ 해야 할텐데....*^___^*;
저도 이게 잠시 막혀서 검색질 하다가 여기까지 왔네요....
그래서 이래 저래 하다 보니....이런 방법도 있더라구요....

재귀호출 방식

function addslash_arr($arr) {
$arr2 = array();
if( is_array($arr) ) {
while( list($k, $v) = each($arr) ) {
if( is_array($arr[$k]) ) {
$arr2[$k] = addslash_arr($arr[$k]);
}
else {
$arr2[$k] = addslashes($v);
}
}
@reset($arr);
}
return $arr2;
}

$_POST = addslash_arr($_POST);

이렇게 해 놓으니 연관배열이 2중이든 3중이든 잘 먹히네요
전체 3,309 |RSS
그누4 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT