반응형
잘 이해가 안 가는데...언제부터 이랬던 건지는 잘 모르겠다. (혼란의 상태임)
먼저 테스트 를 해보자면
index.html
<!doctype html><html><head><meta charset="utf-8">
<title>자바스크립트 boolean 값 php 로 전송 테스트</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("button").on("click", function(){
var isTest = ($(this).val()=="true") ? true : false;
$.ajax({
url: "submit.php"
,type: "get"
,data : {
isTest : isTest
}
,dataType: "html"
,success: function(data){
$(".result").text(data);
}
,error: function(xhr, status, error) { alert(error); }
});
});
});
</script>
</head>
<body>
<button value="false">javascript False 값 전송</button>
<button value="true">javascript true 값 전송</button>
<br><br>
결과
<textarea class="result" rows="20" cols="50"></textarea>
</body></html>
submit.php
<?php
echo "** 넘어온 값 **\r\n";
echo printTypeValue($_GET['isTest']);
echo "\r\n** boolean 캐스팅 **\r\n";
echo printTypeValue((boolean)$_GET['isTest']);
echo "\r\n** filter_var **\r\n";
echo printTypeValue(filter_var($_GET['isTest'], FILTER_VALIDATE_BOOLEAN));
echo "\r\n** if 구문 **\r\n";
if(filter_var($_GET['isTest'], FILTER_VALIDATE_BOOLEAN)){ echo 'true'; } else { echo 'false';}
function printTypeValue($var)
{
return 'gettype[value] => '. gettype($var). '['. $var. ']'. "\r\n";
}
자바스크립트에서 false 였던 값이 php 로 넘어간 후에, 문자열 'false' 가 되어 있다...
당연하게도...(불행하게도...) 이 값을 php 에서 boolean 으로 캐스팅을 하면 true 값으로 변경되게 된다. (false 가 true 가 되는 마법...)
(...)
해결책은 있는데,
filter_var(값,FILTER_VALIDATE_BOOLEAN);
를 사용하는 방법이다.
결론
(무슨 이유로 이러는지, 원래부터 이랬는지, 나는 왜 모르고 있었는지...좌절...)
아마도, form 전송에서는 input 박스의 값이 checked 또는 0,1 같은 값으로 넘어가기 때문에, 이런 현상을 관찰할 일이 없었던 것도 같다.
filter_var(값,FILTER_VALIDATE_BOOLEAN);
를 기억해두었다가 필요할 때 적절히 사용해야겠다.
반응형
'개발 > PHP' 카테고리의 다른 글
php 의 allow_url_fopen, allow_url_include 옵션 (0) | 2019.08.06 |
---|---|
[PHP] 클라우드 플레어 유저 아이피 HTTP_CF_CONNECTING_IP (1) | 2017.02.18 |
[PHP][mysql] inet_aton('::1') 에러 (0) | 2017.02.11 |
[코드이그나이터 Codeigniter] Codeigniter 로 알아본 redirect location refresh 의 차이 (0) | 2017.01.19 |
[PHP] PDO BindValue 와 BindParam 의 차이 (0) | 2016.02.09 |
[PHP] strpos, stripos (0) | 2016.01.19 |
[codeigniter] xss_clean (0) | 2015.10.04 |
[이클립스]cannot create linked resource '/.org.eclipse.dltk.core.external.folders/.link1'. the parent resource is not accessible. (0) | 2015.07.17 |