php에서 배열을 인자로 넘길때..

sadrove의 이미지

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

이렇게만 나옵니다..
배열을 변수로 넘길때는 어떤 식으로 넘겨주어야 하나요..?..
도움 부탁드립니다..

alfalf의 이미지

다양한 방법들이 존재하겠지만 꼭 array를 그대로 전달하고 싶으시다면 'serialize' 함수와 'unserialize' 함수를 이용하시면 됩니다.

http://kr.php.net/manual/en/function.serialize.php

익명 사용자의 이미지

ㅄ?

sadrove의 이미지

alfalf wrote:
다양한 방법들이 존재하겠지만 꼭 array를 그대로 전달하고 싶으시다면 'serialize' 함수와 'unserialize' 함수를 이용하시면 됩니다.

http://kr.php.net/manual/en/function.serialize.php

답변 감사드립니다.
죄송하지만..
그 다양한 방법이라는 것에 대해 알려주실 수 있을까요..
되도록이면 일반적인 방법을 쓰고 싶어서요..
왠지 alfalf님 어감이 굳이 그렇게 안해도 된다는 말씀 같아서..^^..

카二리의 이미지

<html>
<head>
<meta http-equiv="refresh" content="0; url=./B.php?text=<?=$db_text?>">
</head>
</html>

$db_text는 array겠죠?

근대 저런식으로 array를 넘길수는 없습니다.
저런식으로 넘기는 것을 GET으로 넘긴다 라고 하는대
그냥 브라우져 주소창 주소 뒤에 text=어쩌구 해서 직접 손으로 적어서 넘기는 것과 같습니다.
근대 array를 손으로 적을수 있으신가요?
<?=$변수?>
이것은 단지 변수를 문자열 형태로 출력해줄 뿐입니다.
array를 그대로 출력하려 했기 때문에 저 곳에는 array라는 문자열만 나왔을뿐 array안의 데이터는 전혀 출력되지 않았습니다.
그래서 받는곳에서는 array라는 문자열 밖엔 못받은 것입니다.

위에 alfalf님이 말씀해주신 serialize는 배열을 특정 스트림으로 만들어서 넘겨줍니다.
php의 경우 그냥 배열을 요소들 가운대 구분 문자를 두고 문자열로 주욱 붙여넣은 듯한 형태의 문자열이 나옵니다.
이런식으로 넘겨도 되지만 생각해 보십시오. 데이터베이스에서 문자열을 수십줄 꺼내서 배열에 저장했는대, 저런방식으로 한줄로 죄다 이어 붙여서 보내게 되면 엄청난 길이의 문자열이 나오겠죠 그런대
GET은 보내는대 길이 한계가 있는 (정확하겐 모르겠습니다 256케릭터던가??) 전송 방식입니다. (브라우져 주소창에 얼마나 길게 주소를 칠수 있을지 생각해 보십시오..)
고로 이런식의 array를 넘기실 생각이라면 POST를 이용 하시는게 좋습니다. 혹은 header를 이용해 넘기셔야 합니다.

POST를 이용한 방식을 한번 보겠습니다.
궂이 serialize 까지 안해도 넘길수가 있습니다.

<html>
<body>
<form method="post" action="./B.php" id="sendform">
<?php for($i=0; $i< count($db_text); $i++){ ?>
    <input type="hidden" name="texts[]" value="<?=$db_text[$i]?>">
<?php }?>
</form>
<script>document.getElementById("sendform").submit();</script>
</body>
</html>

이런식으로 넘기면
받는쪽에선..

<?php
for($i=0; $i<count($_POST['texts']); $i++){
    echo $_POST['texts'][$i]. "<br>\n";
}
?>

정도로 받으시면 되겠습니다.

노파심에서 말씀 드리지만.. GET이나 POST를 받을때

일반 변수처럼 사용하지 마십시오. 반드시 _GET이나 _POST
를 통해서 사용하십시오....

php 보안을 지키는 가장 쉽고 안지켜지는 방법 입니다..

새 생각 :)

정태영의 이미지

sadrove wrote:
alfalf wrote:
다양한 방법들이 존재하겠지만 꼭 array를 그대로 전달하고 싶으시다면 'serialize' 함수와 'unserialize' 함수를 이용하시면 됩니다.

http://kr.php.net/manual/en/function.serialize.php

답변 감사드립니다.
죄송하지만..
그 다양한 방법이라는 것에 대해 알려주실 수 있을까요..
되도록이면 일반적인 방법을 쓰고 싶어서요..
왠지 alfalf님 어감이 굳이 그렇게 안해도 된다는 말씀 같아서..^^..

session 을 사용하는 방법도 있겠고.. (내부적으로 session은.. 시리얼라이즈를 사용합니다만.. 뭐 하튼.. 직접적으론 안보이므로..)

위의 분이 가르쳐주신대로..
?변수이름[키1]=값1&변수이름[키2]=값2... 식으로 넘기는 방법도 있겠구요..

시리얼라이즈를 해서 넘기는 방법도 있겠지요..

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

sadrove의 이미지

자세한 설명 진심으로 감사드립니다..
이제 명확히 이해가 가네요...^^..
저도 얼른 배워서 다른분에게 도움이 되어야 할텐데...
활기찬 하루 되세요~~

alfalf의 이미지

밤 사이에 윗 분들이 좋은 답변을 다 달아 주셔서 제가 말씀드릴 것이 없네요. 그래도 아쉬워서 사족을 달자면 윗분이 말씀하신 것처럼 보안을 위해 아예 'php.ini'에서 'register_globals = Off' 설정을 해 주시고 개발하시면 좋을 것 같습니다.

lovethecorners의 이미지

쉬운방법중에 하나는 $db_text 로 보낼때 ; 나 : 등으로 구분하게한뒤에 B 라는 파일에서 explode 나 split 을사용해 다시 나누어도 되겠네요.

kall의 이미지

원격지에 있는 파일이 아니라 로컬에 있는 파일이라면 그냥 include로 포함해 버리면 되지 않나요? 구지 값을 전달할 필요가 있는지요..?

----
자신을 이길 수 있는자는
무슨짓이든 할수있다..
즉..무서운 넘이란 말이지 ^-_-^
나? 아직 멀었지 ㅠㅠ

Necromancer의 이미지

하나의 웹페이지 내에서 해당 변수를 공유하실려고 하신건가요? 아니면 여러 페이지 사이에서 변수를 공유하고 싶으신건가요?

PHP 여러개로 구성된 하나의 웹페이지 내에서 공유한다면 차라리 include 형태로 하시는게 낫고요.
여러 페이지 사이에서 공유하실려면 세션을 쓰세요.

세션 쓰실려면 PHP 첫머리에 session_start() 넣으신 뒤에 중간중간에 $_SESSION["변수명"]="넣을려는 값" 형태로 쓰시면 됩니다.
PHP 변수면 뭐든 다 들어가고 다른 페이지도 첫머리에 session_start() 있으면 똑같이 불러올 수 있습니다.

Written By the Black Knight of Destruction

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.