php에서 배열을 인자로 넘길때..
글쓴이: sadrove / 작성시간: 화, 2005/01/18 - 9:28오후
php에 익숙하지 않은 초보입니다..^^.
A라는 파일에서 DB에 접속하여 각 레코드의 값을 차례로 가져와서 db_text라는 배열에 차곡차곡 담았습니다...
그리고 이 배열을 B라는 파일로 넘기려고 합니다..
그래서 아래와 같이 넘겼는데요..
<html> <head> <meta http-equiv="refresh" content="0; url=./B.php?text=<?=$db_text?>"> </head> </html>
막상 B파일에서 출력해보면..
for($j=0; $text[$j] != null; $j++){ echo $text[$j] . "<br>"; }
Quote:
a
r
r
a
y
이렇게만 나옵니다..
배열을 변수로 넘길때는 어떤 식으로 넘겨주어야 하나요..?..
도움 부탁드립니다..
Forums:
꼭 array를 그대로 넘기시고 싶으시다면...
다양한 방법들이 존재하겠지만 꼭 array를 그대로 전달하고 싶으시다면 'serialize' 함수와 'unserialize' 함수를 이용하시면 됩니다.
http://kr.php.net/manual/en/function.serialize.php
ㅂㅅ
ㅄ?
Re: 꼭 array를 그대로 넘기시고 싶으시다면...
답변 감사드립니다.
죄송하지만..
그 다양한 방법이라는 것에 대해 알려주실 수 있을까요..
되도록이면 일반적인 방법을 쓰고 싶어서요..
왠지 alfalf님 어감이 굳이 그렇게 안해도 된다는 말씀 같아서..^^..
Re: php에서 배열을 인자로 넘길때..
$db_text는 array겠죠?
근대 저런식으로 array를 넘길수는 없습니다.
저런식으로 넘기는 것을 GET으로 넘긴다 라고 하는대
그냥 브라우져 주소창 주소 뒤에 text=어쩌구 해서 직접 손으로 적어서 넘기는 것과 같습니다.
근대 array를 손으로 적을수 있으신가요?
<?=$변수?>
이것은 단지 변수를 문자열 형태로 출력해줄 뿐입니다.
array를 그대로 출력하려 했기 때문에 저 곳에는 array라는 문자열만 나왔을뿐 array안의 데이터는 전혀 출력되지 않았습니다.
그래서 받는곳에서는 array라는 문자열 밖엔 못받은 것입니다.
위에 alfalf님이 말씀해주신 serialize는 배열을 특정 스트림으로 만들어서 넘겨줍니다.
php의 경우 그냥 배열을 요소들 가운대 구분 문자를 두고 문자열로 주욱 붙여넣은 듯한 형태의 문자열이 나옵니다.
이런식으로 넘겨도 되지만 생각해 보십시오. 데이터베이스에서 문자열을 수십줄 꺼내서 배열에 저장했는대, 저런방식으로 한줄로 죄다 이어 붙여서 보내게 되면 엄청난 길이의 문자열이 나오겠죠 그런대
GET은 보내는대 길이 한계가 있는 (정확하겐 모르겠습니다 256케릭터던가??) 전송 방식입니다. (브라우져 주소창에 얼마나 길게 주소를 칠수 있을지 생각해 보십시오..)
고로 이런식의 array를 넘기실 생각이라면 POST를 이용 하시는게 좋습니다. 혹은 header를 이용해 넘기셔야 합니다.
POST를 이용한 방식을 한번 보겠습니다.
궂이 serialize 까지 안해도 넘길수가 있습니다.
이런식으로 넘기면
받는쪽에선..
정도로 받으시면 되겠습니다.
노파심에서 말씀 드리지만.. GET이나 POST를 받을때
일반 변수처럼 사용하지 마십시오. 반드시 _GET이나 _POST
를 통해서 사용하십시오....
php 보안을 지키는 가장 쉽고 안지켜지는 방법 입니다..
새 생각 :)
Re: 꼭 array를 그대로 넘기시고 싶으시다면...
session 을 사용하는 방법도 있겠고.. (내부적으로 session은.. 시리얼라이즈를 사용합니다만.. 뭐 하튼.. 직접적으론 안보이므로..)
위의 분이 가르쳐주신대로..
?변수이름[키1]=값1&변수이름[키2]=값2... 식으로 넘기는 방법도 있겠구요..
시리얼라이즈를 해서 넘기는 방법도 있겠지요..
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
자세한 설명 진심으로 감사드립니다..이제 명확히 이해가 가네요...^
자세한 설명 진심으로 감사드립니다..
이제 명확히 이해가 가네요...^^..
저도 얼른 배워서 다른분에게 도움이 되어야 할텐데...
활기찬 하루 되세요~~
밤사이에...
밤 사이에 윗 분들이 좋은 답변을 다 달아 주셔서 제가 말씀드릴 것이 없네요. 그래도 아쉬워서 사족을 달자면 윗분이 말씀하신 것처럼 보안을 위해 아예 'php.ini'에서 'register_globals = Off' 설정을 해 주시고 개발하시면 좋을 것 같습니다.
쉬운방법중에 하나는 $db_text 로 보낼때 ; 나 : 등으로 구분하게
쉬운방법중에 하나는 $db_text 로 보낼때 ; 나 : 등으로 구분하게한뒤에 B 라는 파일에서 explode 나 split 을사용해 다시 나누어도 되겠네요.
원격지에 있는 파일이 아니라 로컬에 있는 파일이라면 그냥 include로
원격지에 있는 파일이 아니라 로컬에 있는 파일이라면 그냥 include로 포함해 버리면 되지 않나요? 구지 값을 전달할 필요가 있는지요..?
----
자신을 이길 수 있는자는
무슨짓이든 할수있다..
즉..무서운 넘이란 말이지 ^-_-^
나? 아직 멀었지 ㅠㅠ
같은 페이지 내에서 해당 변수를 공유하실려고
하나의 웹페이지 내에서 해당 변수를 공유하실려고 하신건가요? 아니면 여러 페이지 사이에서 변수를 공유하고 싶으신건가요?
PHP 여러개로 구성된 하나의 웹페이지 내에서 공유한다면 차라리 include 형태로 하시는게 낫고요.
여러 페이지 사이에서 공유하실려면 세션을 쓰세요.
세션 쓰실려면 PHP 첫머리에 session_start() 넣으신 뒤에 중간중간에 $_SESSION["변수명"]="넣을려는 값" 형태로 쓰시면 됩니다.
PHP 변수면 뭐든 다 들어가고 다른 페이지도 첫머리에 session_start() 있으면 똑같이 불러올 수 있습니다.
Written By the Black Knight of Destruction
댓글 달기