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

Post 로 PHP에 배열 넘기기 문의 드립니다.

0 추천

초보개발자가 선배님들께 문의 드립니다.

배열을 만들어서 post 로 php 에 데이타를 보내서 php 배열에 넣어주려고 하는데 잘 안풀립니다.

안드로이드 소스에서는 오류없이 실행이 되는데

php 에서 값을 받지를 못하고 있습니다.

소스를 한번 봐주셨으면 좋겠습니다.

 

안드로이드 소스

JSONArray jsonArray = new JSONArray();
 
JSONObject jsonObject = new JSONObject();
jsonObject.put("name","홍길동");
jsonObject.put("tel","12345");
 
jsonArray.put(jsonObject);
 
jsonObject = new JSONObject();
jsonObject.put("name","홍");
jsonObject.put("tel","123");
jsonArray.put(jsonObject);
 
// [{"tel":"12345","name":"홍길동"},{"tel":"123","name":"홍"}]
 
new sendData().execute();
 
====================================
 
public class sendData extends AsyncTask<String, String, Void> {
 
    @Override
    protected Void doInBackground(String... params) {
        // TODO Auto-generated method stub
         
        HttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost("http://www.test.com/jsontest1.php");
 
        try {
             
            HttpEntity httpEntity = new StringEntity(jsonArray.toString(), "UTF-8");
            httpPost.setEntity(httpEntity);
            httpPost.setHeader("Content-type", "application/json");
             
            try {
                httpClient.execute(httpPost);
            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
             
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         
        return null;
    }
 
}

php 소스 : jsontest1.php

<?php
 
    $mysql_hostname = "";
    $mysql_user = "";
    $mysql_password = "";
    $mysql_database = "";
 
    $conn = mysqli_connect($mysql_hostname, $mysql_user, $mysql_password, $mysql_database);
 
    if(mysqli_connect_errno($conn)) {
        echo "Database Connection Fail <br>";
    } else {
        /*echo "Connection OK";*/
    }
         
    mysqli_select_db($conn, $mysql_database);
    mysqli_query("SET NAMES UTF8");
     
 
    $arr = $_POST['jsonarr'];
 
    $decarr = json_decode(stripslashes($arr, true));
     
    print_r($decarr);
    //echo "<br/>";
     
    $count = count($decarr);
    //echo "$count <br/>";
     
    $values = array();
    $update_values = array();
     
    for ($x=0; $x < $count; $x++){
         
        $newrec = $decarr[$x];
         
        $desc = $newrec['name'];
        $desc = mysqli_real_escape_string($conn, $desc);
        echo $desc;
        echo "<br/>";
         
        $type = $newrec['tel'];
        $type = mysqli_real_escape_string($conn, $type);
        echo $type;
        echo "<br/>";
         
        // Create insert array
        $values[] = "('".$desc."', '".$type."')"
         
        // This is used for the on duplicate update
        $update_values[] = "name=VALUES(name),tel=VALUES(tel)";
 
    }
             
    mysqli_close($conn);
 
?>

 

삼국지 (750 포인트) 님이 2015년 3월 23일 질문
삼국지님이 2015년 3월 23일 태그 변경

2개의 답변

+1 추천
 
채택된 답변
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
 
nameValuePairs.add(new BasicNameValuePair("jsonarr", jsonArray.toString()));
 
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

이렇게하거나

raw data로 할려면 php설정에 받을수 있게 되어있는지 확인해보세요

alkyne (22,960 포인트) 님이 2015년 3월 23일 답변
삼국지님이 2015년 3월 23일 채택됨
어렵네요...
알려주신방법으로 다시한번 해봐야겠습니다.
+1 추천
$json = file_get_contents('php://input');
$data = json_decode($json);
nicehee (73,100 포인트) 님이 2015년 3월 23일 답변
관심가져주셔서 감사합니다.
 
$arr = $_POST['jsonarr'];
$decarr = json_decode(stripslashes($arr, true));
 
기존에 php  소스에서 위에 내용을
 
알려주신대로 아래처럼 수정을 했습니다.
그래도 마찬가지인듯 합니다.
 
$json = file_get_contents('php://input');
$arr = json_decode($json);
$decarr = json_decode(stripslashes($arr, TRUE));
 
php소스 에서 직접 내용을 넣고 브라우저에서 테스트를 하면 화면에 잘 나옵니다.
/*
$decarr = json_decode('[
         {"name":"홍길동","tel":"123456"},
         {"name":"홍","tel":"123"}
     ]',true);
*/
안드로이드에서도 Log.d("jsonArray.toString() ==> ", jsonArray.toString()) 로 디버그를 하면

[{"tel":"12345","name":"홍길동"},{"tel":"123","name":"홍"}]
 
이렇게 나옵니다.
 
아직 초보라서 그런지 이거로 몇일을 헤매고 있는지 모르겠네요..
...