[질문] php 파라메터를 받지를 못합니다.?
안녕하세요
리눅스에 apahce2.0과 php-4.3.2를 설치를 하였습니다.
근데 Get,Post방식으로 파라메터를 날리면.
값을 전혀 받지를 못합니다.
왜그런지 답변 부탁드립니다
----------------------------( test.php )source-----------------------<? $var="test name";
//name=name;
?>
<!--? phpinfo(); ? -->
<html><head>
<title>연습입니다.</title>
<meta http-equiv="content-type" content="text/html; charset=Korean">
</head>
<body>
<form action='test.php' method='post'>
<table>
<tr><td>이름:<?= $var ?> : <?= $realname ?></td></tr>
<tr><td><input type='text' name='realname'></td></tr>
<tr><td><input type='submit' value='ok'></td></tr>
</table>
</form>
</body>
</html>
-----------------------------------------------------------------------
전혀 적용이 되지 않는 소스입니다.
위 소스가 그대로 보인다는 것인가요?
위 소스가 그대로 보인다는 것인가요?
아니면 GET , POST 시에
<?= $var ?> : <?= $name ?>
이런 값들이 보이지 않는 다는 것인가요?
그리고, GET , POST 로 넘겨받는 소스에서 어떻게 처리하신 것인가요?
name != realname
사용자가 바꾸어 나가자!!
= about me =
http://wiki.kldp.org/wiki.php/offree , DeVlog , google talk : offree at gmail.com
register_global=on
이거 아닐까요?
phpschool.com 에... 가시면 더 확실히 알 수 있을듯
register_globals=off일 경우에는 url로 입력된 변수들은
register_globals=off일 경우에는 url로 입력된 변수들은
HTTP_GET_VARS[], HTTP_POST_VARS[] 배열을 이용해서 간접적으로 받아들여야 합니다.
홈페이지를 지금 그런식으로 만들고 있죠. 아직 덜 만들었지만.
제일 빠른 방법은 off를 on으로 바꾸는 거긴 하죠. 하지만 들은 얘기로는 보안에 문제가 있다던데
Written By the Black Knight of Destruction
질문내용 수정하였습니다. 죄송합니다.
먼저 확인하지 않고 글을 올려서 죄송합니다
질문소스 중에
<td>이름:<?= $var ?> : <?= $name ?></td> <!--변경전
<td>이름:<?= $var ?> : <?= $realname ?></td><!--변경후
와 같이 바꾸었습니다.
질문 내용은 같습니다.
Linux 를 배워봅시다.
[code:1]$_POST['name']$_POST
바꿔 보세요. form method 가 GET 이면 $_GET 으로 사용하면 됩니다.
register_globals=on 은 하지 마세요. 보안 상 매우 안좋아서.
[quote="흑기사"]register_globals=off일 경우에는
php.net 에서 보니 $HTTP_GET_VARS 보다는 $_GET 이, $HTTP_POST_VARS 보다는 $_POST 가 권장되더군요. :)
(일단 글자수도 더 적으므로... 8))
에... 그리고, register_globals=on 으로 바꿔도, 조심해서 코딩하면 괜찮습니다. 보안에 문제가 있다는 것이 php 스크립트에서 사용하는 내부 변수가 GET 이나 POST 메소드로 인해 변조된다는 이유인데, 사용하기 전에 unset 으로 지우고 사용하면 안전합니다. (마치 C 나 Java 에서 사용하기 전 선언하는 것처럼요...)
----
블로그 / 위키 / 리눅스 스크린샷 갤러리
요즘 PHP버전은 디폴트치가 [register_globals=off]
요즘 PHP버전은 디폴트치가 [register_globals=off]
이지만 과거에는 [register_globals=on]이었죠. 보안때문에 바뀐거긴 하지만.
옛날프로그램을 수정안하고 쓰고 싶으시면 이거만 on으로 고쳐주시면 되고요.
가능한 새로짜는 프로그램은 다 $_POST와 $_GET을 쓰세요.
보안문제도 있지만 프로그램 위에서 이런식으로 변수정리를 해놓으니 코드분석도 무척 편리하더군요.
===== ===== ===== ===== =====
그럼 이만 총총...[竹]
http://elflord.egloos.com
php 4.3에서 "session.bug_compat_42 = 1"
php.ini(4.3기준)에서
session.bug_compat_42 = 1 이라고 되어 있으면
register_global 이 off 되어 있어도 4.2의 전역변수에 대한
호환성을 가지는 것으로 알고 있는데요
보안에는 문제가 없을까요?
문제는 어떤
문제는 어떤 방식으로 넘어오는지 알수 없고, 원치않는 값이 조작되어 넘어 올수 있기때문에, $_GET[], $_POST[] 로 명시를 해줘야 합니다.
$_GET[], $_POST[] 로 받는것은 보안에 대한 문제를 줄이는 하나의 방법입니다.
몇줄의 코드가 추가되고, 귀찮음으로 방관했던 부분이 엄청난 결과를 초래하는지 PHP 보안 몇줄의 코드로 안전하게를 보며 깨달았습니다.. :)
----
웹페이지 : http://bzpalm.net/
추가로 $HTTP_GET_VARS와 $_GET의 차이
$HTTP_GET_VARS는 전역변수입니다.
따라서 함수나 클래스 내부에서 사용할수 있습니다.
하지만 $_GET은 전역변수가 아닙니다.
따라서 함수내에서 사용하실려면 global을 선언하셔야 합니다.
속도면에서는 $_GET을 추천드립니다.
$_GET, $_POST, $_SESSION,
$_GET, $_POST, $_SESSION, $_COOKIE 등은 '슈퍼 전역변수'이므로, global $_GET; 등의 코드를 삽입하면 제대로 값을 받아올 수 없습니다. (참고: http://kr.php.net/manual/en/language.variables.predefined.php#language.variables.superglobals)
그리고 $HTTP_GET_VARS는 PHP 4.1.0 이후로는 쓰이지 않으므로 (register_long_arrays 옵션으로 끌 수 있습니다.) 주의하시기 바랍니다. :)
일부 게시판 등에서는 하위 호환성을 위해 $HTTP_GET_VARS를 $_GET에 넣는다던지 하는 방법을 쓰고 있는 것 같습니다. 그러나 PHP 4.0.x를 고려해야 할 지는 잘 모르겠군요. -_-a
댓글 달기