안드로이드 개발 질문/답변
(글 수 1,399)
현재 어플에서 특정 데이타를 웹서버로 전달하는 소스를 만들려고 하는데. 기존에 좋은 소스가 있어 이것을 이용하여 공부하면서 문제해결하고자 합니다.
post
Map< String, Object > param = new HashMap< String, Object >( ) ; param.put( "name", "ok" ) ; param.put( "latitude", 120 ) ;
post
param.put( "longitude", 55 ) ; m_requestStr = requester.request( new URL( "http://www.wizapp.kr/app/test.php" ) , "POST", param ) ; Log.i("setme","post ok");
test.php 파일내용은
php
@extract($_GET); @extract($_POST); $connect = mysql_connect("localhost","***","****")or die("SQL Connect ERROR"); mysql_select_db("****",$connect); mysql_query("set names utf8"); $name; $latitude; $longitude; $sql = "INSERT INTO m_location VALUES('$name','$latitude','$longitude')"; $res = mysql_query($sql,$connect);
와 같습니다.
어플에서 버튼 클릭해서 이름, 위도 경도가 데이타베이스에 저장되게 하고 싶은데.
현재 실행결과 이름 빈 공간 위도와 경도 는 0 의 값이 저장됩니다.
보안문제이라고 생각해서 일단 @extract($_GET); @extract($_POST); 추가했고, 또 php 정보에서 register_global 설정도 일단 on으로 변경했습니다.
연결은 된것 같은데... 문제가 무엇일까요?
2011.03.02 16:43:22
php
$name = $_POST["name"]; $latitude= $_POST["latitude"]; $longitude $_POST["longitude"]; $sql = "INSERT INTO m_location VALUES('$name','$latitude','$longitude')"; $res = mysql_query($sql,$connect); echo $name; echo $latitude; echo $longitude; echo $sql; ?>
위의 내용으로 수정하고 했는데도 처리가 되지 않네요.
저는 대림출판사에서 나온 누구나 쉽게 정복할 수 있는 php5 를 가지고 하고 있습니다.
조금만 수정하면 될것 같은데.. 현재 get 방식으로 인터넷익스플로러에서는 데이타 입력이 가능합니다.
2011.03.02 18:19:08
왜 그럴까요? @-@; 저도 궁금하긴 한데, 고수분들의 답변이 달렸으면 하는 기대감도 있지만, 질문의 내용이 광범위한 것도 있는듯해요... 뉴아티님께서 올려주신 소스가 부분적이라 어떤식으로 http통신하는지 모르겠지만, 짐작하기에는 entity를 httpPost에 첨부하는 방법에 문제가 있는게 아닌가라는 생각이 드네요.
우선 제가 알기로는 안드로이드에서는 통신시 직렬화(serialized)를 지원하지 않는것으로 알고 있는데, 뉴아티님이 올려주신 소스상에는 레퍼런스 타입인 Map이나 Object를 사용하여 값을 전송하시네요. 이 부분이 정상적으로 이루어지는지 확인해볼 필요가 있는 것 같구요.
Map< String, Object > param =
new
HashMap< String, Object >( ) ;
Question 1 : php에서 Map을 받아낼 수 있는가? 있다면 Map 형식에서 parameter를 뽑아내기 위해선 부가적인 작업이 필요한가 아닌가?
Question 2 : Map형태가 php에서 참조가능한 형태라면, <String,Object>에서 Object는 어떻게 받아내는가? 굳이 Object가 필요치 않다면 <String,String>으로 사용하는게 어떨까?
ps. entity를 생성하는 다른 방식 : 제가 이전 게시물에 참조해보시라고 링크한 사이트가 있는데, 그 문서를 살펴보시면 아래와 같은 방식으로 entity를 생성해서 보내는 소스가 있었답니다. :) 저런 방식으로 원하시는 value와 value의 name을 생성하셔서 httppost의 entity로 정의하시고 전송하시면 php에서도 읽어낼 수 있는(readable 타입) 방법이 되지 않을까 생각되네요.
1.1.7.2. HTML forms
Many applications need to simulate the process of submitting an HTML form, for instance, in order to log in to a web application or submit input data. HttpClient provides the entity class UrlEncodedFormEntity
to facilitate the process.
List<NameValuePair> formparams = new ArrayList<NameValuePair>(); formparams.add(new BasicNameValuePair("param1", "value1")); formparams.add(new BasicNameValuePair("param2", "value2")); UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8"); HttpPost httppost = new HttpPost("http://localhost/handler.do"); httppost.setEntity(entity);
The UrlEncodedFormEntity
instance will use the so called URL encoding to encode parameters and produce the following content:
param1=value1¶m2=value2
사실 php에 대해서는 조금도 몰랐는데 뉴아티님의 여러 게시물 덕분에 php에 관해 공부할 기회와 관심을 갖게 되었습니다. 그점 감사드리고요.
위의 소스에서 문제가 되는 부분은, 개인적으로 php에 대해 전혀 모르지만,
$name = $_POST['name'];
$latitude = $_POST['latitude'];
식으로 클라이언트에서 post에 동봉한 param을 꺼내주는 과정이 생략되었기때문에 원하시는 작업을 수행하지 못했던 것으로 생각됩니다.
ps. php 학습 시작에 좋은 서적이나 사이트에 대해서 알고 계신게 있다면 정보 교류 좀 부탁드릴께요 ^^