728x90

네이버지식인에 자바스크립트 값을 PHP로 넘기는 것에 대해 올라와서 의구심이 들었다.

이런 건 해본적이 없는거 같기도 하고 요즈음 안드로이드 배운다고 jQuery 배우다 중단해서 많이 잊어버려 기억도 안나고 해서 테스트를 해봤다.


<?php
include_once 'dbconnect.php'; // db접속
$width = '<script> document.write(window.screen.width); </script>';
echo 'width : '.$width.'<br />'; // 화면으로 보이는 건 숫자로 보인다. 소스보기로 하면 숫자가 아니다.
echo gettype ($width) . "<br />"; // 타입검사를 하면 string 으로 나온다.
$price = intval($width);  // 정수형으로 변환을 하면 숫자로 나올까??

$sql = "SELECT * FROM table_items WHERE Price > {$price} ";
echo $sql.'<br />';
$result=mysqli_query($dbconn,$sql);
while($row=mysqli_fetch_row($result)){
    echo $row[1].' '.$row[2];
    echo '<br />';
}

?>


$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 를 보면 조금 도움될 수 있다.

아직 자바스크립트에 대해 완벽하게 이해를 한 것이 아니라서 기회가 될 때마다 수정보강할 예정이다.

블로그 이미지

Link2Me

,