네이버지식인에 자바스크립트 값을 PHP로 넘기는 것에 대해 올라와서 의구심이 들었다.
이런 건 해본적이 없는거 같기도 하고 요즈음 안드로이드 배운다고 jQuery 배우다 중단해서 많이 잊어버려 기억도 안나고 해서 테스트를 해봤다.
<?php |
$width ="1440";
echo intval($width);
와 같이 직접 입력한 String은 정수형으로 형변환(casting)을 잘 한다.
하지만 자바스크립트에서 받은 값을 직접 DB에 넣어봤더니 숫자로 인식하지 못한다.
육안으로 보이는 <script> document.write(window.screen.width); </script> 는 실제 숫자가 아니라 형변환(intval(string))을 하면 0을 반환한다.
좀 더 명확하게 하기 위해서
include_once 'dbconnect.php'; // db접속
$width = '<script> document.write(window.screen.width); </script>';
echo 'width : '.$width.'<br />';
echo gettype ($width) . "<br />"; //Returns string
$price = intval($width);
$sql = "SELECT * FROM table_items WHERE Price > {$width} ";
echo $sql.'<br />';
$sql = "SELECT * FROM table_items WHERE Price > {$price} ";
echo $sql.'<br />';
이렇게 출력을 해봤다.
화면상으로는
SELECT * FROM table_items WHERE Price > 1920
SELECT * FROM table_items WHERE Price > 0
이렇게 보인다.
브라우저 소스보기로 보면
SELECT * FROM table_items WHERE Price > <script> document.write(window.screen.width); </script>
SELECT * FROM table_items WHERE Price > 0
로 보인다.
https://stackoverflow.com/questions/9715231/unable-to-convert-string-to-integer-in-php
에 PHP 와 JavaScript 언어의 차이점을 간략하게 설명하면서 잘못하고 있다는 걸 답변달아주고 있다.
서버 코드와 Client 코드를 혼용하는 것은 로직이 잘못된 거다.
예전에 "자바스크립트와 PHP 값 전달 이해" 라고 정리해둔 http://link2me.tistory.com/1124 를 보면 조금 도움될 수 있다.
아직 자바스크립트에 대해 완벽하게 이해를 한 것이 아니라서 기회가 될 때마다 수정보강할 예정이다.
'Web 프로그램 > js, jQuery' 카테고리의 다른 글
[jQuery] 선택된 인자가 몇 번째인지 (0) | 2017.12.13 |
---|---|
[jQuery] ajax 처리 디버깅 (0) | 2017.11.29 |
jQuery URL parameter 값 가져오기 (0) | 2017.03.18 |
ajax 상대 경로 설정 문제 완벽 해결방법 (0) | 2017.02.21 |
window.location 정리 (0) | 2017.02.16 |