묻고답하기
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
global선언자와 Post,Get방식에 대한 질문여...
2003.01.16 18:28
몇 일전에 이와 유사한 소스로 질문을 드린적이 있는데,
여러분들의 답변을 종합해서 다시 생각을 해보니, global선언자라는
것에 대해 제대로 알아야 예전에 질문을 한 것이 해결될 것 같아서
이렇게 질문을 드립니다.
우선 질문의 내용은...
<?
function sum(){
$a=10;
global $a;
$a=$a+2;
echo "$a의 값은 ".$a."입니다.<br>";
}
$a=30;
sum();
sum();
sum();
echo "<br>";
echo "$a의 값은 ".$a."입니다.<br>";
?>
라고 코딩했을 때,
결과가
$a의 값은 32입니다.
$a의 값은 34입니다.
$a의 값은 36입니다.
$a의 값은 36입니다.
라고 나오는데요, 이결과를 봤을 때 특정변수에 global을 붙일 경우
함수내에 있는 변수값을 참조하는 것이 아닌, 함수 밖에 있는 변수값을
참조하는거 같은데... 제 생각이 맞나요??
어째보면, 쓸데없는 질문 같지만...하나라도 제대로 이해하고 넘어가기
위해서 이런 질문을 드리는 거니까요, 이해해 주세요^^;;
그리고 질문이 하나 더 있는데요...
폼에 입력한 값을 PHP문서로 넘길 때 전송방식이 Post방식이 있고, Get방식이 있잖아요.
그런데, Post방식으로 설정하고 내용입력란에 많은 내용을 입력하고 전송버튼을 클릭하면
PHP문서로 잘 넘어가는데, Get방식으로 설정하고 내용입력란에 많은 내용을 입력하고
전송버튼을 클릭하면 그냥 웹페이지가 가만히 있네요...ㅡㅡ;
원래 Get방식을 사용할 이런 현상이 발생되는 건가요??
그리고, 어떤 상황에서 Get방식을 사용해야 하는 건가요??
혹시 몰라서 제가 코딩한 내용을 아래 적어 놓겠습니다. ^^;;
-------------------내용입력하는 페이지 소스-----------------------
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<style type="text/css">
<!--
p { font-size: 12px; color: #333333; text-decoration: none}
.unnamed1 { border: #FFFFFF; border-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px}
-->
</style>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<form name="form1" action=".result.php" method="get">
<table width="431" border="0" cellpadding="0" cellspacing="1" bgcolor="#000000">
<tr bgcolor="#FFFFFF" valign="middle">
<td height="25" colspan="2" bgcolor="#996699">
<p align="center"><b><font color="#FFFFFF">Q&A게시판</font></b></p>
</td>
</tr>
<tr bgcolor="#FFFFFF" valign="middle">
<td width="169" height="25">
<p>이름 :
<input type="text" name="name" size="15" class="unnamed1">
</p>
</td>
<td width="262">
<p>이메일 :
<input type="text" name="email" size="25" class="unnamed1">
</p>
</td>
</tr>
<tr bgcolor="#FFFFFF" valign="middle">
<td colspan="2" height="25">
<p>제목 :
<input type="text" name="object" size="59" class="unnamed1">
</p>
</td>
</tr>
<tr bgcolor="#FFFFFF" valign="middle">
<td height="158" colspan="2" valign="top">
<p>
<textarea name="story" cols="67" rows="10" class="unnamed1" wrap="OFF">
</textarea>
</p>
</td>
</tr>
<tr bgcolor="#996699" valign="middle">
<td height="25" colspan="2">
<p align="center">
<input type="submit" name="Submit" value="전송">
<input type="reset" name="Submit2" value="다시작성">
</p>
</td>
</tr>
</table>
</form>
</body>
</html>
------------------결과가 나타나는 페이지 소스---------------------
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<style type="text/css">
<!--
p { font-size: 12px; color: #000000; text-decoration: none}
-->
</style>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table width="431" border="0" cellpadding="0" cellspacing="1" bgcolor="#000000">
<tr bgcolor="#996699" valign="middle">
<td height="25" colspan="2">
<? echo"<p align="center"><font color="#FFFFFF"><b>게시물 내용</b></font></p>" ?>
</td>
</tr>
<tr bgcolor="#FFFFFF" valign="middle">
<td width="167" height="25">
<? echo "<p>작성자 : ".$name."</p>" ?>
</td>
<td width="261">
<? echo "<p>이메일 : ".$email."</p>" ?>
</td>
</tr>
<tr bgcolor="#FFFFFF" valign="middle">
<td colspan="2" height="25">
<? echo "<p>제목 : ".$object."</p>" ?>
</td>
</tr>
<tr bgcolor="#FFFFFF" valign="top">
<td height="184" colspan="2">
<? echo "<p>".$story."</p>" ?>
</td>
</tr>
</table>
</body>
</html>
여러분들의 답변을 종합해서 다시 생각을 해보니, global선언자라는
것에 대해 제대로 알아야 예전에 질문을 한 것이 해결될 것 같아서
이렇게 질문을 드립니다.
우선 질문의 내용은...
<?
function sum(){
$a=10;
global $a;
$a=$a+2;
echo "$a의 값은 ".$a."입니다.<br>";
}
$a=30;
sum();
sum();
sum();
echo "<br>";
echo "$a의 값은 ".$a."입니다.<br>";
?>
라고 코딩했을 때,
결과가
$a의 값은 32입니다.
$a의 값은 34입니다.
$a의 값은 36입니다.
$a의 값은 36입니다.
라고 나오는데요, 이결과를 봤을 때 특정변수에 global을 붙일 경우
함수내에 있는 변수값을 참조하는 것이 아닌, 함수 밖에 있는 변수값을
참조하는거 같은데... 제 생각이 맞나요??
어째보면, 쓸데없는 질문 같지만...하나라도 제대로 이해하고 넘어가기
위해서 이런 질문을 드리는 거니까요, 이해해 주세요^^;;
그리고 질문이 하나 더 있는데요...
폼에 입력한 값을 PHP문서로 넘길 때 전송방식이 Post방식이 있고, Get방식이 있잖아요.
그런데, Post방식으로 설정하고 내용입력란에 많은 내용을 입력하고 전송버튼을 클릭하면
PHP문서로 잘 넘어가는데, Get방식으로 설정하고 내용입력란에 많은 내용을 입력하고
전송버튼을 클릭하면 그냥 웹페이지가 가만히 있네요...ㅡㅡ;
원래 Get방식을 사용할 이런 현상이 발생되는 건가요??
그리고, 어떤 상황에서 Get방식을 사용해야 하는 건가요??
혹시 몰라서 제가 코딩한 내용을 아래 적어 놓겠습니다. ^^;;
-------------------내용입력하는 페이지 소스-----------------------
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<style type="text/css">
<!--
p { font-size: 12px; color: #333333; text-decoration: none}
.unnamed1 { border: #FFFFFF; border-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px}
-->
</style>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<form name="form1" action=".result.php" method="get">
<table width="431" border="0" cellpadding="0" cellspacing="1" bgcolor="#000000">
<tr bgcolor="#FFFFFF" valign="middle">
<td height="25" colspan="2" bgcolor="#996699">
<p align="center"><b><font color="#FFFFFF">Q&A게시판</font></b></p>
</td>
</tr>
<tr bgcolor="#FFFFFF" valign="middle">
<td width="169" height="25">
<p>이름 :
<input type="text" name="name" size="15" class="unnamed1">
</p>
</td>
<td width="262">
<p>이메일 :
<input type="text" name="email" size="25" class="unnamed1">
</p>
</td>
</tr>
<tr bgcolor="#FFFFFF" valign="middle">
<td colspan="2" height="25">
<p>제목 :
<input type="text" name="object" size="59" class="unnamed1">
</p>
</td>
</tr>
<tr bgcolor="#FFFFFF" valign="middle">
<td height="158" colspan="2" valign="top">
<p>
<textarea name="story" cols="67" rows="10" class="unnamed1" wrap="OFF">
</textarea>
</p>
</td>
</tr>
<tr bgcolor="#996699" valign="middle">
<td height="25" colspan="2">
<p align="center">
<input type="submit" name="Submit" value="전송">
<input type="reset" name="Submit2" value="다시작성">
</p>
</td>
</tr>
</table>
</form>
</body>
</html>
------------------결과가 나타나는 페이지 소스---------------------
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<style type="text/css">
<!--
p { font-size: 12px; color: #000000; text-decoration: none}
-->
</style>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table width="431" border="0" cellpadding="0" cellspacing="1" bgcolor="#000000">
<tr bgcolor="#996699" valign="middle">
<td height="25" colspan="2">
<? echo"<p align="center"><font color="#FFFFFF"><b>게시물 내용</b></font></p>" ?>
</td>
</tr>
<tr bgcolor="#FFFFFF" valign="middle">
<td width="167" height="25">
<? echo "<p>작성자 : ".$name."</p>" ?>
</td>
<td width="261">
<? echo "<p>이메일 : ".$email."</p>" ?>
</td>
</tr>
<tr bgcolor="#FFFFFF" valign="middle">
<td colspan="2" height="25">
<? echo "<p>제목 : ".$object."</p>" ?>
</td>
</tr>
<tr bgcolor="#FFFFFF" valign="top">
<td height="184" colspan="2">
<? echo "<p>".$story."</p>" ?>
</td>
</tr>
</table>
</body>
</html>
댓글 3
-
뒹굴리스트
2003.01.16 18:31
-
TheMics
2003.01.16 19:24
함수 내에서는 외부와는 별도로 변수를 사용합니다. 그래서 외부의 변수를 함수 내에서 사용하려면 global로 선언해줘야 하죠. global로 선언된 변수를 전역변수라 합니다.
예를 들어
function sum(){
$a=10;
global $a;
$a=$a+2;
echo "\$a의 값은 ".$a."입니다.<br>";
}
$a=30;
이 경우에 global $a;가 없다면 12,14,16 이렇게 나오겠죠.
또한 get방식은 많은 양의 데이터를 처리할때 제약이 있습니다. 너무 길면 전송중에 짤려버리가거 멈춰버립니다.
폼을 이용해 데이터를 보내는 것은 일반적으로 post를 사용하는 이유 중 하나가 저것이죠(보안상 이유도 있구요..^^) -
허진규
2003.01.16 21:14
post 는 직접 get 처럼 직접전송하는것이아니라 숨겨진 메일을통해전송한다고 생각하시면 이해가 쉬울겁니다..
post 사용하면 액션 파일에 메일 을 보내듯 모든내용을 보내는거죠 ^ ^
모든정보를 포함시킬수있죠 -0-;
주소창에도 post 로보낸 내용은 표시되지 않습니다 ^ ^
쿨럭;;;