마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 php mysql로 데이타 insert

0 추천

안녕하세요.

http://twinw.tistory.com/29

위 페이지를 보고, 안드로이드 단에서 mysql에 데이터 넣는 것을 해 보고 있는데요.

 

안드로이드 코드는 아래와 같습니다.

NetworkUtil.setNetworkPolicy();
try{
InsertTrafficData inserttrafficdata = new InsertTrafficData("http://jungjihyun.zpat.info/data_insert.php";);
String result = inserttrafficdata.InsertData("jungjihyun","1434",
"2016-10-01 13:50:21","36.9","45.8","1");
if(result.equals("1")){
Toast.makeText(getApplication(),"Inserted",Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplication(),String.valueOf(result),Toast.LENGTH_LONG).show();
}
}catch(MalformedURLException e){
e.printStackTrace();
}
--------------------------------------------------
 
 
package com.jinasoft.webtrafficdatatransfer;

import android.util.Log;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
/**
* Created by Jungjihyun on 2016-10-06.
*/
public class InsertTrafficData {
private URL url;
public InsertTrafficData(String url) throws MalformedURLException{this.url = new URL(url);}
private String readStream(InputStream in) throws IOException{
StringBuilder jsonHtml = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"));
String line = null;

while((line=reader.readLine()) != null)
jsonHtml.append(line);

reader.close();
return jsonHtml.toString();
}

//Traffic Data insert
public String InsertData(final String id, final String carnumber, final String time,
final String latitute, final String longitute, final String status ){

try{
String postData = "id="+id+"&"+"carnumber="+carnumber+"&"+"time="+time+"&"+"latitute="+latitute
+"&"+"longitute="+longitute+"&"+"status="+status;
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestMethod("POST");
conn.setConnectTimeout(5000);
conn.setDoOutput(true);//body에 뭔가 쓰기
conn.setDoInput(true);
OutputStream outputStream = conn.getOutputStream();
outputStream.write(postData.getBytes("UTF-8"));
outputStream.flush();
outputStream.close();
String result = readStream(conn.getInputStream());
conn.disconnect();
return result;
}catch(Exception e){
Log.i("TrafficDataPHPRequest","request was failed");
return null;
}

}
}

php 코드는 아래와 같습니다.

<?php
   header("Content-Type: text/html;charset=UTF-8");
   $conn = mysqli_connect('**','**','**');
   mysqli_select_db($conn ,"trafficdatadb");
   mysqli_set_charset($conn,"euckr");
   $data_stream ="'".$_POST["id"]."','".$_POST["carnumber"]."','"
   .$_POST["time"]."','".$_POST["latitute"]."','".$_POST["longitute"]."','".$_POST["status"]."'";
   echo $data_stream;
   $query = "insert into carinfo(id,carnumber,time,latitute,longitute,status) values (".$data_stream.")";
   $result = mysqli_query($conn, $query);
   if($result)
      echo "1";
   else
      echo $data_stream;
   mysqli_close($conn);
?>

 

웹으로만 php 테스트 했을때는 정상적으로 echo가 1이 오던데 안드로이드에서 테스트 하니까 안 되네요.

고수님들 조언 부탁 드리겠습니다.

 

안드로에그 (140 포인트) 님이 2016년 10월 7일 질문

1개의 답변

0 추천

위에 안드로이드 소스로는 작동이 안되는게 맞는거 같습니다.

링크 걸어주신곳에서 

4. PHPRequest.class , 5. MainActivity 가 핵심이거든요.

4번에서 HttpRequest 로 해당 parameter 정보를 php로 보내는겁니다. DB로 직접 insert하는게 아니고요.

맥락을 잘 못 잡으신듯합니다. 링크 주소 가셔서 다시 쭉 읽어보세요.

펭킹 (550 포인트) 님이 2016년 10월 7일 답변
잘 이해가 안되네요. 이 예제가 android 활용하여 DB에 data insert 하는게 아닌가요?
결론을 말씀 드리면 DB에 데이터를 저장하는 애는 PHP입니다.
Android는 단순히 데이터를 가지고 PHP에 이 데이터를 저장해달라고 요청을 보내는겁니다.
위의 코드는 안드로이드에서 PHP 서버에 데이터를 저장하도록 요청하는 코드가 맞는데요. 코드로는 특별히 이상이 없어 보이는데, 칼럼의 데이터 타입이 안맞아서 그럴 수도 있구요. 서버쪽에서 로그에 뭐가 찍히는지 먼저 확인해 보세요.
답변해 주셔서 감사합니다. error log는 아래 text 밖에 없네요.
-------------------------
Thu, 06 Oct 2016 01:45:58 -0500 AH00128: File does not exist: /home/vol2_6/zpat.info/zpa_18524902/htdocs/favicon.ico
-------------------------------------------------------------------
제가 데이터를 아래와 같이 보내는데,
          String result = inserttrafficdata.InsertData("jungjihyun","1434",
             "2016-10-01 13:50:21","36.9","45.8","1");
원래 DB table 데이터 타입이 /varchar/int/datetime/float/float/int인데 이거랑 상관이 있을까요?
혹시나 해서 DB table 데이터 타입을 varchar/varchar/varchar/varchar/varchar/varchar로 했을 때는 오류는 똑같았습니다.
감사합니다.
쿼리문이 에러인지 확인하시려면 SQL문을 직접 실행시켜 보세요. sql문에서 에러가 날 가능성이 있어 보이네요.
insert into table_name values ('jungjihyun','1434',
             '2016-10-01 13:50:21','36.9','45.8','1')
query문은 별 이상이 없는 듯해요. 아래와 같이 $-POST 아니고 직접 넣어봤는데, db에 들어가더라구요.
$id = "jjungjihyun";
    $carnumber = "1234";
    $time = "2016-10-01 13:50:21";
    $latitute = "36.9";
    $longitute = "45.8";
    $status = "1";

    $data_stream ="'".$id."','".$carnumber."','"
    .$time."','".$latitute."','".$longitute."','".$status."'";
    echo $data_stream;
    $query = "insert into carinfo(id,carnumber,time,latitute,longitute,status) values (".$data_stream.")";
    //$query = "insert into carinfo (id,carnumber,time,latitute,longitute,status) values ('jungjihyun','1434','2016-10-01 13:50:21','36.9','45.8','1')";
    $result = mysqli_query($conn, $query);
    if($result)
        echo "1";
    else
        echo $data_stream;
    mysqli_close($conn);

안드로이드 단에서 제가 보내는 postData가 id=jungjihyun&carnumber=1434&time=2016-10-01 13:50:21&latitute=36.9&longitute=45.8&status=1 이렇게 찍어던데,
이게 post문을 만나서 id,carnumber,time에 맞게 들어가는 거죠?(원래 정상 실행이 된다면..)
글쎄요. 포스트하는 안드로이드 소스코드가 잘려보여서 서버주소가 안보이네요. 서버에 데이터가 제대로 전달이 안된다면 안드로이드쪽에서 에러가 날것 같은데, 안드로이드 로그도 확인해 보세요.
제가 원래 zpat라는 무료 웹 호스팅 사이트를 웹 서버로 사용하고 있었는데, aws로 웹 서버를 옮기니 문제없이 잘 동작합니다. 그 동안 답변해 주셔서 감사합니다.
...