본문 바로가기
개발/PHP

[php] javascript boolean 값 받을 때 문제.

by 언제나초심. 2019. 2. 20.
반응형

잘 이해가 안 가는데...언제부터 이랬던 건지는 잘 모르겠다. (혼란의 상태임)


먼저 테스트 를 해보자면



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);

를 기억해두었다가 필요할 때 적절히 사용해야겠다. 




반응형